PIC BASIC PRO ile çok sayıda DS1820 problemi..

Başlatan ozek, 02 Aralık 2003, 13:52:11

ozek

Aynı anda cok sayıda ds1820 yi aynı hattan okuma yapan arkadaş

varmı?
Teşekkürler iyi günler..


ise

64 bitlik idsi var ilk onları alman gerekiyor yada almazsan aratman gerekiyor    skip rom yerine id yetkisi veriyorsun bu

sefer

mmengi

sevgili arkadaşlar ben merak edip DS1820 aldım ve melabs ın sitesindeki örnek programı denedim.Fakat sıcaklık doğru

izlenemiyor.Düzgün çalıştığını bildiğim dijital ve analog termometreler ile kıyaslama yaptım ve yerine göre -2 ,-3.5 lik bir fark oluşuyor.Programı incelediğimde DS1820 nin datasheet indeki bilgilere

göre düzgün sorun nedir anlayamadım. devre breadboard üzerinde ve F628 in dahili osilatörünü kullandım bunun bir etkisi olabilirmi acaba

ise

mmengi programı bana gönderebilirmisin  ben 1820 her uygulamamda hemen hemen kullanıyorum fakat bir problem

çıkarmıyor
hata oranı 0.5 derece hata toleransı var

mmengi

Hocam bir uygulamada kullanmak istiyorum ntc veya benzeri şeyler adam akıllı olmuyor net ve kesin sonuç almak için

ds1820 kullanmayı düşünüyorum dediğin gibi hata oranı 0.5 C yazıyor ama gel gör ki 3-4 C eksik gösteriyor. Nasıl bir şey olduğunu anlamak için aşağıdaki programı denedim. OW komutları

kullanılmadan yapılan pbplus kodu var elimde onu deneyeceğim birde.O kod evde kaldı aşağıdaki pro için, eksik gösteren bu kod.








temperature

Var   Word         ' Temperature storage
count_remain Var Byte         ' Count remaining
count_per_c Var   Byte         ' Count per degree

C

DQ   Var   PORTB.1         ' One-wire data pin


' Define LCD registers and

bits
Define   LCD_DREG   PORTA
Define   LCD_DBIT   0
Define   LCD_RSREG

PORTB
Define   LCD_RSBIT   6
Define   LCD_EREG   PORTB
Define   LCD_EBIT   7


CMCON=7         


mainloop: OWOut DQ, 1, [$CC,

$44]       ' Start temperature conversion

waitloop: OWIn DQ, 4, [count_remain]   ' Check for still busy converting
   If count_remain = 0 Then waitloop

   OWOut

DQ, 1, [$CC, $BE]      ' Read the temperature
       OWIn DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE, Skip 4, count_remain, count_per_c]

   ' Calculate

temperature in degrees C to 2 decimal places (not valid for negative temperature)
   temperature = (((temperature >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) /

count_per_c)
   Lcdout $fe, 1, DEC (temperature / 100), ".", DEC2 temperature, " C"

       Pause 1000                      ' Display about once a second

   Goto

mainloop         ' Do it forever

fyper

aynı hattan iki ds1820 yi çalıştırdım
yazdığın formülün sağlamasını yapmadım ama doğru çalişırsa sana 0.0625

santigrat derece aralıklı sonuç verecektir.  0.5 derece hassasiyet yeterli diyorsan sadece temperature.LOWBYTE, temperature.HIGHBYTE ları kullanarak (programdaki  formül karmaşasından

kurtulabilirsin)sonuc elde edebilirsin
temperature.LOWBYTE, temperature.HIGHBYTE  ne olduğunu nasıl hesaplanması gerektiği katalogunda guzel bir şekilde örnekli olarak anlatıyor