dht22 (AM2302) sensör okuma.

Başlatan sinasos, 13 Nisan 2018, 21:41:01

sinasos

Sayın FT reset sayısı için söylediğiniz artırımı yaptım. Henüz sıfırda sabaha kadar bakalım değişecekmi ? Allah sizden razı olsun. Çok teşekkür ederim yardımlarınız için.... İnşAllah bu şekilde çözebilirsek sizi tekrar rahatsız etmem.

sinasos

hocam maalesef yine olmadı ! wdt çalışmadı, kilitlenmiş kaldı aynı şekilde. ETE hocam wdt konusunda el atarmısın rica etsem !

ete

#32
WDT bir reset unsuru olarak kullanacak iseniz yapılacak işler aşağıdaki şekildedir.
1. Sigorta ayarlarından WDT_ON yapılmalıdır.
2. Programa başına DEFINE NO_CLRWDT 1  komutunu ilave etmek gerekiyor. Böylece derleyici programa WDT resetleyecek CLRWDT komutlarını eklemez.
Bu iunsur yerine getirildikten sonra WDT sayacı Option Registerinden ayarlandığı şekilde aktif olur ve programa fazla bekleme yapılan yerde reset attırır.
Bu işlemleri yaptıktan sonra programı çalıştırıp bakman gerekiyor. Her şeyden önce bence mümkün olan en uzun süreye ayarla WDT'ı.
Daha sonra çalıştır programı. İstenmeyen bir yerde sürekli reset atıyor ise oraya bir CLRWDT komutu koyarsın orada reset atmaz.
Sonuçta normal çalışma modunda WDT reset atmamalı ancak kilitlendiği zaman reset atacak şekilde uzun bir süreye ayarlı olmalı. Buna rağmen atıypr ise oralara CLRWDT komutu eklenerek o kısımlar kurtarılmalıdır.
Pek kullanmadığım bir yöntem bu nedenle fazlaca tecrübem yok ama mantıken böyle kullanımalı diyorum.

Ete

fatih88

Arkadaşlar yazılımda şüphe yoksa eğer sensörde sorun yaratıyor olabilir arkadaş 20 tane sensörde denedim demişti ama muhtemel sensör çok yogunlaşmadan dolayı hataya geçiyor bu sensörlerin arkasında bir işlemci var işlemcinin bacaklarıda su oluyorsa problem ondan olabilir neticede saf su koymuyoruz oluşan sıvı işlemcisine sorun yarat bilir silikonlasak kapak kapanmaya bilir aklıma top sprey geldi bunu sensör cipine sıkıp denemeniz mümkünmü
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

Bu sorun mutlaka buhar yoğunlaşmasından dolayı meydana geliyor ve sensörü kilitliyor ona bağlı olarak işlemcide kilitleniyor.
Bir kaç mesaj öncesinde verdiğim sayaç içeren While - wend döngüsü bu işi çözebilirdi.

Yada bu işde kesinlikle SHT serisi sensör kullanılmalıdır. Prensip aynı ama SHT lerde ısıtıcı bulunuyor. Gerektiğinde ısıtıcıyı arada bir çalıştırıp yoğunlaşmış buhara etkisinden kurtarmak gerekir.

Ete

sinasos

SHT sensör siparişi verdim. onunla bu işi deneyeceğim ve sonucunu size bildireceğim. Başta ETE hocam olmak üzere hepinize ilginiz ve bilginizden dolayı ayrı ayrı teşekkür ederim.
Saygılarımla.

fatih88

Hocam sht11 de sıkıntı yaratıyor geçmiş yorumlarda video attım onu sht11 ile yapmıştım şimdi fiyatından dolayı yapmam ben sorunu hem wdt koyarak hemde sht11 silikonlayarak çözmüştüm sadece nem deliği açık kalmıştı ama kesinlikle bir yerleri atlıyoruz  microchip firması bu bu tür sorunlar için önlem almıştır ama sorunu çözemeyince sebep mcu oluyor
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

sinasos

birşey aklım takıldı. Sensör su almış olsa resetleyince tekrar çalışabilirmi sizce ?

fatih88

Çalışmaması gerek ama başka ne diyebilirizki
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

ete

Geçmişte SHT ile benzer denemeler yapmış idim. Tamamen su altında kalır ise sensör çalışamaz duruma geliyor.
Ama kuruyunca yeniden çalışıyor. Yeterki musluk suyu altında kalıp da kireç ile göznekleri tıkanmasın. Ama normal nem yoğuşması sorun çıkartmıyor idi.
SHT nin önemli avantajı ısıtıcısının olmasıdır. Bu ısıtıcı sayesinde sensör bünyesinde yoğuşma olmuyor. Isıtıcıyı belirli süre çalıştırıp nemi uzaklaştırmak ardından ısıtıcıyı kapatıp yeniden ölçüm yapmak gerekir.

DHT ile de denemeler yapmıştım aslında . Epeyce yoğun nem altında ölçümler aldım. Kilitlenme olmamış idi.
Kodun Sensörden bilgi alma ksımını aşağıdakikod ile değiştirip bakabilirsin. Bunun sorunsuz çalışması gerekir.
#CONFIG
  __config _BODEN_ON & _BOREN_ON & _CP_ON  & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
#ENDCONFIG

DEFINE OSC 4

TRISA=0  'A portu çıkış olarak ayarlandı.
TRISB=0  'B portu çıkış olarak ayarlandı.
PORTA=0
CMCON=7

DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 4 
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 3 
DEFINE LCD_RSREG PORTB   
DEFINE LCD_RSBIT 2 
DEFINE LCD_BITS 4 
DEFINE LCD_LINES 2 
DEFINE LCD_COMMANDUS 2000 
DEFINE LCD_DATAUS 50 


SURE    var byte
I       VAR BYTE
TAMRUT  VAR WORD
ONDARUT VAR BYTE
TAMISI  VAR WORD
ONDAISI VAR BYTE
X       VAR BYTE
control var byte
SAYAC   VAR BYTE

symbol DTA=PORTA.0 'sensor dATA PİNİ PORTA.0 A BAĞLI

LCDOUT $FE,1
PAUSE 300
GOSUB EKRAN


BASLA:       
      GOSUB SENSOROKU
      GOSUB EKRAN
'      pause 100
CONTROL=0:TAMRUT=0:TAMISI=0
      GOTO BASLA
     

SENSOROKU:     
            HIGH DTA:PAUSEus 5

           dta=0
           Pause 5      '1-10 ms bekle
           DTA=1         'Data pinini High yap
           Pauseus 40      '40 us bekle
           input DTA
           pauseus 5
           SAYAC=0
           WHILE DTA=0
             SAYAC=SAYAC+1
             PAUSEUS 5
             IF SAYAC=255 THEN CIK 'RETURN
           WEND
           
           PAUSEUS 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.
               SAYAC=0
               WHILE DTA=0
                 SAYAC=SAYAC+1
                 @ NOP
                 @ NOP
                 @ NOP
                 @ NOP
                 @ NOP
                 IF SAYAC=255 THEN CIK 'RETURN
               WEND
             
               Pauseus 30
              IF DTA=1 then TAMRUT.0[I]=1
                SAYAC=0           
                WHILE DTA=1
                  SAYAC=SAYAC+1
                  PAUSEUS 5
                  IF SAYAC=255 THEN CIK 'RETURN
                WEND
             Next

            TAMISI=0
            FOR I=15 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
               SAYAC=0
               WHILE DTA=0
                 @ NOP
                 @ NOP
                 @ NOP
                 @ NOP
                 @ NOP
                 IF SAYAC=255 THEN CIK 'RETURN
               WEND
               Pauseus 30
              IF DTA=1 then TAMISI.0[I]=1
                SAYAC=0
                WHILE DTA=1
                  SAYAC=SAYAC+1
                  PAUSEUS 5
                  IF SAYAC=255 THEN CIK 'RETURN
                WEND                           
            Next           

            control=0
            FOR I=7 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
              SAYAC=0
              WHILE DTA=0
                 @ NOP
                 @ NOP
                 @ NOP
                 @ NOP
                 @ NOP
                 IF SAYAC=255 THEN CIK 'RETURN
              WEND
             
              Pauseus 30
              IF DTA=1 then control.0[I]=1
                SAYAC=0
                WHILE DTA=1
                  SAYAC=SAYAC+1
                  PAUSEUS 5
                  IF SAYAC=255 THEN CIK 'RETURN
                WEND             
             
            Next
CIK:           
            output dta
            dta=1
            pauseus 50
            dta=0                         
            return


EKRAN:
      ONDARUT=TAMRUT//10:TAMRUT=TAMRUT/10
      ONDAISI=TAMISI//10:TAMISI=TAMISI/10
      LCDOUT $FE,$80,"NEM=",DEC TAMRUT,",",DEC ONDARUT
      LCDOUT $FE,$C0,"ISI=",dec TAMISI,",", DEC ONDAISI
      PAUSE 100
      RETURN

GOTO BASLA

hata:
LCDOUT $FE,1 
LCDOUT $FE,$80," SENSOR HATASI "
PAUSE 3000
LCDOUT $FE,1
RETURN

END

Ete

POWER

@sinasos
ete hocanın son verdiği kodları denedinizmi? sorun çözüldümü? sizin probleme benzeyen bir problem ilede ben uğraşıyorum o yüzden sordum.

sinasos

Alıntı yapılan: POWER - 07 Mayıs 2018, 20:44:00
@sinasos
ete hocanın son verdiği kodları denedinizmi? sorun çözüldümü? sizin probleme benzeyen bir problem ilede ben uğraşıyorum o yüzden sordum.
merhaba,
eskisi kadar olmasa bile ETE hocamın verdiği kod'da da zaman zaman kilitlenmeler oldu. ancak pic'in reset özelliği sayesinde şu an bir sıkıntı yaşamıyorum. Öncelikle ETE hocama sonra da forumdaki diğer tüm yardımsever arkadaşlara ayrı ayrı çok çok teşekkür ediyorum. Yazılımın peşini bırakmış değilim sebebini öğreninceye kadar üzerinde çalışmaya devam edeceğim.
Sonsuz sevgi ve saygılarımla.

İlyas KAYA

#42
Devre şeması ve pcb yi görebilir miyiz?
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

Power,
Sensör okumasına girdiğin zaman kesmeyi kapat okuma bitince yeniden aç sorunun düzelir. Sonuçta çok kısa bir okuma süresi bu dünya batmaz kesmeyi kapatıp açarsan.

Yada kesme süreni biraz artır ve programın kesmeden yeni çıkmamış ise okumaya gitme.
Orada ben geçmişte şöyle bir taktik uygulamış idim.
Kes=1
While kes=1:wend
GOSUB Sensor_Oku

KES değişkeni bit bazında tanımlanacak ve kesme içinde sıfırlanacak. Böylece program sensör okumaya gitmeden önce kesmeye girecek ve çıkışta hemen sensör okumaya gitmiş olacak. Kesme süren de sensörün komple okuma süresinden uzun olursa sorun olmadan bu işi halledersin.
Bunu neden yapıyoruz?, sensör okuması zaman bazında yapılan bir çalışma. Okuma esnasında kesme emri gelirse senin zaman hesabın altüst olur ve sensör okunamaz. Okunmayınca program ya kilitlenir çünki sensör tek pinden okunuyor. Dolayısıyla o pinin ne zaman giriş ne zaman çıkış olacağına program karar veriyor. Giriş yapılıp sensörden emir beklendiği anda sen kesmeye gidersen o emir gelmez ve sensörde zaten o kısmı atlamış olur ve ortaya anlamsız bir karışıklık çıkmış olur. Kilitlenmenin sebepleri bunlar. Çözüm iki tane;
- ya sensör okurken kesmeyi kapatacaksın
- yada yukarıda dediğim gibi kesme süren okuma süresinden uzun olacak ve kesmeden çıkar çıkmaz okumaya gidip ikinci kesme gelmeden okumayı bitireceksin.

Ete

Powered by EzPortal