Picproje Elektronik Sitesi

ENDÜSTRiYEL OTOMASYON => Endüstriyel Elektronik => Konuyu başlatan: enrique_iglesias - 24 Kasım 2008, 19:21:47

Başlık: DS18B20 hatası
Gönderen: enrique_iglesias - 24 Kasım 2008, 19:21:47
Arkadaşlar 18b20 ile yapılmış bir sürü örnek var ve hesabı aşağıdaki gibi verilmiş :

'----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
SICAKLIKOKU:
'-----------------DİKKAT İSİS'de BU SATIR AKTİF EDİLECEK----------------------
'           ham=$ff5e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
'------------------------------------------------------------------------------
          OWOUT   sicaklik, 1, [$CC, $44]' ISI değerini oku
Bekle:
          OWIN    sicaklik, 4, [Busy]    ' Busy değerini oku
          IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
          OWOUT   sicaklik, 1, [$CC, $BE]' scratchpad memory oku
          OWIN    sicaklik, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
          GOSUB   Hesapla
          RETURN
           
Hesapla:                 ' Ham değerden Santigrat derece hesabı
   Sign  = "+"
   IF SIGN_BITI = NEGAT_ISI THEN
      Sign   = "-"  
      temp=($ffff-ham+1)*625
      ISI  = DIV32 10
      GOTO GEC  
   endif
   TEMP = 625 * (HAM+1)        '  
   ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
   FLOAT = (ISI //1000)/100
   ISI=ISI/1000
RETURN


şimdi bir şey sormak istiyorum biz LCDOUT $FE,1,#ISI,".",#float dediğimizde ekranımızda ISI'yı görüyoruz...

Anlamadığım bir şey var yukarıdaki hesapta ISI değişkenine hiç bir hesaplanmış veri atanmıyor veya ben göremiyorum TEMP ve HAM değişkenleri dışında bir herde hesap yapılmıyor..

yani en azından ISI=TEMP falan olmalı değilmi ama yinede sıcaklığı ekranda görebiliyoruz bu nasıl iş anlamadım :)
Başlık: DS18B20 hatası
Gönderen: ete - 24 Kasım 2008, 23:33:16
Formülde 32 bitlik bir hesap ver ve gerçek ısı orda hesaplanıyor,
TEMP = 625 * (HAM+1)    'bu işlemin sonucu ara bir hafızada tutuluyor    '
ISI = DIV32 10    'sonra ara hafızadaki değer DIV32 10 komutu ile 10'a bölünüp sonuç ISI isimli değişkene atılıyor.

Bu iki satırın anlamınıda yazmak gerekir ise,
Ham değerini bir artırıp 625 ile çarpıyoruz ve çıkan sonucu TEMP değişkenine atıyoruz.
Sonra  ISI = TEMP/10 diyor ve 32 bitlik bir sayıyı 10'a bölüp sonucu ISI değişkenine veriyoruz.
Senin göremediğin bu olsa gerek.
Ete
Başlık: DS18B20 hatası
Gönderen: hatmeto - 25 Kasım 2008, 00:04:55
Şunuda kullanabilirsin.

'******* sensor Okuma ***************
ds18b20yi_oku:
   owout dq, 1,[$CC, $44]
   pause 750
   owout dq, 1,[$CC, $BE]
   owin DQ, 0, [deger.LowByte, deger.HighByte]
   DERECE=DEGER/16
   'LCDOUT $FE ,$C0, DEC DERECE
   Return
:oops: baya işe yaramıştı. işlem hızı biraz daha hızlı... :roll:
Başlık: DS18B20 hatası
Gönderen: enrique_iglesias - 25 Kasım 2008, 01:28:46
çookk teşekkür ederim şimdi daha iyi anladım kaç gündür onu düşünüyordum ama ara hafıza diye bir şey bilmiyordum yani bu 65536 dan büyük bir veri ve ara hafızada tutuluyor ve ordaki veriyi div32 10 ile işlem yapıp yazılabilir bir değişkene atıyoruz :)

sayın ete çok teşekkür ederim verdiğiniz bilgi için

sayın hatmeto dostum ayrıca hesap için teşekkür ederim...