dht22 okuma sorunu

Başlatan POWER, 07 Mayıs 2018, 00:41:28

POWER

Herkeze iyi geceler,
dht22 ısı-nem sensörü için kod mevcut.sensörün okunmasında problem yok.fakat kesme ile beraber çalıştıdığım zaman bir yerlerde takılıyor.tek başına sensör okuma kısmını gerçek devresinde uzun süre denedim problem yok.sensör kısmını iptal edip kesme bölümünü uzun süre denedim yine problem olmadı.fakat kesme ve sensör okuma kısmı beraber çalıştığı zaman bir iki dakika sonra kilitleniyor.stack sorunu yok.Protonu yeni kullamaya başladım kesmedemi bir problem var anlayamadım. 
Device 16F628A
Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_off,MCLRE_OFF ,BODEN_OFF  
Xtal 4

TRISA =0
TRISB =0
PORTA =0
PORTB =0

INTCON=%10100000        
TMR0=0
OPTION_REG=%10000101
On_Hardware_Interrupt GoTo KESME
CMCON =7

Declare All_Digital TRUE
Declare LCD_DTPin PORTB.0  ' LCD Data Pin  
Declare LCD_RSPin PORTB.4  ' LCD RS Pin
Declare LCD_ENPin PORTA.4  ' LCD EN Pin
Declare LCD_Lines 2        ' LCD Satır
Declare LCD_Interface 4    ' LCD Data Pin Sayısı 4

Dim I As Byte
Dim TaMrUt As Word
Dim OnDaRuT As Byte
Dim tAmIsI As Word
Dim OnDaIsI As Byte
Dim cOnTroL As Byte
Dim DAKIKA As Word
Dim SANIYE As Byte
Dim SAY As Byte

Symbol dTa  =PORTA.3
Cls 
DAKIKA=0
SANIYE=0
SAY=0
DelayMS 200

BASLA:
      GoSub EKRAN
      PAUSE 100
      OnDaRuT=TaMrUt
      GoSub SeNsOROkU
      OnDaRuT=TaMrUt
GoTo BASLA

SeNsOROkU:      
    Output dTa
    dTa =1
    DelayUS 5
    dTa =0 
    DelayMS 5      '1-10 ms bekle
    dTa =1        'Data pinini High yap
    DelayUS 40    '40 us bekle
    Input dTa
    DelayUS 5
    While dTa =0
    Wend
    DelayUS 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.
    While dTa =0
    Wend  
    DelayUS 30
    If dTa=1 Then 
    SetBit TaMrUt,I
    EndIf
    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
    DelayUS 30
    If dTa=1 Then 
    SetBit tAmIsI,I
    EndIf
    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 30
    If dTa=1 Then 
    SetBit cOnTroL,I
    EndIf
    While dTa =1
    Wend  
    Next
    Output dTa
    dTa=0
    OnDaRuT=TaMrUt//10 :TaMrUt =TaMrUt /10
    OnDaIsI=tAmIsI//10 :tAmIsI =tAmIsI /10
    Return

EKRAN:
    Print At 1,1,Dec2 TaMrUt ,".",Dec1 OnDaRuT," RH  ",Dec2 tAmIsI,".",Dec1 OnDaIsI," C"
    Print At 2,6,"        "
    Print At 2,1,Dec2 DAKIKA,":",Dec2 SANIYE
    Print At 2,15,Dec2 SAY  
    DelayMS 400
    Return

HaTa:
    Print At 1,12,"    "
    Print At 1,1,"S E N S O R"
    Print At 2,1,"    "
    Print At 2,6,"H A T A S I"
    DelayMS 1000 
GoTo SeNsOROkU

KESME:
Context  Save
SAY=SAY+1
    If SAY<61 Then GoTo CIK
      SAY=0        
      SANIYE=SANIYE+1
    If SANIYE >= 60 Then
      SANIYE=0
      DAKIKA=DAKIKA+1
    If DAKIKA >= 60 Then
      DAKIKA=0
    EndIf
    EndIf
CIK:
INTCON.2=0
Context Restore
End
İsi ve Proton dosyaları.
http://s7.dosya.tc/server5/ga4txx/DHT22.rar.html
TB6BKG

M.Salim GÜLLÜCE

Alıntı yapılan: POWER - 07 Mayıs 2018, 00:41:28Herkeze iyi geceler,
dht22 ısı-nem sensörü için kod mevcut.sensörün okunmasında problem yok.fakat kesme ile beraber çalıştıdığım zaman bir yerlerde takılıyor.tek başına sensör okuma kısmını gerçek devresinde uzun süre denedim problem yok.sensör kısmını iptal edip kesme bölümünü uzun süre denedim yine problem olmadı.fakat kesme ve sensör okuma kısmı beraber çalıştığı zaman bir iki dakika sonra kilitleniyor.stack sorunu yok.Protonu yeni kullamaya başladım kesmedemi bir problem var anlayamadım. 

Herkez kelimesini görürlerse hiç şansın yok.
Onu diyim sana :)


Dahi anlamındaki de ayrı yazılır.

F.T

#2
Power Hocam simülasyondamı oluyor bu sorun yoksa gerçek devredimi?
Sorunun  while wend kullanımı ile alakalı olduğunu düşünüyorum.
Ayrıca kesme içinde tmr ön yüklemesi olması gerekiyor.
 PAUSE 100 yeine delayms 100 kullanmalısınız.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

POWER

sağol, mehmet salim hocam çözüm dışındaki cevabınızdan dolayı
FT hocam,sorun gerçek devredede simülasyondada oluyor.söylediklerinizi deneyeceğim.
TB6BKG

M.Salim GÜLLÜCE

Alıntı yapılan: POWER - 07 Mayıs 2018, 11:27:18sağol, mehmet salim hocam çözüm dışındaki cevabınızdan dolayı
FT hocam,sorun gerçek devredede simülasyondada oluyor.söylediklerinizi deneyeceğim.
Eywallah.
Biraz nükte katayım istedim :)

Maxim

@POWER
evet, senin hex dosyası kitleniyor simulasyonda 30sn 40sn sonra.

ben kodu tekrar derledim, 2 düzeltme yaptım pause ve declare
15dk çalıştırdım bir sorun yok. (versiyon 3.6.0.7)
*Bu arada proteusta bas kodunu gösterip, satır satır komutu çalıştırabiliyoruz.
(proton için geçerlidir)

Device 16F628A
Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_off,MCLRE_OFF ,BODEN_OFF  
Declare Xtal=4

TRISA =0
TRISB =0
PORTA =0
PORTB =0

INTCON=%10100000        
TMR0=0
OPTION_REG=%10000101
On_Hardware_Interrupt GoTo KESME
CMCON =7

Declare All_Digital TRUE
Declare LCD_DTPin PORTB.0  ' LCD Data Pin  
Declare LCD_RSPin PORTB.4  ' LCD RS Pin
Declare LCD_ENPin PORTA.4  ' LCD EN Pin
Declare LCD_Lines 2        ' LCD Satır
Declare LCD_Interface 4    ' LCD Data Pin Sayısı 4

Dim I As Byte
Dim TaMrUt As Word
Dim OnDaRuT As Byte
Dim tAmIsI As Word
Dim OnDaIsI As Byte
Dim cOnTroL As Byte
Dim DAKIKA As Word
Dim SANIYE As Byte
Dim SAY As Byte

Symbol dTa  =PORTA.3
Cls 
DAKIKA=0
SANIYE=0
SAY=0
DelayMS 200

BASLA:
      GoSub EKRAN
      DelayMS 100
      OnDaRuT=TaMrUt
      GoSub SeNsOROkU
      OnDaRuT=TaMrUt
GoTo BASLA

SeNsOROkU:      
    Output dTa
    dTa =1
    DelayUS 5
    dTa =0 
    DelayMS 5      '1-10 ms bekle
    dTa =1        'Data pinini High yap
    DelayUS 40    '40 us bekle
    Input dTa
    DelayUS 5
    While dTa =0
    Wend
    DelayUS 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.
    While dTa =0
    Wend  
    DelayUS 30
    If dTa=1 Then 
    SetBit TaMrUt,I
    EndIf
    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
    DelayUS 30
    If dTa=1 Then 
    SetBit tAmIsI,I
    EndIf
    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 30
    If dTa=1 Then 
    SetBit cOnTroL,I
    EndIf
    While dTa =1
    Wend  
    Next
    Output dTa
    dTa=0
    OnDaRuT=TaMrUt//10 :TaMrUt =TaMrUt /10
    OnDaIsI=tAmIsI//10 :tAmIsI =tAmIsI /10
    Return

EKRAN:
    Print At 1,1,Dec2 TaMrUt ,".",Dec1 OnDaRuT," RH  ",Dec2 tAmIsI,".",Dec1 OnDaIsI," C"
    Print At 2,6,"        "
    Print At 2,1,Dec2 DAKIKA,":",Dec2 SANIYE
    Print At 2,15,Dec2 SAY  
    DelayMS 400
    Return

HaTa:
    Print At 1,12,"    "
    Print At 1,1,"S E N S O R"
    Print At 2,1,"    "
    Print At 2,6,"H A T A S I"
    DelayMS 1000 
GoTo SeNsOROkU

KESME:
Context  Save
SAY=SAY+1
    If SAY<61 Then GoTo CIK
      SAY=0        
      SANIYE=SANIYE+1
    If SANIYE >= 60 Then
      SANIYE=0
      DAKIKA=DAKIKA+1
    If DAKIKA >= 60 Then
      DAKIKA=0
    EndIf
    EndIf
CIK:
INTCON.2=0
Context Restore
End

POWER

#6
[quote author=POWER link=msg=558371 date=1525642888]
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 30
    If dTa=1 Then 
    SetBit cOnTroL,I
    EndIf
    While dTa =1
    Wend  
    Next
dün akşam proğramı satır satır çalıştırdım.
yukarıdaki
While dTa =1
wend
döngüsünde takılıp kaldığı gördüm.bu döngüyü iptal edip çalıştırdım proğramı(simülasyon ver gerçek devresinde)bir sıkıntı olmadı.fakat iptal ettiğim bölümün sensörün sağlıklı çalışmasına etkisi nedir bilmiyorum.şimdi işte olduğum için imkanım yok sizin derlemenizide deneyeceğim maxim hocam.
TB6BKG

Maxim

:10000000000000000000DF28FF0003088301FE005D
:10001000492A8030A100FE309A2001309A207530A4
:10002000A6003030AB28A101A117AE00FE309A2007
:100030002E089A28A401A900AA01A01124080319D6
:10004000A0150530A3002730A8001030332003305E
:10005000A800E8303320A80164303320A8010A301A
:10006000332029083A28A7002A08A6002908A50055
:10007000BF202508A500A3030319A0112408031914
:100080004428230203184B282508031DA011A0199A
:100090004B28303E9A280800AC0005120612831641
:1000A00005120612F030860583122C08A018762857
:1000B0003E30A6008030AB203330AB008B201330B5
:1000C000A6008830AB208B206430AA208B206430BF
:1000D000AA202230AB008B20283075200C307520F0
:1000E00006307520A0142C0876282014AB00201CA4
:1000F00084280612033C031C892889200730A600A7
:10010000D030AB20031408002014FE3C03199828BB
:100110000616AB0E201C20100516F03086052B08A5
:100120000F3986040512AB0E20188B283230AA2016
:100130002C08DB28A11B4C280800A801A700FF30D1
:10014000A707031CA807031CDB280330A600DF3029
:10015000AB209F28A601E83EA500A609FC30031CA1
:10016000B428A5070318B128A5070000A60FB128D9
:100170002518BA28A51CBE280000BE280800AA0120
:10018000A9011030AB00260DA90DAA0D2708A90260
:100190002808031C280FAA020318D5282708A90736
:1001A00028080318280FAA070310A50DA60DAB0BEE
:1001B000C328250808008313831203130800830152
:1001C000A00107309F0083168501860183128501F7
:1001D0008601A0308B0081018530831681000730B5
:1001E00083129F000920B801B701B901BA01C830D4
:1001F0009D20A62164309D203008B20002213008E5
:10020000B200F9288316851183128515072908295C
:100210000000851105309D2085152830AA20831601
:10022000851512291329000083128519182914290C
:100230005030AA208519FD29B101B0010F30AF005F
:100240008519232920291E30AA20851D35292F082C
:10025000A200A501A601A20A0314A50DA60DA20BDA
:100260002D292608B1042508B004851D3829352913
:100270000130AF0203182029B401B3010F30AF00E1
:100280008519432940291E30AA20851D55292F088C
:10029000A200A501A601A20A0314A50DA60DA20B9A
:1002A0004D292608B4042508B304851D582955296D
:1002B0000130AF0203184029B6010730AF0085199D
:1002C00062295F291E30AA20851D70292F08A200EF
:1002D000A501A20A0314A50DA20B6B292508B604DB
:1002E000851D732970290130AF0203185F29831619
:1002F0008511831285113108A6003008A500A801D8
:100300000A30A700BF202908B2003108A600300833
:10031000A500A8010A30A700BF20B0002608B10040
:100320003408A6003308A500A8010A30A700BF20A2
:100330002908B5003408A6003308A500A8010A3032
:10034000A700BF20B3002608B40008008030A10039
:1003500013200230A4003008A9003108AA001D2093
:100360002E304C200130A40032081B2020304C20BD
:1003700052304C2048304C2020304C204C204C2017
:100380000230A4003308A9003408AA001D202E3032
:100390004C200130A40035081B2020304C20433075
:1003A0004C208030A100C530132020304C204C2040
:1003B0004C204C204C204C204C204C204C20803099
:1003C000A100C03013200230A4003708A90038086B
:1003D000AA001D203A304C200230A40039081B200E
:1003E0008030A100CE3013200230A4003A081B2038
:1003F0000130A80090309E2008008030A1008B3092
:10040000132020304C204C204C204C204C2080309D
:10041000A100132053304C2020304C2045304C207C
:1004200020304C204E304C2020304C2053304C207B
:1004300020304C204F304C2020304C2052304C206B
:100440008030A100C030132020304C204C204C20A4
:100450004C204C208030A100C530132048304C2067
:1004600020304C2041304C2020304C2054304C2047
:1004700020304C2041304C2020304C2053304C2038
:1004800020304C2049304C200330A800E8309E201A
:100490000229BA0A3D303A02031C632ABA01B90A9A
:1004A0003C303902031C632AB901B70A0319B80AA0
:1004B000B808031D5F2A3C303702031C632A8312ED
:1004C0000313B801B7010B117E088300FF0E7F0EE6
:0604D0000900692A6A2AF6
:02400E00103F61
:00000001FF

POWER

maxim hocam derlemeden sonra sigorta ayarları ile ilgili tek satırlık mesaj veriyor onun anlamı nedir?
TB6BKG

Maxim


POWER


Hocam kusura bakmayın yoğunluktan dolayı geciktim.Sizin düzeltme yaptığınız proğramda,hazır verdiğiniz hex dosyasınıda denedim malesef donma yapıyor.Bu aralar biraz yoğunum üzerinde fazla çalışamıyorum.hata/uyarı mesajınında resmini verdim çok önemli değil anladığım kadarıyla.
TB6BKG

Maxim

oradaki mesaj uyarı (hint) bende çıkmıyor bu arada

POWER

birinci mesajda verdiğim proğramdaki sigorta ayarlarını 16f88 için kullanamıyorum hata veriyor

TB6BKG

Maxim

olmaz tabi o ayar 16F628A için

@CONFIG_REQ
@__CONFIG _CONFIG1, INTRC_IO & WDT_OFF & PWRTE_ON & MCLR_OFF & BODEN_ON & LVP_OFF & WRT_PROTECT_OFF & CP_OFF & CPD_OFF & DEBUG_OFF

POWER

iyi geceler,
dht22 nin okunması ile ilgili proğram.
Device = 16F88
@CONFIG_REQ
@__CONFIG _CONFIG1, INTRC_IO & WDT_OFF & PWRTE_ON & MCLR_OFF & BODEN_OFF & LVP_OFF & WRT_PROTECT_OFF & CP_OFF & CPD_OFF & DEBUG_OFF
Xtal 4

'Device = 16F628A
'Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_off,MCLRE_OFF ,BODEN_OFF
'Xtal 4
 
TRISA=%00000000
TRISB=%11100000
PORTA=0
PORTB=0
OPTION_REG.7=0
CMCON =7
ANSEL=0 

Declare All_Digital TRUE
Declare LCD_DTPin PORTB.0  ' LCD Data Pin  
Declare LCD_RSPin PORTB.4  ' LCD RS Pin
Declare LCD_ENPin PORTA.4  ' LCD EN Pin
Declare LCD_Lines 2        ' LCD Satır
Declare LCD_Interface 4    ' LCD Data Pin Sayısı 4

Symbol dTa =PORTA.3

Dim Y As Byte
Dim I As Byte
Dim TaMrUt As Word
Dim OnDaRuT As Byte
Dim tAmIsI As Word
Dim OnDaIsI As Byte
Dim cOnTroL As Byte
Dim saat As Byte
Dim dakika As Byte
Dim saniye As Byte

DelayMS 400
BASLA:
      GoSub SeNsOROkU
      GoSub EKRAN
      DelayMS 100
GoTo BASLA
    
EKRAN:
    Print At 1,1,"ISI= ",Dec2 tAmIsI,".",Dec1 OnDaIsI ,"  C  "
    Print At 2,1,"NEM= ",Dec2 TaMrUt ,".",Dec1 OnDaRuT," RH  "
Return
                              
SeNsOROkU:      
    Output dTa
    dTa =1 
    DelayUS 5
    dTa =0 
    DelayMS 5      '1-10 ms bekle
    dTa =1        'Data pinini High yap
    DelayUS 40    '40 us bekle
    Input dTa
    DelayUS 5
    While dTa =0
    Wend
    DelayUS 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.
    While dTa =0
    Wend  
    DelayUS 30
    If dTa =1 Then LoadBit TaMrUt,I,1
    If dTa=1 Then 
    SetBit TaMrUt,I
    EndIf
    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
    DelayUS 30
    If dTa=1 Then LoadBit tAmIsI,I,1
    If dTa=1 Then 
    SetBit tAmIsI,I
    EndIf
    While dTa =1
    Wend 
    Next          
cOnTroL=0
    For I=7 To 0 STEP-1  '7 de hata veriyo.MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
    While dTa =0
    Wend 
    DelayUS 30
    If dTa=1 Then LoadBit cOnTroL,I,1
    If dTa=1 Then 
    SetBit cOnTroL,I
    EndIf
''-------------------------------BURASI SORUNLU-------------------------------------------
    While dTa =1
    Wend  
''''---------------------------------------------------------------------------------------
    Next
    Output dTa
    dTa=0

    OnDaRuT=TaMrUt//10
    TaMrUt =TaMrUt /10
    OnDaIsI=tAmIsI//10 
    tAmIsI =tAmIsI /10
Return

HaTa:
    Print At 1,12,"    "
    Print At 1,1,"S E N S O R" 
    Print At 2,1,"    "
    Print At 2,6,"H A T A S I"
    DelayMS 1000 
Return 

End
16f628 ile simülasyonda ve gerçek devresinde de sorunsuz çalışıyor.16f88 için sigorta ayarlarını ve ansel=0 ekleyip derleme yapıyorum sorunsuz derliyor.fakat simülasyondada gerçek devresindede sensor hatası veriyor.aynı sensoru kullanıyorum.atladım nokta nerde bilemedim.
tüm dosyaları yüklüyorum.
http://s7.dosya.tc/server6/hmvtwv/ISI-NEM.rar.html
TB6BKG