proton ds18b20 sıcaklık kontrolu

Başlatan korcenk, 30 Temmuz 2010, 23:11:53

korcenk

arkadaşlar pic18f452 ile 2 ayrı bacakdan PORTD.0 dan ds18b20 nin tekini PORTD.1 den ds18b20 nin digerini okuyorum. 2 ds18b20 leri birbiriyle karşılaştırıyorum.benim sorunum okuma sırasında pıcı fazla bekletmesı.mesala menuye girip ayar yapacagım zaman butonu sureklı basılı tutmam gerekıyor yoksa butonu algılamıyor.

sanırım 12 bit okuma yaptıgı ıcın ds18b20 lerde 750 ms ye bekleme yapıyor 2 tanesi 1500 ms yapıyor sorun bu sanırım bunu nasıl cözebilirim.11 bit veya 10 bit okumada işimi görebilir ama nasıl yapılacagını bilmiyorum.
asagıda kodun sıcaklık okuma kısmı var
iyi calışmalar
OWrite DQ1, 1, [$CC, $44]  ' 1.sensör rom kodu 
   
W1: 
DelayMS 1
ORead DQ1, 4, [mesgul] ' Çevrim devam ediyormu kontrol ediliyor,
                                ' mode4 ile veri alınıyor
If mesgul = 0 Then W1' musgul "0" sa hala meşgul, O zaman W1 etiketine git    
OWrite DQ1, 1,[$CC, $BE] '1.sensör okuduğu
'sıcaklık değerini göndersin    
ORead DQ1, 2, [okunan.LowByte,okunan.HighByte]' iki Byte oku ve iletişimi sonlandır
GoSub SICAKLIK_HESABLA1




OWrite DQ2, 1, [$CC, $44]  ' 1.sensör rom kodu 
   
W2: 
DelayMS 1
ORead DQ2, 4, [mesgul2] ' Çevrim devam ediyormu kontrol ediliyor,
                                ' mode4 ile veri alınıyor
If mesgul2 = 0 Then W2' musgul "0" sa hala meşgul, O zaman W1 etiketine git    
OWrite DQ2, 1,[$CC, $BE] '1.sensör okuduğu
'sıcaklık değerini göndersin    
ORead DQ2, 2, [okunan2.LowByte,okunan2.HighByte]' iki Byte oku ve iletişimi sonlandır
GoSub SICAKLIK_HESABLA2

 



SICAKLIK_HESABLA1:
If okunan.15=1 Then ' o zaman sıcaklık 0 ın altndadır      
isaret="-"      ' sıcaklık negatif hesaplanıyor    
hesaplanan=($FFFF-okunan+1)    
hesaplanan=hesaplanan/16
Else         
isaret="+"      'sıcaklık + hesaplanıyor    
hesaplanan=okunan/16  
EndIf  
Return

SICAKLIK_HESABLA2:
If okunan2.15=1 Then ' o zaman sıcaklık 0 ın altndadır      
isaret2="-"      ' sıcaklık negatif hesaplanıyor    
hesaplanan2=($FFFF-okunan2+1)    
hesaplanan2=hesaplanan2/16
Else         
isaret2="+"      'sıcaklık + hesaplanıyor    
hesaplanan2=okunan2/16  
EndIf  
Return

Maxim

bu gibi durumda interrupt kullanmanız gerekir ,
aklıma başka çözüm gelmedi ,

RB0/INT VE CCP interruptlarına bakınız

korcenk

interrupu menuye girmek için kullandım rb0 ı. başka bi çozüm bulabilirmiyiz acaba
ilgin için teşekkürler
iyi calışmalar

Maxim

ama menüye girerken sorun yaşıyorum zaten demişsin ?

"mesala menuye girip ayar yapacagım zaman butonu sureklı basılı tutmam gerekıyor yoksa butonu algılamıyor."

neyse
o zaman ccp capture interruptını kullanmayı deneyebilirsin sanırım .
RB1 ve RB2 interruptlrıda var