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
(https://i.ibb.co/CJ12n09/DHT22.jpg) (https://ibb.co/CJ12n09)
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.
(https://i.hizliresim.com/p538Mq.jpg) (https://hizliresim.com/p538Mq)
proteusta bu şekilde bir hata veriyor.
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.