CCS C bir değişkenin iki eksiğini almak

bagztov

Üye
Katılım
5 Nis 2018
Mesajlar
175
Puanları
6
Yaş
25
Herkese merhaba, iyi forumlar.
Ben bir uygulama yapıyorum isiste simüle ediyorum. Şimdilik birkaç sorunum var bunlardan birisi şu;

Ben LM35 ile sıcaklık okuyorum. LCD'de menü oluşturdum. Bir de istenilen sicaklik diye bir değişken oluşturdum. Ve bu değişkeni menüden çıkınca eeprom'a yazdırıyorum.
if kullanarak lm35'ten gelen sıcaklık, istenilen sicaklik değişkeninden büyükse (>) LED yanıyor. küçükse LED sönüyor.
Mesela şu an sıcaklık 30, ben menüden istenilen sıcaklığı 50 yazıyorum. ve menüden çıkınca LED yanıyor. LM35'ten sıcaklığı 50'ye getirince LED sönüyor. Sonra 49 yaptığımda tekrar yanıyor fakat ben istenilen sıcaklığın 2 eksiğinde LED yansın istiyorum. Yani 49 değil de 48 olduğunda LED yansın.
Bunu nasıl yapabilirim? CCS'te değişkenin iki eksiğini alma gibi bir komut var mıdır?

sicaklik; (Bu değişken ADC ile LM35'ten belirleniyor.)
istenen_isi; (Bu değişken menüde değiştirilip write_eeprom(0, istenen_isi); komutu ile eeproma yazdırılıyor.)
int y=-2;
unsigned int8 x;

x=(istenen_isi+y) = Bu şekilde aslında eepromdan istenen_isi'yi okuyup y ile topladığımda y değeri -2 olduğu için İstenen_isi 50 ise x'in değerinin 48 olması lazım ve ben if sicaklik==x yazdığım zaman LED'in yanması lazım ama olmadı.
 
istenen_isi yerine sonme_isisi ve yanma_isisi değişkenlerini kullanın. arada 2 derece fark olsun.
 
kodda biraz sadeleştirme yaparsanız daha kararlı çalıştırırsınız misal y için -2 degerini atayıp sonra onu kullanmak yerine mevcut ısı ile işlem yapmanız şöyle ki okunan degeri

sicaklik;
istenen_isi;
unsigned int8 x;

if( (istenilen_isi-2)>=sicaklik)
{
kontrol etmek istedin kodlar
}
if ile ayarladın sıcaklık 2 çıkartıp ölçülen sıcaklık büyük yada eşit ise fonksiyona girer hem sınama yapıp hemde fazla degişken kullanmadan sade kod olur
 
kodda biraz sadeleştirme yaparsanız daha kararlı çalıştırırsınız misal y için -2 degerini atayıp sonra onu kullanmak yerine mevcut ısı ile işlem yapmanız şöyle ki okunan degeri

sicaklik;
istenen_isi;
unsigned int8 x;

if( (istenilen_isi-2)>=sicaklik)
{
kontrol etmek istedin kodlar
}
if ile ayarladın sıcaklık 2 çıkartıp ölçülen sıcaklık büyük yada eşit ise fonksiyona girer hem sınama yapıp hemde fazla degişken kullanmadan sade kod olur
Hocam cevap verdiğiniz için teşekkür ederim. Ben bu şekilde yazdım zaten ama bu şekilde olunca sıcaklık istenen sıcaklığa gelmeden kapanıyor. Benim istediğim;
Mesela LM35'in değeri 35.
İstenen 40
C0 pini Lojik 1 olacak (Bunu rezistansı çalıştıracak röle gibi düşünebiliriz.)
LM35 40'a ulaştığında C0 pini Lojik 0 olacak
LM 35 istenen derecenin 2 derece altına düştüğünde tekrar C0 lojik 1 olacak.
Umarım doğru anlatabilmişimdir. Diğer türlü yazdığım zaman da 40'a gelince duruyor ama 38 yerine 39'da tekrar devreye giriyor.
if( sıcaklik <= (istenilen -2) )
Cevap yazdığınız için teşekkür ederim. Ancak bu şekilde tam olarak istediğim gibi çalışmıyor.
Mesela sıcaklık değeri 35 iken ben istenileni 40 yaptığımda c0 pini lojik 1 olacak, sıcaklık 40 olduğunda lojik 0 olacak, eğer istenilen 2 derece düşerse tekrar lojik 1 olacak şekilde döngü olması gerekiyor.

Bu şekilde 35'ten 38'e geldiği gibi c0 lojik 0 oluyor yani, istenileni görmeden sistem kapanıyor.

Kod:
if(sicaklik<=(program_istenen_isi-2))
{
output_high(pin_c0);
}
 
Birde şunu dikkat etmek gerekli termostatlarda %5 gibi derece hassasiyetle çalışır burda sende bu tarz bişey yaptın için sıcaklık istenilen dereceye geldince hemen kapanmalı sonunda 40 derece oldu diye ortam da hemen 40 olmuyor biraz daha 40 on üzerine 2 veya 3 derece gibi olursa zırt bırt sistem çalışıp durmaz
 
Birde şunu dikkat etmek gerekli termostatlarda %5 gibi derece hassasiyetle çalışır burda sende bu tarz bişey yaptın için sıcaklık istenilen dereceye geldince hemen kapanmalı sonunda 40 derece oldu diye ortam da hemen 40 olmuyor biraz daha 40 on üzerine 2 veya 3 derece gibi olursa zırt bırt sistem çalışıp durmaz
Hocam benim yapmaya çalıştığım sistemde 40'ta kapansa bile kendi ısısından dolayı 46-48'leri görüyor ısı. O konuda sıkıntı yok 48'den yavaş yavaş 40'a kadar düşüyor. Ben istiyorum ki 39 yerine 38'de açılsın sistem. Onun için uğraşıyorum yani.

Sen kapatiyorsun, o kapatmıyor. Bu sadece açıyor.
İlave bir kod mu yazmam gerekiyor anlayamadım ki.
 

Forum istatistikleri

Konular
128,189
Mesajlar
915,705
Kullanıcılar
449,957
Son üye
sezercakmak

Yeni konular

Geri
Üst