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
(https://i.hizliresim.com/p538Mq.jpg) (https://hizliresim.com/p538Mq)
Normalde eski sürümde gayet güzel çalışan DHT22 nem okuma işlemi protonun yeni sürümünde "LoadBit" komutundan dolayı çalışmıyor..
Bunun sebebi ni bilen yada başına gelen varmı ?
İlk gözüme çarpan bu komut olduğu için silip denediğimde proteus uyarı vermiyor.
@mustafa_cmbz hocam ben proton 3.7.2.8 kullanıyorum. Aşağıdaki config satırlarını kodunuza eklemeden derledim herhangi bir hata vermedi protonda. Bu satırları ekleyip derledim yine hata yok. 3.7.2.8 kurup deneyin veya aşağıdaki satırı ekleyin çalışmanıza. Proteustan kaynaklanan bir hata da olabilir. MCLR on off devrenize göre seçiniz. Ayrıca proton manualde çok şeyin değiştiğini görüyorum. En basitinden kristal belirtmek için bile declare öneriyorlar: Declare Xtal = 20
Config FOSC_HS, WDTE_OFF, PWRTE_OFF, MCLRE_OFF, BOREN_ON, LVP_ON, CPD_OFF, CP_OFF
Bir de manualde sayfa 36'da kod yerleşimi hakkında bilgiler var bu kurallara uyulması tavsiye ediliyor, main bile en sonda kendine yer bulmuş:
A Typical flat BASIC Program Layout
The compiler is very flexible, and will allow most types of constant, declaration, or variable to be placed
anywhere within the BASIC program. However, it may not produce the correct results, or an unexpected
syntax error may occur due to a variable being declared after it is supposed to be used.
The recommended layout for a flat BASIC program is shown below.
Device
'
Declares
'
'
Includes
'
'
Constants and Variables
'
GoTo Main ' Jump over the subroutines (if any)
'
Subroutines go here
'
'
Main:
Main Program code goes here
Bu değişiklikler alışkanlıklarınızı bozuyor epeydir eski sürümden gidiyordum
Geçenlerde oled merakım yüzünden güncel sürüm yükledim akşam Dht22 için kod paylaştılar yardımcı olmak istedim ama nanay.
İyi ki önceden farkettim Mevcuttaki projede sorun yaşayacaktım.
Bahsettiğiniz sürümü yükleyeceğim.