avatar_fatih88

dht22 bilgi göndermeyi kesiyor!!!

Başlatan fatih88, 12 Mart 2019, 21:55:41

ete

#15
Senin sorununun stack taşması olması kuvvetle ihtimal.
DHT okumaya GOSUB ile gidiyorsun ama sensör okumasında bir senkron şaşması olur ise hata meydana gelecek ve oradaki;
"IF DHT22=1 then GOTO BASLA   ;DHT22_HATA"
komut satırı ile program GOSUB ile gittiği bir alt programdan GOTO ile geri dönecektir. Bu işlemi 5-6 defa daha yaparsa program stack taşmasından dolayı kilitlenip kalacaktır. Bence asıl sorunun bu.

Oradaki komut şöyle olmalı,
IF DHT22=1 then RETURN  ;DHT22_HATA

İllaki Bir zaman kontrolü işin içine katalım dersen yaptığım ölçüme göre bir okuma peryodu 8871 ms sürüyor. O halde timer-1' 10ms için kurarsak mesele hallolur. Şayet sensör takılıp da 10ms aşılır ise otomatikman yeniden sensör okumaya yönlendirilecektir program.

DHT22OKU etiketi altına
           TMR1L=$F7:TMR1H=$D8:PIR1.0=0:T1CON=1           '..........timer-1 10 ms için kurulmuş oldu
           WHILE PIR1.0=0                                      '10 ms aşılmadığı sürece bir while döngüsü kur"
komut satırlarını ekle. Ayrıca en altta
  IF TAMISI.BIT15=1 THEN komut satırından bir evvelki satıra;
          IF CONTROL>0 THEN EXIT                          'okuma başarılı ise while döngüsünden çık çıkış 8-9 ms içinde olacak         
          WEND
          IF PIR1.0=1 THEN DHT22OKU 'okuma işi şayet 10 ms yi aşmış ise yeniden sensör okumaya yönlendiriyoruz.
komut satırlarını ekle tamamdır.

Bu komutların sıhhatli çalışıp çalışmayacağından emin değilim. Sensör okuma işleminde sensörden yanıt beklendiği yerler var. Buralarda takılıyor olabilir program. Örneğin,
WHILE DHT22=0:WEND  komut satırında sensör data pinin LOW olması bekleniyor. Ya bu noktada o pin hiç LOW olmaz ise ne olacak program oradan ayrılamaz. Ama PIR1.0 aşılırsa ümidimiz

Ete

not: program kodlarını verirken kod tag kullanın. Ben düzeltiyorum bir dahaki sefere dikkat lütfen.

fatih88

ben kesme kullanmadım zeus48 ben C ile yazgıgımdan ve atmel programladığımdan burda ne desem boş genelde bu sitede ccs c konularında yardımcı olmaya calışıyorum ama bu formun en sevdiğim yanı ete hocamızın bilgi birikimi ve yaş itibariyle biçok sorunla karşılaşmış ve çözüme kavuşturmuş ete hocanın yön göstermesiyle sorunlarımı çözmeye çalışıyorum burdan hocama tekrar teşekkür ediyorum
işin aslı sensörün okuma süresi aşıldığında okumadan çıkıp tekrar okumaya yönlendirmek ben kütüphanemin içine bir sayaç koydum o sayaç dolunca okumadan çıkıyor ve sayacı sıfırlayıp tekrar okumaya geçiyor peki okuma kesilince diyer işlemleri yapabiliyormusun mcu kitlenmiyor demi bide ne kadar süre sonra okumayı kesiyor
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

zeus48

Ete hocam teşekkür ederim. Söylediklerinizin herikisinide uyguladım sorun ortadan kalktı. Sağol
Belki birçok kişiye komik gelebilir aşağıda sizin yazdığınız   not: program kodlarını verirken kod tag kullanın. Ben düzeltiyorum bir dahaki sefere dikkat lütfen.  Ben bunuda anlamadım nedir nasıl kullanılır. İyi çalışmalar

ete

Mesaj yazma ekranına girdiğin zaman üstte üzerinde diyez işareti olan bir buton var. Mause'u üzerine getirince hemen üzerinde Kod ekle yazısı çıkıyor. İşte kod tag butonu odur. Sen kodlarını direk yazdın ben ise düzeltme yaparak kod tag içine aldım aradaki fark bu. Senin yaptığın hem çok uzun yer kaplıyordu hemde garip garip işaretler hatta arada bazı similey ler çıkıyordu. Kod tag içine alınca hepsi kayboldu normal kod görünümüne geçmiş oldu. Aradaki farklar bunlar. Önce butona bas iki tane kod kutucuğu arasına kodunu yaz. Yada kodu yaz sonra bloklayıp kod butonuna bas aynı şeyi yapmış olursun.

Ete

Powered by EzPortal