avatar_anlhlc

Pic16F628A ile DHT22 Sensör Kullanımı Hk.

Başlatan anlhlc, 11 Ocak 2017, 15:45:04

ete

#30
Programı değil okuma sonucu elde ettiğin ham değerleri ve CRC değerini istemiştim.
Programıda inceleyeceğim.
Kod verirken Kod Tag kullanalım lütfen.

Kod2u da inceledim. Bazı hoşuma gitmeyen noktalar var onları yeniden düzenledim.
Kodun tamamı burada değil sanırım. Bu nedenle yalnızca sensor okuma kısmını yeniden düzenleyip veriyorum. Bu verdiğimi programına yerleştir ve yeniden dene. Olumsuzluk devam ediyor ise;
TAMRUT , TAMISI ve CONTROL değerlerini bana bildir.
Ancak programın tamamınıda görsek iyi olacak sanırım. Sensör okumadan RETURN ile dönülüyor ama direk oraya giriş var gibi gözüküyor. Bu şekilde stack hatası oluşur. O nedenle tamamını görelim kodun.

Ete

DHT22OKU: 
          output DHT22
          DHT22=1:PAUSEUS 1
          DHT22=0:PAUSE 18
          DHT22=1:PAUSEUS 40
          INPUT DHT22
          PAUSEUS 5
          WHILE DHT22=0:WEND
          PAUSEUS 80
          IF DHT22=1 then GOTO DHT22_HATA
            
          
          TAMRUT=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
            WHILE DHT22=0:WEND  
            PAUSEUS 30
            IF DHT22=1 THEN TAMRUT.0[I]=1
            WHILE DHT22=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 DHT22=0:WEND
            PAUSEUS 30
            IF DHT22=1 THEN TAMISI.0[I]=1
            WHILE DHT22=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 DHT22=0:WEND 
            PAUSEUS 30
            IF DHT22=1 THEN CONTROL.0[I]=1
            WHILE DHT22=1:WEND
          NEXT

          OUTPUT DHT22
          DHT22=0

          ISARET="+"
          IF TAMISI.BIT15=1 THEN ISARET="-"
          ONDARUT=TAMRUT//10:TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10:TAMISI=TAMISI/10      
        
          RETURN

ısın_34

merhaba
konuya bayadan beri yorum yazılmamış ama yinede yazacağım bence yeni konu açılmamalı neyse

dht22 kullanmaya çalışıyorum
konuyu anladım ( genel hatları ile )
program blogunu inceledim.
proton basic kullanıyorum . ( kodu düzenleyeceğim ama burayı anlamadım dolayısı ile düzenleyemedim rica etsem açıklayabilirmisiniz.

 TAMISI=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
            WHILE DHT22=0:WEND
            PAUSEUS 30
            IF DHT22=1 THEN TAMISI.0[I]=1 '*********** buradaki süslü parantezin olduğu satır tam olarak ne iş yapıyor.
            WHILE DHT22=1:WEND
          NEXT

ete hocam tek tek anlatmışsın ama zaman problemi yüzünden anlayamadım yada sintax anlamsız gibi geldi.
I değişkenini 15 ten 1 er 1 er eksiltiyorsunuz geri doğru okuyorsunuz tamam
diyor ki : eğer dht22 =1 se tamısının sıfırıncı biti hah işte burdan sonrası ne demek anlayamadım. açıklama yapmanızı rica ederim

ete

Kode verirken code tag yada code butonunu kullanman gerekiyor. Aksi halde senin mesajında olduğu gibi bazı yerler net olarak ortaya çıkamıyor maalesef. Parantez falan gözükmüyor. Her neyse konuyu bildiğim için cevaplayayım.
TAMISI=0
          FOR I=15 TO 0 STEP-1  
sensörden okunan bilgi MSBfirst yani en yüksek değerlikli bit den başlayarak okunuyor. Daha kısa anlatırsak Sıcaklık değeri bit bit okunuyor ve okuma 15.ci bitden başlıyor. Bu nedenle döngmüzü 15 den sıfıra doğru kuruyoruz.


            WHILE DHT22=0:WEND
            PAUSEUS 30
okuma pini değeri lojik sıfır iken bekliyoruz. Pin HIGH oluyor ve ardından 30us lik bir gecikme koyuyoruz.

            IF DHT22=1 THEN TAMISI.0[I]=1 '*********** buradaki süslü parantezin olduğu satır tam olarak ne iş yapıyor.
Okuma pini şayet HIGH ise okunan sıcaklık biti "1" demektir. O halde 15.ci biti 1 yapıyoruz.
Pic basic de index değişkeni kullanılarak bir değişkenin bitlerine döngü içerinde ulaşılabiliyor. Burada yer alan ifade TAMISI.0[I]=1 I (ki burada index değişkeni oluyor) nın değerine bağlı olarak ilgili bite değer veriliyor. İlk olarak döngü başında I=15 olduğunda o ifadenin açık şekli şöyle oluyor TAMISI.0[15]=1 Burada 0[ ifadesi komutun formatından geliyor. Gönül isterdiki komut şöyle olsun TAMISI.[I]=1 ama ne yazıkki bazı sebeplerden dolayı bunu TAMISI.0[I] şeklinde uyguluyor Pic Basic derleyicisi. Kısaca bu komut I index değişkenine bağlı olarak TAMISI değişkeninin index'e bağlı olan bitine değer veriyor.

            WHILE DHT22=1:WEND

          NEXT
Umarım anlaşılmıştır.
Ete

Powered by EzPortal