dht22 (AM2302) sensör okuma.

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

sinasos

Alıntı yapılan: fatih88 - 19 Nisan 2018, 19:17:05
Wdt dakika bazında olmaz en yüksek değeri bildiğim kadarıyla 18ms olması lazim
detaylı kullanımı nasıl oluyor bilginiz varmı ? şu kilitlenme olayına son vermek istiyorum artık !

fatih88

Wdt  timer kurar gibi kuruyorsunuz basıcte nasıl bilmiyorum
Misal 18ms kurduk programımızda 18ms den büyük bi gecikmemiz olmamalı ve sistem döngülerinde sürekli wdt sıfırlanmalı çünkü wdt taşıp reset atmasın olaki fonksiyonumuzda problem çıktı ve wdt yi sıfırlayamadı bu durumda wdt 18ms üstüne çıktığı için mcu kendine reset atacak durum bu şekil ilerliyor yanlışım varsa arkadaşlar düzeltsin
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

sinasos

Öncelikle çok teşekkür ederim bilgi için;
DHT22 sensörü program okumasına bakarsak zaten 8 ms, 3 ms beklemeler var. eğer 18 ms ise bunu nasıl aşabiliriz ki ?
  
          output DTA
           DTA=1: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
           WHILE DTA=0:WEND
           PAUSEUS 80





           TAMRUT=0
            FOR I=15 to 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
              WHILE DTA=0:WEND 
               Pauseus 30
              IF DTA=1 then TAMRUT.0[I]=1
              while dta=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 DTA=0:WEND
               Pauseus 30
              IF DTA=1 then TAMISI.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
               Pauseus 30
              IF DTA=1 then control.0[I]=1
              while dta=1:wend 
            Next
            output dta
            dta=0
          IF TAMISI.BIT15=1 THEN
          TAMISI=TAMISI-48
          ISARET="-"
          ONDARUT=TAMRUT//10
          TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10
          TAMISI=TAMISI/10
           ELSE
           ISARET="+"
          ONDARUT=TAMRUT//10:TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10:TAMISI=TAMISI/10
          ENDIF
           

fatih88

Program genelinde 18ms aşamazsın
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

sinasos

#19
Alıntı yapılan: fatih88 - 19 Nisan 2018, 19:55:35
Program genelinde 18ms aşamazsın

bazı kaynaklarda 2.3 sn gibi süreler telafuz edilmiş. bunu nasıl gerçekleştirebiliriz ?

örneğin ;

@ device pic16F628A, INTRC_OSC_NOCLKOUT, wdt_on, pwrt_on, lvp_off, protect_on
OPTION_REG.3=1

şeklinde yazdığımızda wdt 2.3 sn olarak ayarlanmış oluyor mu ?

fatih88

Basıc sigorta ayarlarını bilmiyorum anca ete hocam diyebilir çok üzgünüm
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

F®T

#21
Sigorta ayarı ile sadece wdt açmış olursun.

pdf den OPTION REGISTER den wdt prescaler rate  ile bu max 18ms süreyi ayarlıcaksın.prescaler oranını ile 2.3 ms yeye kadar bu süre düşürülebilir.
Programdada belli noktalarda CLEARWDT komutu ile watchdog sıfırlanacak.sıfırlama yapmaz isen program watchdog tan sürekli reset atar.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

sinasos

wdt_on ve OPTION_REG.3=1
şeklinde doğru oluyormu ? tam olarak çözemediğim için bunu sizinle paylaşmak istedim.

F®T

#23
OPTION_REG.3=1 bu komut prescaler oranının wdt için ayarlanacağını belirtir.Sonrasındada OPTION_REG.0=X  OPTION_REG.1=X  OPTION_REG.2=X bu bitlerde wdt sürenizi ayarlamaya yarar.Pdf de tablodan bölme oranlarını göreceksiniz.Programdada ayarlayacağınız süreyi aşmadan CLEARWDT komutunu değişik noktalara koyacaksınız.Bu komut wdt süresi dolmadan program normal akışında CLEARWDT yaparak wdt yi sıfırlar.Farzedelimki program bir yerde kitlendi zaten ayarlamış olduğunuz süre dolacağı için wdt işlemciye reset atacaktır.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

sinasos

#24
wdt_on
OPTION_REG.3=1 'psa wdt aktif
OPTION_REG.2=1 'ps2
OPTION_REG.1=1 'ps1
OPTION_REG.0=1 'ps0 WDT 1/128 şeklinde datasheet de belirtmiş

sanırım bu şekilde olması gerekiyor sayın FT, sizce bir sıkıntı varmı ?
Bu kadar yardımcı oldunuz. Gerçekten çok çok çok teşekkür ederim.

Birde;
DEFINE NO_CLRWDT 1
DEFINE CLRWDT '1

ne anlama geldiğini biliyormusunuz ?

F®T

#25
prograamdada CLEARWDT komutunu ayarlamış olduğun prescaaler süresini aşacak noktalara serpiştireceksin.wdt süresi dolmadan CLEARWDT ile süre sıfırlanacak.
Şayet wdt süresi kilitlenmeden dolayı aşılırsa wdt reset atıp işlemciyi resetliyecek.

Programı proteuse ile çalıştırıp hata kısmında wdt reset atıyormu kontrol edersin.reset atıyorsa ya wdt süresini arttırıcan yada programın değişik noktalarına CLEARWDT komutunu koyup reseti önleyeceksin.
Programında eğer wdt süresinden büyük pause süresi kullandı isen wdt sürekli zaman aşımından dolayı reset atar.
Pause yerine örneğin;

zaman:
for a=0 to 100
pause 1
next
return

gibi zaman gecikmesi ile çalışırsan o sorunuda ortadan kaldırırsın.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

sinasos

Programın farklı yerlerine bahsettiğiniz "wdtclr " yerine "CLEARWDT" kullandım. "CLEARWDT" yazınca pbp de bold oluyor. bende bu şekilde doğrudur diye dokunmadım. Devre kurulu ve şu an karşımda çalışıyor. hiç resetlemedi. cihazın donmasını bekliyorum ki reset atacakmı diye ! :) ama namussuz hala donmadı. inşAllah bu şekilde sorun çözülmüş olur. Pauselerin hepsini kaldırmıştım sizin yazdığınız şekilde yapmıştım. Sizler sayesinde olacak inşAllah !

F®T

#27
 :)  ben yanlış yazmışım sonradan farkettim düzelttim.CLEARWDT

resetsayısı=resetsayısı+1

basla:


goto basla

Resetleme olursa program en baştan başlıyacak resetsayısı sürekli artacak lcd de bunu göster kartı tecrübeye al.wdt resetledimi kaç kere oldu görürsün.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

sinasos

önceki mesajda yazdığım örneği
(
DEFINE NO_CLRWDT 1
DEFINE CLRWDT '1
ne anlama geldiğini biliyormusunuz ?
)
http://www.picbasic.co.uk/forum/showthread.php?t=172
linkinde görmüştüm ama anlam veremedim. herhangi bir ayar yapmadan nasıl çalıştırmış vatandaş siz anlayabiliyormusunuz ?

F®T

DEFINE NO_CLRWDT 1 bu komut sanırım wdt nin otomatik olarak resetlememesi için resetlemeyi devre dışı bırakmak için bir komutmuş.Anladığım kadarı ile wdt_on yapılıp bu komut kullanılmaz ise program wdt yi otomatik resetliyor.Fakat bu komutu kullanırsan sen kendin sıfırlama yapmak zorundasın.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Powered by EzPortal