16F877 ve DHT11

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

Dtmf

Hocam ne gariptirki sensoru ardunio ile denedim gayet guzel calisiyor 😊
Ben en iyisi yeniden siparis vereyim bu sefer AOSONG marka olandan sonucu bildiririm hocam yardiminiz icin tesekkur ederim

ete

Senin sensör derleyici seçiyor demekki. Nasıl başarıyor bilmem ama tebrik etmek lazım.
Ete

POWER

@Dtmf
sorun protonun versiyonunda olabilir.benzer konu benimde başıma geldi.dht11 ile yaptığım ısı ve nem kontrollü bi devre simülasyonda ve gerçek devresinde sorunsuz çalışmıştı.zaman geçti bu devreden yeniden yapmam gerekti.çalışan proğram similasyonda sensör hatası verdi.bu arada ben başka ihtiyaçlardan dolayı protonun versiyonunu değiştirmiştim.uzunca uğraşmama rağmen sorunu çözemedim.başka bir forma başlık açtım baktımki aynı konudan muzdarip arkadaşlarda var.geçmiş gün hatırlayamıyorum bir arkadaş derleyicinin versiyonundan olabilir dedi.bir çok değişik versiyonu denedim.proton 3.5.2.5 de sorunsuz çalıştı.Hatta şunu hatırlıyorum.Ete hocanın protonu kullanmama sebeblerinden biriside bu derleyicinin bu şekilde tutarsız çalışmasından dolayı denilmişti.

ete

Çok doğru. Maalesef Protonda buna benzer pek çok sorunla karşılaştım. Bu nedenle kullanmıyorum.
Ete

Dtmf

ete hocam bugun bır deneme yaptım low ve hıgh surelerını olctum.0 ları olctugumde 5 degerı 1 lerı olctugumde 8 degerı verıyor
Device=16F877A
XTAL=4
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 I  As Byte
Dim TAMRUT  As Byte
Dim ONDARUT As Byte
Dim TAMISI  As Byte
Dim ONDAISI As Byte
Dim X       As Byte
Dim control As Byte

Symbol dta=PORTD.2 'sensor dATA PİNİ PORTA.0 A BAĞLI
Print At 1,1,"SHT11"
DelayMS 2000

;===========================================
BASLA:
Output dta
Low dta
DelayMS 18      '18 ms bekle
High dta           'Data pinini High yap
DelayUS 30 '40 us bekle
Input dta
DON:

PulsIn dta,0,SURE            ;PULS SURELERI O LAR 5 DEGERI VERIYOR 1 LER 8 DEGERI VERIYOR
Print At 2,1,"SURE:",Dec SURE
DelayMS 100
GoTo BASLA
;==============================

ete

Doğru değerler bunlar 50us ile 80us aten daat sheet dede bunları vermiş adam.
Ete

Dtmf

hocam
1.sızın bır calısmanız var onu buldum pıc16f628 ıle ısıs dosyası mevcut olan dht11 lı onu pıc16f628 e yukledım sıcaklıkve nemdegerlerı gosterdı fakat bır deger gosterıp bır sensor hata yazıyor

2.asagıdakı bolum okuma ıcın dogrumu sızce mantıgını cozemedım.

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


ıkı program satırı arasında fark varmı hocam

FOR I=7 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
  WHILE DTA=0:WEND
   Pauseus 40
  IF DTA=1 then ONDARUT.0[I]=1
  while dta=1:wend 
Next

Dtmf

Bu eki görüntüleyemezsiniz.

Dtmf

ete hocam hersey ıcın cok tesekkur ederım :) sıze mınnettarım.sorunun kaynagını buldum formda arastıra arastıra bı arkadasımızın ınce bır ayrıntıya degınmesı dosya derleme. baya cabalattı benı ama olsun cok sey ogrendım sorun bıraz agır olacak ama lanet vırusler :) pc vırus bulasmıs ve proton hex dosyalarını bırbırıne katmıs antıvırus prog.sılmıstım vırusler pc yı adeta bombalamıslar :)dusunsenıze sıradan lcd yazı yazdırmayı denedım oda olmadı . proton  sıldım yenıden yukleyıp hex dosyalarını ımha edıp yenıden kurdum calıstı :) sogolun arkadaslar selametle

ete

Çalıştığına sevindim.
Baştan beri bir terslik olduğu belli idi ama her nedense sen kod konusunda ısrar ediyordun.
Her neyse son olarak yukarıda sorduğun karşılaştırma soruna da cevap vereyim.
Sensör data sheetini incelersen haberleşmede kullanılan data bitlerinin süre ve şekilleri şöyle verilmiş.
0 biti= 50us LOW + 28us HIGH
1 biti= 50us LOW + 70us HIGH
Her iki bitin başlangıç sinyali olan 50us lik LOW aynı olduğundan bit belirlemek için sinyalin HIGH kısmını kullanmak gerekiyor. 8 bitlik bir veriyi belirlemek için ve HIGH biti önden verildiği için 7 den 0 a giden bir döngü kuruluyor.
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
Sinyalin HIGH kısmı değerlendirileceği için LOw kısmını atlamak gerekiyor. Bu nedenle bunu sağlayan WHILE DTA=0:WEND satırı döngüye eklenmiş.
LOW aşıldıktan sonra en azından 0 biti HIGH süresi kadar bekleyip sonrasında sinyalin hala HIGH olup olmadığına bakıyoruz. BU nedenle DelayUS 18 bu işi için kullanılıyor ama 18us uygun bir değer değil maalesef. EN düşük değer 28us olmalı BUu 30Us kabul edebiliriz. Ama tamda sinyalin başlangıç bitiş noktalarına denk gelmemek için 40us bekleme yapıyorz.  Şayet sinyal şekli hala HIGH ise bu bit "1" dir diyoruz. Zira 1 bitinin HIGH süresi 70us idi. Bunun 40us sini bekleyerek geçirmiş olduk şekil hala HIGH ise o bit 1 bitidir değilse sıfır bitidir diyoruz.
Sonrasında hala sinyalin HIGH kısmında olabileceğimiz nedeni ile aşmak için WHILE DTA=1:WEND satırını ekliyoruz.
ENbaşta TAMRUT=0 veya ONDARUT=0 dediğimiz için okunan değerde yalnızca 1 leri düzelterek bilgiyi okumuş oluyoruz. Yani sinyal hala 1 ise bit=1 dir değilse sıfırdır demiyoruz. Sıfır değişkeni sıfırladığımız için önden vermiş olduk çünki.
Umarım anlamışsındır.

Ete

Dtmf

ete hocam ıyı gunler asaır ve aosong marka dht11 arasında soyle bır fark buldum asaır yanı basımabela olan dht11 i MIN 1200ms de bır okumak lazımmıs yoksa sensor hatası verıyor aosong markada böyle bır seye gerek yok
asagıda programı paylasıyorum formdakı saygıdeger degerlı arkadaslara hayırlı olsun :)

        
Device=16F628A
XTAL=4
CMCON=7
'-------------------------- LCD Tanımlama --------------------
TRISA=0  'A portu çıkış olarak ayarlandı.
TRISB=0  'B portu çıkış olarak ayarlandı.
PORTA=0
PORTB=0
CMCON=7
 Declare LCD_TYPE alpha  
Declare LCD_LINES 2
Declare LCD_INTERFACE 4
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.1
Declare LCD_ENPIN PORTB.0
Dim SURE  As Byte
Dim I   As Byte
Dim TAMRUT  As Byte
Dim ONDARUT As Byte
Dim TAMISI  As Byte
Dim ONDAISI As Byte
Dim X       As Byte
Dim control As Byte

Symbol Dta=PORTA.0  'sensor dATA PİNİ PORTA.0 A BAĞLI
Print At 1,1,"dht11"
DelayMS 1000
;=============================================================
BASLA:
Print At 1,1,"   DHT11 TEST  "
Output  Dta
Low     Dta
DelayMS  18      '18 ms bekle
High    Dta         'Data pinini High yap
DelayUS 40      '40 us bekle
Input   Dta
DelayUS 85
While   Dta=0:Wend
DelayUS 85
If Dta=1 Then GoSub hata

TAMRUT=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 40
  If Dta=1 Then SetBit TAMRUT,I;If Dta=1 Then TAMRUT.0[I]=1
  While Dta=1:Wend
Next
                          
ONDARUT=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 40
    If Dta=1 Then SetBit ONDARUT,I;If Dta=1 Then ONDARUT.0[I]=1
  While Dta=1:Wend 
Next

TAMISI=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 40
  If Dta=1 Then SetBit TAMISI,I;If Dta=1 Then TAMISI.0[I]=1
  While Dta=1:Wend  
Next

ONDAISI=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 40
   If Dta=1 Then SetBit ONDAISI,I;If Dta=1 Then ONDAISI.0[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 40
  If Dta=1 Then SetBit control,I
  While Dta=1:Wend  
Next
        If TAMRUT+ONDARUT+TAMISI+ONDAISI=control Then 
        GoTo DEVAM
        Else
        GoSub HATA1
        EndIf
DEVAM:
Print At 2,1,"NEM=",Dec TAMRUT,",",Dec ONDARUT
Print At 3,1,"ISI=",Dec TAMISI,",", Dec ONDAISI
Print At 4,1,"               "
DelayMS 1200 ;ÖNEMLİ MİNİMUM 1200MS gecıkme verılmesı lazım yoksa sensor hatası verıyor (ASAIR MARKA DHT11 LER İCİN)

GoTo BASLA
;==========================================================
hata:
Print At 4,1,"SENSOR HATASI"  
DelayMS 100
GoTo BASLA
End
;============================
HATA1:
Print At 4,1,"HESAP HATASI"    
DelayMS 3000
GoTo BASLA
Return

Powered by EzPortal