DS18B20 ile okuduğum sıcaklık +65.5 Derecede Kalıyor

Başlatan ceyhun.topcuoglu, 27 Aralık 2013, 23:26:48

ceyhun.topcuoglu

Öncelikle merhabalar...
LCD ve ds18b20 ile termostat devresi yaptım devreyi iside kurdum başka örnekleri inceledim vs. sonunda başarılı şekilde çalıştırdım ve devreyi bastım
ilk çalıştırmamda sıcaklık değerini okudum sonra ne olduysa +65.5 derecede kalıyor programda karşılaştırma alt programını devre dışı bıraktım yine aynı sorun başka bir boş porta bağladım DS18b20'yi yine aynı durup dururken çalışmaması kafamı oldukça karıştırdı. İsisde çalışıyor hatasız fakat reelde çalışmıyor. Sensörün DQ ve VCC pinlerine paralel 10k direnç bağlı gnd ucu da direk gndye bağlı.


Sensörü okuduğum ve hesapladığım program bu. Hazır bir kod olarak buldum.

Not: Hesaplamada hep 1 Derece Eksik hesaplıyor bende Isı değişkenini +1 yaparak gerçek değere yükseltiyorum onu sildiğimdede aynı sorun yani hesaba göre hep +64.5 Derece gösteriyor.



SENSOROKU1:
           
           OWOUT   Comm_Pin1, 1, [$CC, $44]' ISI değerini oku
Bekle1:
           OWIN    Comm_Pin1, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle1  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin1, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOto   Hesapla1
           RETURN
   
Hesapla1:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC1   
    endif
    TEMP = 625 * (HAM+1)        '
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
   
GEC1:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
   
    LCDOUT $fe,1,"SICAKLIK:",Sign,DEC ISI,".",DEC1 (Float),0,"C " '2. satırda ısı
    if ISI=65535 then
       
        lcdout $FE,$80,"  OKUMA HATASI  "
        pause 1000
   
    endif
   
    return




değişkenlerimi de yazıyorum bunlardan da şüphelenmiyor değilim:

Comm_Pin1   VAR	Portb.0
Busy        VAR BIT
HAM         VAR WORD
ISI         VAR word
SIGN        VAR BYTE
SIGN_BITI   VAR HAM.Bit11
NEGAT_ISI   CON 1
TEMP        VAR BYTE
Float       VAR WORD



yardımlarınızı bekliyorum. DS18B20 bozuldu desem neden bana bilgi gönderiyor ayrıca durup dururken bozulacak bir şey de değil.
şimdiden teşekkürler.

Çizimin Şemasını da atıyorum:


Selametle....

mesaj birleştirme:: 28 Aralık 2013, 00:10:01

Sensörden Okuduğum HAM değer sabit olarak 2047 yani hesaplamada bir sıkıntı yok sıkıntı sensörü okumada

ete

Aslında sorunun kaynağı TEMP değişkeninin BYTE cinsinden olması. Onu WORD yaparsan düzelir.
Ancak yinede eskiden kullandığım hesaplama şekli yerine yenilerde kullandığım hesap şeklini kullansan daha emniyetli hesaplama yaparsın. Hesapla1: etiketi altındakileri şöyle değiştir;
 Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       HAM=~HAM+2
    ENDIF
    ISI=HAM*10/16
    FLOAT = ISI//10
    ISI=ISI/10


Bu hesap şekli sıcaklığı 10 ile çarpılmış olarak sana verecektir. Yani 23,6 olan sıcaklık sende 236 olarak hesaplanacaktır.
Float kısmı 6 sayısını alacak ISI kısmı ise 23 kısmını alarak uygun şekilde göstermeni sağlayacaklardır.

Ete

ceyhun.topcuoglu

Çok teşekkür ederim hocam. Dediğiniz gibi yaptım şuan sensörün VCC ve GND uçları arasına 100nf koydum şu dediğiniz işlemleri yaptığımda sıcaklık 127.9 da sabit Ham değer ise 2047 de kalıyor. Hiç bir değişim olmuyor sıcaklıkta. DQ ve vcc arasında olan 10 k direnç yerine 4k7 bağladığımda çok ilginç bir şey oluyor. Sensör ün üzerine parmağımı bir süre koyunca Sıcaklık 127.9 Oluyor Ham değer 2047'de sabit kalıyor
elimi çektikten bir süre sonra saçmalamaya başlıyor. Saçmalarken -32 derecelere bile düşüyor. Sensörün bozulma ihtimali nedir acaba ?

ete

Kesin olan bir şey var oda ya sensörün bozuk yada sensör DS18B20 değil (DS1820 olabilir)

Ete

ceyhun.topcuoglu

Sensör DS18B20 hocam Dediğim gibi ilk başta sorunsuz ölçüm yapmaktaydım sonrasında bozuldu acaba programda mı bir oynama yaptım diye düşündüm yaptığım oynamaları pice yazmadım. Yani durup dururken olduğu için geriye bir tek bozuk sensör kalıyor. İnşallah sensör bozulmuştur diye ümit ediyorum bugün değiştirip sonucu buraya paylaşıcam. Yardımlarınız için çok teşekkür ediyorum.

ete

Pic pinininde bozulma ihtimali var elbette. İkisinden birisi zaten.

Ete

ceyhun.topcuoglu

giriş olarak kullandığım pinle yer değiştirdim o ihtimalde kalmıyor sanırım sensör bozuk kesin :)

ceyhun.topcuoglu

Evet Sorun ETE hocanın da dediği gibi sensörden kaynaklanıyormuş. Sensörü değiştirdim ve hiç bir sıkıntı kalmadı Yardımların için teşekkürler hocam :)

Powered by EzPortal