16F877 ve DHT11

Başlatan aozsahin, 28 Ocak 2020, 17:12:10

ete

Programa bakayım o zaman. Haber veririm.
Ete

ete

#16
Beni epeyce uğraşturdı bu proje. Asıl uğraştıran şey çalışan programın vermiş olduğun şemada çalışmaması oldu tabiiki. Skop bağlayıp baktığımda sensör çıkışında hiç bir değişiklik görülmüyor idi. Sebebini anlayamadım. DHT11 i silip (tidy yaptım yani lüzümsuz kullanılmayan elemanları sildim sensör dahil) yeniden sensör ekledim. Tekrar denedim sonuç aynı değişmedi.
Sonra yeniden bir devreyi sıfırdan çizdim. Her şey çalıştı.

Gelelim sorunlara.
Öncelikle devre şemasında sensör PORTD.0 a bağlı iken programda PORTA.0 da gözüküyor idi. Onu düzeltip sensörü PORTA.0 a bağladım. Çünki Butonlar PORTA.0 atlanarak bağlanmış. PORTA.0 boşta olduğu için bende sensörü oraya bağladım.
TRISA komutunda butonlar ile TRIS değerleri tutmuyor idi onu düzelttim.
Sonuçta programı çalıştırdım. Ancak önceden çalışmadığı için ben kendi okuma sistemime göre okuma kısmını değiştirip başka isimle kayıt ettim. Benim kodlar sorunsuz çalışıyor.
Daha sonra senin kodlarda eksik olanları tamamlayıp onuda çalışır hale getirdim.
Hepsi ilişiktedir.
Şayet simulasyonda version 8 değilde 7 veya daha altını kullanıyorsanız mevcut şemanızı silin ve aynı şemayı yeniden oluşturun. Bir sebepten dolayı şemanızdaki sensör çalışmıyor yeniden ekleseniz bile çalışmıyor. Hem işlemciyi, hemde sensörü sildim ve yeniden yerleştirip denedim bu sefer çalıştı. Anlaşılan simulasyonda bile olsa işlemciniz ve sensörünüz yanmış değiştirince çalıştı. Komik ama gerçek.

Ete

aozsahin

Merhaba,
Çok fazla deneme yaptığım için kodda porta da olan şemada  port d de kalmış. Sabahki denemede düzeltmiştim ama demek ki simulasyon hatası oluşmuş, daha önce başıma gelmemişti. akşam deneyeceğim... Teşekkürler

Dtmf

ıyı aksalar degerlı arkadaslar dht11 ıle sabahtan bu yana ugrasmama ragmen sensoru okutamadım nerede hata yapıyorum coızemedım yardımcı olurmusunuz
Device=16F877A
XTAL=20
ALL_DIGITAL TRUE
TRISA=0:PORTA=0
TRISB=0: PORTB=0
TRISC=0: PORTC=0
TRISD=0: PORTD=0
TRISE=0: PORTE=0 
Declare LCD_TYPE alpha  
Declare LCD_LINES 2
Declare LCD_INTERFACE 4
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.0
Declare LCD_ENPIN PORTB.1
Dim SURE   As Byte
Dim Ip  As Byte
Dim I  As Byte
Dim TAMRUT As Byte
Dim TEMP1  As Byte
Dim ONDARUT As Byte
Dim ONDAISI      As Byte
Dim control As Byte
Dim HUM1 As Byte
Dim TAMISI As Byte
Symbol DTA=PORTC.7

GoSub EKRAN
GoSub SENSOROKU
DelayMS 500
;=================================================
BASLA: 
      GoSub EKRAN
      GoSub SENSOROKU

     
      GoTo BASLA
;=========================SENSOR OKUMA===========================      
SENSOROKU:
TAMRUT=0:ONDARUT=0:TAMISI=0:ONDAISI=0:control=0     
Output DTA 
Low DTA
DelayMS 18       '18 ms bekle
High DTA           'Data pinini High yap
Input DTA
DelayUS 40   '40 us bekle

While DTA=0:Wend
DelayUS 85

If DTA=1 Then hata

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 40
  If DTA=1 Then SetBit TAMRUT,I
  While DTA=1:Wend
 Next

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 18
  If DTA=1 Then SetBit ONDARUT,I
  While DTA=1:Wend 
Next

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 40
  If DTA=1 Then SetBit TAMISI,I
  While DTA=1:Wend  
Next

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 40
  If DTA=1 Then SetBit ONDAISI,I
  While DTA=1:Wend  
Next

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 40
  If DTA=1 Then SetBit control,I
  While DTA=1:Wend  
Next


;If TAMRUT+ONDARUT+TAMISI+ONDAISI=control Then Return
;Print At 1,1,"                     " 
;Print At 1,1,"SENSOROKUMA HATA"
;DelayMS 3000
;Print At 1,1,"                         "    
;Return

;=========================EKRAN=================================
EKRAN:
If TAMISI>30 Then PORTB.2=0     ;ISI KONTROL BOLUMU  UST SINIR
If TAMISI<25 Then PORTB.2=1     ;ISI KONTROL BOLUMU  ALT SINIR

                  If TAMRUT>30 Then PORTB.3=0     ;ISI KONTROL BOLUMU  UST SINIR
                  If TAMRUT<25 Then PORTB.3=1     ;ISI KONTROL BOLUMU  ALT SINIR
                  
Print At 1,1,"NEM=",Dec TAMRUT,",",Dec ONDARUT
Print At 2,1,"ISI=",Dec TAMISI,",", Dec ONDAISI
DelayMS 500
Return
;=========================HATA==================================
hata:
Print At 1,1,"                       " 
Print At 1,1," SENSOR HATASI "
DelayMS 3000
Print At 1,1,"                       "
Return
;=============================ISI NEM AYAR BOLUMU=======================

ete

#19
BASLA: 
Output DTA 
Low DTA
DelayMS 18      '18 ms bekle
High DTA          'Data pinini High yap
Input DTA  'hata burada!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DelayUS 40  '40 us bekle
Yukarıdaki kısımda hatanın yerini gösterdim. Şimdide açıklamasını yapayım.
HIGH DTA komutunu verdikten sonra peşinden
DelayUS 40 komutunu vermen gerekirdi. Zira DTA pinini HIGH yaptıktan sonra en az 40 US beklemen gerekiyor. Daha sonra DTA pinini INPUT pini haline getirmen gerekirdi. Sen HIGH dedikten hemen sonra INPUT DTA diyerek o pini HIGH dan çıkarmış olursun. Sensörde o pini belirli bir süre HIGH da görmek istiyor sen buna mani oluyorsun sorun burada.
Doğrusu
BASLA: 
Output DTA 
Low DTA
DelayMS 18      '18 ms bekle
High DTA  'Data pinini High yap 
DelayUS 40        
Input DTA
 
şeklinde olmalı.
Programın gerisine bakmadım bu hatayı bulunca budur sorun dedim. Düzelterek dene bakalım ne sonuç alacaksın.
Ete

Dtmf

sayın ete hocam tesekkur ederım ılgınız ıcın ama dedıklerınızı yaptım sensor hatası verıyor sureklı
Device=16F877A
XTAL=20
ALL_DIGITAL TRUE
TRISA=0:PORTA=0
TRISB=0: PORTB=0
TRISC=0: PORTC=0
TRISD=0: PORTD=0
TRISE=0: PORTE=0 
Declare LCD_TYPE alpha  
Declare LCD_LINES 2
Declare LCD_INTERFACE 4
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.0
Declare LCD_ENPIN PORTB.1
Dim SURE   As Byte
Dim Ip  As Byte
Dim I  As Byte
Dim TAMRUT As Byte
Dim TEMP1  As Byte
Dim ONDARUT As Byte
Dim ONDAISI      As Byte
Dim control As Byte
Dim HUM1 As Byte
Dim TAMISI As Byte
Symbol DTA=PORTC.7

GoSub EKRAN
GoSub SENSOROKU
DelayMS 500
;=================================================
BASLA: 
      GoSub EKRAN
      GoSub SENSOROKU
 GoTo BASLA
;=========================SENSOR OKUMA===========================      
SENSOROKU:
 Output DTA 
Low DTA
DelayMS 18       '18 ms bekle
High DTA   'Data pinini High yap 
DelayMS 40        
Input DTA
While DTA=0:Wend
DelayUS 85 
If DTA=1 Then hata

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 40
  If DTA=1 Then SetBit TAMRUT,I
  While DTA=1:Wend
 Next

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 18
  If DTA=1 Then SetBit ONDARUT,I
  While DTA=1:Wend 
Next

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 40
  If DTA=1 Then SetBit TAMISI,I
  While DTA=1:Wend  
Next

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 40
  If DTA=1 Then SetBit ONDAISI,I
  While DTA=1:Wend  
Next

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 40
  If DTA=1 Then SetBit control,I
  While DTA=1:Wend  
Next
TAMRUT=0:ONDARUT=0:TAMISI=0:ONDAISI=0:control=0    
If TAMRUT+ONDARUT+TAMISI+ONDAISI=control Then GoTo SENSOROKU
;=========================EKRAN=================================
EKRAN:
If TAMISI>30 Then PORTB.2=0     ;ISI KONTROL BOLUMU  UST SINIR
If TAMISI<25 Then PORTB.2=1     ;ISI KONTROL BOLUMU  ALT SINIR

                  If TAMRUT>30 Then PORTB.3=0     ;ISI KONTROL BOLUMU  UST SINIR
                  If TAMRUT<25 Then PORTB.3=1     ;ISI KONTROL BOLUMU  ALT SINIR
                  
Print At 1,1,"NEM=",Dec TAMRUT,",",Dec ONDARUT
Print At 2,1,"ISI=",Dec TAMISI,",", Dec ONDAISI
DelayMS 500
Return
;=========================HATA==================================
hata:
Print At 1,1,"                       " 
Print At 1,1," SENSOR HATASI "
DelayMS 3000
Print At 1,1,"                       "
Return
;=============================ISI NEM AYAR BOLUMU=======================

Dtmf

ete hocam daha once bu program calısıyordu nasıl oldu ıse dht11 ısıtıcı onune dusunce erıdı bende ıcını actım 16 bacaklı bır entegre vardı 3 tane sıparıs verdım sımdı elımde olan dht11 lerın ıcınde 8 bacaklı entegre var sızce farklılık olabılırmı

ete

#22
Ben içini açmadım bilemiyorum ama bu kadar fark olmaması gerekir. Programı deneyelim bakalım sonra karar verirsin. Gün içinde bilgi veririm.
Ete

ete

#23
Programda hala hatalar var. Sırası ile veriyorum.
Hata-1: BU hatada benimde biraz payım var sanırım. 40us lik gecikmeyi 40ms olarak yazmışım sende aynısını kullanmışsın.
High dht11  'Data pinini High yap
DelayUS 40 yerine DelayMS 40 yazılmış bunu DelayUS 40 olarak değiştir.

Hata-2:Program sensörden okuma yapıyor ve sonunda okumayı bitirip şu satıra geliyor.
'TAMRUT=0:ONDARUT=0:TAMISI=0:ONDAISI=0:control=0
Bu satır sence mantıklımı? okumaları yapıyorsun ama ekrana yazdırmadan önce bütün değerleri sıfırlıyorsun Böylece sensör bir şey okumamış oluyor. Bu satırı kapatırsan her şey düzgün çalışacak.


Ben simulasyonda deneme yapıyorum. Gerçek sensörle deneyemiyorum elimde yok çünki. Ama simulede çalışıyorsa çalışır daha önce denemiştim çünki.
Çalışmıyor ise aldığn sensörler ya başka bir sensör yada çakma bir şey.

Ete

Dtmf

ete hocam elımde calısan bır program vardı sızınle paylasayım sensor ısıtıcı onunde yanınca 2 tane sparıs verdım taktım calısmadı
;=========================DHT 11 AKILLI SOBA UYGULAMASI========================================
Device=16F628
XTAL=4
ALL_DIGITAL TRUE
TRISA=0:PORTA=0
TRISB=%11100000: PORTB=0
Declare LCD_TYPE         0   ' Standart 2x16 LCD
Declare LCD_DTPIN  PORTA.0	' DATA girişi PORTB'nin B0 ucundan başlayacak
Declare LCD_ENPIN  PORTB.1   ' Enable (EN) pini E2
Declare LCD_RSPIN  PORTB.0   ' Register Select (RS) pini B4
Declare LCD_INTERFACE    4   ' 4 bit LCD arayüzü
Declare LCD_LINES  2;      2	' 2 satırlık LCD
Dim SURE   As Byte
Dim Ip  As Byte
Dim I  As Byte
Dim TAMRUT As Byte
Dim TEMP1  As Byte
Dim ONDARUT As Byte
Dim ONDAISI      As Byte
Dim control As Byte
Dim HUM1 As Byte
Dim TAMISI As Byte

Dim CUST As Byte
Dim CALT As Byte

Dim NALT As Byte
Dim NUST As Byte
Symbol DTA=PORTA.4
Symbol OK=PORTB.5
Symbol AR=PORTB.6
Symbol EKS=PORTB.7

CUST=0
CALT=0
NUST=0
NALT=0
Print At 1,1,"    MERHABA    "
Print At 2,1," AKILLI ISITICI"
DelayMS 3000
Cls
Print At 1,1,"SICAKLIK VE NEM"
Print At 2,1,"   OKUNUYOR    "
DelayMS 2000
Cls

GoSub EKRAN
GoSub SENSOROKU
DelayMS 500
;======================AYAR BOLUMU===============
NUST=ERead 0         ;ELEKTRIK GIDIP GELDIGINDE AYARLARI HAFIZAYA KAYDETME
NALT=ERead 1
CUST=ERead 2
CALT=ERead 3
;=================================================
BASLA: 
PORTA.5=0
      GoSub EKRAN
      If OK=1 Then GoTo AYAR
      GoSub SENSOROKU
      If OK=1 Then GoTo AYAR
     
      GoTo BASLA
;=========================SENSOR OKUMA===========================      
SENSOROKU:
TAMRUT=0:ONDARUT=0:TAMISI=0:ONDAISI=0:control=0     
Output DTA 
Low DTA
DelayMS 18       '18 ms bekle
High DTA           'Data pinini High yap
Input DTA
DelayUS 40   '40 us bekle

While DTA=0:Wend
DelayUS 85

If DTA=1 Then hata

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 40
  If DTA=1 Then SetBit TAMRUT,I
  While DTA=1:Wend
 Next

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 18
  If DTA=1 Then SetBit ONDARUT,I
  While DTA=1:Wend 
Next

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 40
  If DTA=1 Then SetBit TAMISI,I
  While DTA=1:Wend  
Next

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 40
  If DTA=1 Then SetBit ONDAISI,I
  While DTA=1:Wend  
Next

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 40
  If DTA=1 Then SetBit control,I
  While DTA=1:Wend  
Next


;If TAMRUT+ONDARUT+TAMISI+ONDAISI=control Then Return
;Print At 1,1,"                     " 
;Print At 1,1,"SENSOROKUMA HATA"
;DelayMS 3000
;Print At 1,1,"                         "    
;Return

;=========================EKRAN=================================
EKRAN:
If TAMISI>CUST Then 
PORTB.2=0    ;ISI KONTROL BOLUMU  UST SINIR
PORTB.3=0
EndIf

If TAMISI<CALT Then 
PORTB.2=1     ;ISI KONTROL BOLUMU  ALT SINIR
PORTB.3=1
EndIf

                  If TAMRUT>NUST Then PORTB.4=0     ;ISI KONTROL BOLUMU  UST SINIR
                  If TAMRUT<NALT Then PORTB.4=1     ;ISI KONTROL BOLUMU  ALT SINIR
                  
Print At 1,1,"NEM=",Dec TAMRUT,",",Dec ONDARUT
Print At 2,1,"ISI=",Dec TAMISI,",", Dec ONDAISI
If OK=1 Then GoTo AYAR
DelayMS 500
Return
;=========================HATA==================================
hata:
Print At 1,1,"                       " 
Print At 1,1," SENSOR HATASI "
DelayMS 3000
Print At 1,1,"                       "
Return

;====================================AYAR BOLUMU======================================================================
AYAR:
Cls
Print At 1,1,"  UST SICAKLIK"
Print At 2,1,"DERECE:"
DelayMS 1000

    AYAR1:
    Print At 2,9,Dec CUST
If CUST>50 Then CUST=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
    DelayMS 10
    Print At 2,9,"    "
    If AR=1 Then ;SICAKLIK ARTIRMA BOLUMU
    Inc CUST
If CUST>50 Then CUST=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
    A:
    Print At 2,1,"DERECE:+",Dec CUST
    If AR=1 Then GoTo A
EndIf
 ;SICAKLIK UST AZALTMA   
    If EKS=1 Then       ;SICAKLIK AZALTMA BOLUMU
            Dec CUST
           If CUST>50 Then CUST=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
            B2:
            Print At 2,1,"DERECE:-",Dec CUST
            If EKS=1 Then GoTo B2
           EndIf
    If OK=1 Then GoTo ILERI2
    GoTo AYAR1
;================================
ILERI2:
DelayMS 500
Cls
AYAR2:
Print At 1,1,"  ALT SICAKLIK"
Print At 2,1,"DERECE:"
If CALT>50 Then CALT=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
Print At 2,9,Dec CALT
If AR=1 Then       ;SICAKLIK ARTIRMA BOLUMU
CALT=CALT+1
If CALT>50 Then CALT=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
A1:
If AR=1 Then GoTo A1
Print At 2,1,"DERECE:+",Dec CALT
EndIf
        
        If EKS=1 Then       ;SICAKLIK AZALTMA BOLUMU
        CALT=CALT-1
        If CALT>50 Then CALT=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
        B1:
        If EKS=1 Then GoTo B1
        Print At 2,1,"DERECE:-",Dec CALT
       EndIf
If OK=1 Then GoTo NM
GoTo AYAR2

;===============================NEM AYAR BOLUMU======================================

NM:
DelayMS 1000
Cls
Print At 1,1,"     UST NEM    "
Print At 2,1,"NEM:"
If NUST>100 Then NUST=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
Print At 2,6,Dec NUST

AYAR3:
If NUST>100 Then NUST=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
Print At 2,6,Dec NUST

If AR=1 Then       ;NEM ARTIRMA BOLUMU
NUST=NUST+1
If NUST>100 Then NUST=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
N1:
Print At 2,1,"NEM:+",Dec NUST
If AR=1 Then GoTo N1
EndIf
        
        If EKS=1 Then       ;NEMAZALTMA BOLUMU
        Print At 2,6,"    "
        NUST=NUST-1
        If NUST>100 Then NUST=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
        N2:
        Print At 2,1,"NEM:-",Dec NUST
        If EKS=1 Then GoTo N2
       EndIf
If OK=1 Then GoTo ILERI4
GoTo AYAR3
;========================
ILERI4:
DelayMS 1000
Cls
Print At 1,1,"    ALT NEM  "
Print At 2,1,"NEM:"
If NALT>100 Then NALT=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
Print At 2,6,Dec NALT

AYAR4:
If NALT>100 Then NALT=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
Print At 2,6,Dec NALT
 
If AR=1 Then       ;NEM ARTIRMA BOLUMU
NALT=NALT+1
If NALT>100 Then NALT=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
N3:
Print At 2,1,"NEM:+",Dec NALT
If AR=1 Then GoTo N3
EndIf
        
        If EKS=1 Then       ;SICAKLIK AZALTMA BOLUMU
         Print At 2,6,"    "
        NALT=NALT-1
If NALT>100 Then NALT=0 ;UST SINIR 50 DERECE VE 255 ISE UST SINIRI SIFIRLA
        N4:
        Print At 2,1,"NEM:-",Dec NALT
        If EKS=1 Then GoTo N4
       EndIf
       
If OK=1 Then
Cls
Print At 1,1,"     AYARLAR    "
Print At 2,1,"   KAYDEDILDI  "
DelayMS 2000
EWrite 2,[CUST]
EWrite 3,[CALT]
EWrite 1,[NALT]
EWrite 0,[NUST]
Cls
GoTo BASLA
EndIf
GoTo AYAR4

Dtmf


ete

Ben Proton derleyici kullanmıyorum. Bu nedenle programı PBP ya çevirip öyle deniyorum.
Derlediğin Hex dosyasını ve devre şemasını buraya koyarsan bizde deneriz simulasyonda çalışıyor ise sensörlerin bozuktur yada uyumsuzdurlar. Bir şey değişir ama orjinalliği bozulmaz bildiğim. Bozularak yenilenirse adını başka koyarlar. Sende isim aynı ama parametreler değişmiş gözüküyor.
Yinede sensörlerden şüphelenmek gerekir diye düşünüyorum.

Ete

Dtmf

ete hocam vaktınızı calıyorum :) ama gercekten bu sensorler garıp ensor test ıcın soyle bır program denedım
Device=16F877A
XTAL=20
ALL_DIGITAL TRUE
TRISA=0:PORTA=0
TRISB=0:PORTB=0
TRISC=0:PORTC=0
TRISD=0:PORTD=0
Declare LCD_TYPE alpha  
Declare LCD_LINES 2
Declare LCD_INTERFACE 4
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.0
Declare LCD_ENPIN PORTB.1
Dim SURE As Byte
Symbol dta=PORTC.7 'sensor dATA PİNİ PORTA.1 A BAĞLI
DelayMS 200
;====================================================

BASLA:
Print At 1,1,"DHT11 DENEME"
Output dta   'Data pinini Çıkış yap
dta=0            'data pinini LOW a çek
DelayMS 18       '18 ms bekle
dta=1           'Data pinini High yap
DelayUS 40  '40 us bekle
Input dta      

While dta=0:Wend
PulsIn dta,1,SURE
DelayMS 200
Cls
Print At 2,1,"sure=",Dec SURE
GoTo BASLA

sensoru ıkı okumada bır 11 gosretıyor 20mhz osc etkısı olabılırmı sızce

Dtmf

Ete hocam dht11 direnc.net ten aldim  pdf dosyasinada biraz baktim digerlerinden biraz farkli gibi sizde bi bakbilirmisiniz gozden kacirdigim biyer varmi hem formdaki diger arkadaslarada bu konuda oncu oluruz.

https://www.direnc.net/dht11-sicaklik-ve-nem-sensoru

ete

Data Sheetini inceledim Direnc.net de link vermişler. Hiç bir farklılık göremedim.
Direk data sheet deki haberleşme formatı üzerinden programı değerlendirdim kesinlikle programın bu sensörü okuması gerekir.
Her şeyden önce programın doğru çalışıyormu onu test etmen gerek. En azından sensör okumaya geçmeden önce bir ledi yakıp söndür ki program işliyormu anlayalım. Led yanıp sönüyor ise sistemin çalışıyor ve sensör okuma kısmıda çalışıyor demektir.

Pulsin komutu, işlemci OSC frekansına göre farklı değerler verir. Örnek vermek gerekir ise, Diyelimki 80us lik bir HIGH süresi ölçüyorsun,

4Mhz işlemci frekansında 10'un katları şeklinde verir bu süreyi yani 8 (8*10=80us) olarak vermesi gerekir.
Hesap şekli ise 1 komut çevrimi 4Mhz/4=1  ve 1/1=1us bulunur. 1us*10=10 un katları şeklinde olur.

20 mhz işlemci frekansında ise 20/4=5 ve 1/5=0,2 ve 0,2*10=2 nin katları şeklinde okunur.Bu durumda 80us için 20 Mhz OSC frekansında 40 okuman gerekir ve 40x2=80us eder.

İkidebir 11 okuyor ise sensör 22us lik bir high süresi uyguluyor demektirki bu data sheete göre yanlış bir değer. Sensörden şüphelenmek gerekir.
 
Ete

Powered by EzPortal