DHT22 okuma sorunu

Başlatan POWER, 12 Kasım 2019, 23:20:17

POWER

Arkadaşlar kolay gelsin.
16f88 ve dht22 ile kullanarak nem ve ısı okumaya çalışıyorum.Fakat başarılı olamadım.Sensör okuma kodları alıntı.simülasyonda da devresindede sensör hatası veriyor.ne yaptımsa başarılı olamadım.formlarda benzer kodlardan mevcut.çalışıyor denilen kodlarıda çalıştıramadım.protonu ve isisi yeniden kurdum sonuç değişmedi.mevcut dosyaları ekliyorum.Yardım edeceklere şimdiden teşekkürler.
https://www.dosya.tc/server23/smkfco/DHT22.rar.html
Device = 16F88
@CONFIG_REQ
@__CONFIG _CONFIG1, INTRC_IO & WDT_OFF & PWRTE_ON & MCLR_OFF & BODEN_OFF & LVP_OFF & WRT_PROTECT_OFF & CP_OFF & CPD_OFF & DEBUG_OFF
Xtal 4
OSCCON=%01101100

TRISA=%00000000
TRISB=%00000000 
PORTA=0
PORTB=0
CMCON=7
ANSEL=0 

Declare All_Digital TRUE
Declare LCD_DTPin PORTB.0  ' LCD Data Pin   
Declare LCD_RSPin PORTB.4  ' LCD RS Pin
Declare LCD_ENPin PORTA.4  ' LCD EN Pin
Declare LCD_Lines 2        ' LCD Satır
Declare LCD_Interface 4    ' LCD Data Pin Sayısı 4


Symbol dTa =PORTA.3
Dim tAmIsI As Word
Dim OnDaIsI As Byte
Dim TaMrUt As Word
Dim OnDaRuT As Byte
Dim cOnTroL As Byte
Dim isi As Word             
Dim nem As Word             
Dim Y As Byte
Dim I As Byte

BASLA:
      GoSub SeNsOROkU
      GoSub ARK_SONDUR
      GoSub EKRAN
GoTo BASLA

EKRAN:
     Print At 1,1,Dec2 tAmIsI,".",Dec1 OnDaIsI," ",0,"C"
     Print At 2,1,Dec2 TaMrUt ,".",Dec1 OnDaRuT," RH"
     GoSub ARK_SONDUR
     Return
                               
TEMIZLE:
 Cls                     
 Return

SeNsOROkU:      
     Output dTa
     dTa =1 '1
     DelayUS 5
     dTa =0  '0
     DelayMS 5      '1-10 ms bekle
     dTa =1         'Data pinini High yap
     DelayUS 40     '40 us bekle
     Input dTa
     DelayUS 5
     While dTa =0
     Wend
     DelayUS 80
     If dTa =1 Then HaTa

TaMrUt=0
For I=15 To 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
     While dTa =0
     Wend  
     DelayUS 30
     If dTa =1 Then LoadBit TaMrUt,I,1
     While dTa =1
     Wend
Next

tAmIsI=0
For I=15 To 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
     While dTa=0
     Wend
     DelayUS 30
     If dTa=1 Then LoadBit tAmIsI,I,1
     While dTa =1
     Wend 
Next           

cOnTroL=0
For I=7 To 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
     While dTa =0
     Wend 
     DelayUS 30
     If dTa=1 Then LoadBit cOnTroL,I,1
     While dTa =1
     Wend  
Next
     Output dTa
     dTa=0
     OnDaRuT=TaMrUt//10
     TaMrUt =TaMrUt /10
     OnDaIsI=tAmIsI//10
     tAmIsI =tAmIsI /10     
Return

HaTa:
    Print At 1,12,"     "
    Print At 1,1,"S E N S O R" 
    Print At 2,1,"     "
    Print At 2,6,"H A T A S I"
    GoTo SeNsOROkU

ARK_SONDUR: 
    For Y = 1 To 100   
    DelayMS 4
    Next Y 
    Return
End

TB6BKG

mustafa_cmbz

Alıntı YapDevice 16F628A
 Xtal 20
 TRISA =0
 TRISB =0
 PORTA =0
 PORTB =0
 
 CMCON =7
 Declare All_Digital TRUE
 
 Declare Hserial_Baud  = 9600 ' Set baud rate to 9600
 Declare Hserial_RCSTA = %10010000 ' Enable continuous receive
 Declare Hserial_TXSTA = %00100000 ' Enable transmit and asynchronous mode       ' LCD İÇİN KULLANILACAK
 Declare Hserial_Clear = On ' Clear the buffer before receiving

 Declare LCD_DTPin PORTB.4  ' LCD Data Pin   
 Declare LCD_RSPin PORTB.0  ' LCD RS Pin
 Declare LCD_ENPin PORTB.3  ' LCD EN Pin
 Declare LCD_Lines 2        ' LCD Satır
 Declare LCD_Interface 4    ' LCD Data Pin Sayısı 4
 Cls
 DelayMS 100

 Symbol dTa   =PORTA.0

 Dim I As Byte
 Dim TaMrUt As Word
 Dim OnDaRuT As Byte
 Dim tAmIsI As Word
 Dim OnDaIsI As Byte
 Dim X As Byte
 Dim cOnTroL As Byte
 Dim SeC As Bit


 BaSLa:
 Cls
 DelayMS 10
 Print At 1,1,"ISI ="
 Print At 2,1,"NEM ="
 MaIn:
 GoSub SeNsOROkU
 Print At 1,7,Dec tAmIsI,",",Dec OnDaIsI," "
 Print At 2,7,Dec TaMrUt,",",Dec OnDaRuT," "
 DelayMS 100
 GoSub DATA_GONDER
 GoTo MaIn

 DATA_GONDER:
 DelayMS 100
 HSerOut [13,"NEM ",Dec TaMrUt,13,"ISI ",Dec tAmIsI,13]
 DelayMS 100
 Return

 SeNsOROkU:     
 Output dTa
 dTa =1
 DelayUS 5
 dTa =0
 DelayMS 5      '1-10 ms bekle
 dTa =1         'Data pinini High yap
 DelayUS 40      '40 us bekle
 Input dTa
 DelayUS 5
 While dTa =0 :Wend
 DelayUS 80
 If dTa =1 Then HaTa

 TaMrUt=0
 For I=15 To 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
 While dTa =0:Wend 
 DelayUS 30
 If dTa =1 Then LoadBit TaMrUt,I,1
 While dTa =1:Wend
 Next
 
 tAmIsI=0
 For I=15 To 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
 While dTa=0:Wend
 DelayUS 30
 If dTa=1 Then LoadBit tAmIsI,I,1
 While dTa =1:Wend
 Next           

 cOnTroL=0
 For I=7 To 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
 While dTa =0:Wend
 DelayUS 30
 If dTa=1 Then LoadBit cOnTroL,I,1
 While dTa =1:Wend 
 Next
 Output dTa
 dTa=0
 OnDaRuT=TaMrUt//10 :TaMrUt =TaMrUt /10
 OnDaIsI=tAmIsI//10 :tAmIsI =tAmIsI /10
 Return
 
 HaTa:
 SeC =0
 For X =0 To 50
 Toggle SeC
 If SeC =1 Then Print At 1,3,"SENSOR HATASI"
 If SeC =1 Then Print At 1,3,"             "
 DelayMS 200
 Next X
 GoTo BaSLa
 
 End


Normalde bu kod çok güzel çalışıyor ama geçen gün protonu güncel sürümünü yükledim.Elimdeki kodu alıp derlediğimde çalıştırmıyor.



proteusta bu şekilde bir hata veriyor.

POWER

mustafa hocam,
dediğiniz gibi bende bu kodları daha önce sorunsuz kullanmıştım.aynı isis uyarısı bendede veriyor.tekrar lazım oldu denedim çalışan kod çalışmaz oldu.bende protonda versiyon değişikliği yapmıştım.sizin protonun eski versiyonu neydi?o versiyonda denemek istiyorum.
TB6BKG