21 Ağustos 2018, 05:52:31

Haberler:

Picproje Facebook Sayfası:  https://bit.ly/2pUitll


dht22 okuma sorunu

Başlatan POWER, 07 Mayıs 2018, 03: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. 
Kod Seç
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

Mehmet Salim GÜLLÜCE

Alıntı yapılan: POWER - 07 Mayıs 2018, 03: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. 
Kod Seç

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


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

F.T

07 Mayıs 2018, 13:31:51 #2 Son düzenlenme: 07 Mayıs 2018, 13:36:01 F.T
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

Mehmet Salim GÜLLÜCE

Alıntı yapılan: POWER - 07 Mayıs 2018, 14: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)

Kod Seç
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

08 Mayıs 2018, 15:53:48 #6 Son düzenlenme: 08 Mayıs 2018, 15:55:01 POWER
Kod Seç
[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

Kod Seç
: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

Kod Seç
@CONFIG_REQ
@__CONFIG _CONFIG1INTRC_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.
Kod Seç
Device 16F88
@CONFIG_REQ
@__CONFIG _CONFIG1INTRC_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 
=
    DelayUS 5
    dTa 
=
    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