Y

DHT11 Sensörünü okuyamıyorum.

Başlatan yilber92, 12 Ocak 2013, 21:58:01

ete

O zaman devrende yada programında bir sorun vardır. İyice bak.

Ete

ezel24

Hocam çok güzel bi çalışma olmuş ellerinize sağlık fakat benim aklımda bir soru var şimdi benim bi projem var bu projenin pic yazılımı hazır ve sht11 kullanıyorum bu projemde sht nin nemi ve sıcaklığı ölçmek için hesap kitap yapıyor ISIHESAP: 
           If HAMISI<4000 then
              ISARETSHT=1 'sıcaklık eksi değerde demek
              ISI1=(4000-HAMISI)/100
              ISI2=((4000-HAMISI)//100)/10   
         goto ISISON
        endif
              ISI1=(HAMISI-4000)/100
              ISI2=((HAMISI-4000)//100)/10
ISISON:   
           
           ISI1=(HAMISI-4000)/100
           ISI2=((HAMISI-4000)//100)/10
RETURN       
'-------------------------RUTUBET HESAP ALT PROGRAMI----------------------------
RUTHESAP:
              'ISI=ISI1*10+ISI2
              p1=(26542-(54722**HAMISI+hamISI))**HAMISI-25     
              P2=655+(HAMISI*5)+(HAMISI**15917)        
              P3=(P2**(ISISHT*10+2480))-(P2**2730)+P1   
              U1=p3/10:U2=p3//10
           IF HAMISI>3710 THEN
              U1=0:U2=0
        ENDIF 
return

ORTISI:
ORTAISI=((ISI1*10+ISI2)+FLOAT)/20
CNY=((ISI1*10+ISI2)+FLOAT)/2
RETURN
gibi bu dht nin böyle bir yazılımı yokturmudur?

ete

Dht nin okuması zor hesabı kolay, sht nin okuması kolay hesabı zordur. Ali veliye benzemez. Sht de dht ye benzemiyor maalesef.
Sitede,  dht okuma örneği var.
Ete

ezel24

#63
Aynen Ete hocam fakat ben bu yazılımda neresi o hesaplamayı yapıyor tam olarak çözemedim

Include "modedefs.bas"         
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16f628A, BOD_OFF
@ DEVICE pic16f628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16f628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
'-------------------------- LCD Tanımlama --------------------
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
'DEFINE LCD_COMMANDUS 2000   ' Set command delay time in us
'DEFINE LCD_DATAUS 50        ' Set data delay time in us

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

SURE    var byte
I       VAR BYTE
TAMRUT  VAR BYTE
ONDARUT VAR BYTE
TAMISI  VAR BYTE
ONDAISI VAR BYTE
control var byte
DERECE  CON 223     ' ° işareti

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


BASLA:


output  dta
LOW     DTA
    Pause   18      '18 ms bekle
HIGH    DTA         'Data pinini High yap
    Pauseus 40      '40 us bekle
input   dta
WHILE   DTA=0:WEND
PAUSEUS 85

IF DTA=1 then HATA

TAMRUT=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 40
  IF DTA=1 then TAMRUT.0[I]=1
  while dta=1:wend
Next

ONDARUT=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 40
  IF DTA=1 then ONDARUT.0[I]=1
  while dta=1:wend
Next

TAMISI=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 40
  IF DTA=1 then TAMISI.0[I]=1
  while dta=1:wend 
Next

ONDAISI=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 40
  IF DTA=1 then ONDAISI.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 40
  IF DTA=1 then control.0[I]=1
  while dta=1:wend
 
Next
    LCDOUT  $FE,1
    LCDOUT  $FE,$80,"NEM=",DEC TAMRUT,"%"        ',DEC ONDARUT
    LCDOUT  $FE,$C0,"ISI=",dec TAMISI,derece,"C" ',DEC ONDAISI
    PAUSE   200

GOTO BASLA

hata:
    LCDOUT  $FE,1,"SENSOR HATASI"
    PAUSE   200
GOTO BASLA

END

ete

Bu sensör tam dijital. Sonucu direk veriyor. Register olarak okuyorsun bit, bit, sonra ekrana veriyorsun.
Nem tam sayı kısmını şu komut satırı okuyor , IF DTA=1 then TAMRUT.0[I]=1
Nem ondalık kısmını şu satır okuyor,  IF DTA=1 then ONDARUT.0[I]=1
Sıcaklıkla ilgili olanlarda benzer şekilde program içinde okunuyor. Onlarıda sen bul bakalım.
Hesap falan yok anlayacağın.

Ete


ezel24

#65
DEFINE OSC 4
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC

TRISA=%111111
TRISB=%00000001
TRISC=%01110000
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
ADCON1 = 7     
'---------------------------değişkenler-----------------------------------------
    A        VAR    BYTE
    D        VAR    BYTE
    E        var    byte
    SYC      VAR    BYTE
    AY       var    byte
    YIL      var    byte
    SN       VAR    BYTE
    DAK      VAR    BYTE
    SAAT     VAR    BYTE
    HAFTA    VAR    BYTE
    GUN      VAR    BYTE
    MEM      var    byte
    ONLAR    VAR    BYTE
    BIRLER   VAR    BYTE
    GN       VAR    BYTE
    ZAMAN    VAR    BYTE
    Y        VAR    BIT
    UPC      VAR    BIT
    AYR      VAR    BIT
    SAYI     VAR    BYTE
    SAYAC    VAR    BYTE
    AYAR     VAR    BYTE
    TERM     VAR    BYTE
    NEM      VAR    BYTE
    KONTROL  VAR    BYTE
    ORTAK    VAR    BYTE
    CNY      VAR    BYTE    
    ISI1     VAR    BYTE       
    ISI2     VAR    BYTE       
    U1       VAR    BYTE         
    U2       VAR    BYTE
    C0       VAR    BYTE
    Z        VAR    BYTE
    K        VAR    BYTE
    SAY      VAR    BYTE
    ZAM      VAR    BYTE
    DX       VAR    BYTE
    H0       VAR    HAMISI.BYTE0
    H1       VAR    HAMISI.BYTE1
    HAMISI VAR    WORD
    RAW      var    word
    ISISHT   VAR    WORD
    RUT      VAR    WORD
    P1       VAR    WORD
    P2       VAR    WORD
    P3       VAR    WORD             
    C        VAR    WORD
    B        VAR    WORD
    W        VAR    WORD
    ORTAISI  VAR    WORD
    FARK     VAR    WORD
    DUR      VAR    BYTE
    CLK     VAR     PORTA.5
    DTA     VAR     PORTA.3 
    ISARETSHT  VAR     BIT   'sensor değeri 0 ise artı, 1 ise eksi
    SIGN    VAR     BIT      'ısı isareti 0 ise artı 1 ise eksi
    HATA    var     BIT
    MENU    VAR     PORTA.0
    YUKARI  VAR     PORTA.1
    ASAGI   VAR     PORTA.2
   
        'ISI
Busy        VAR BIT         ' Busy Status-Bit
HAM         VAR WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD       
ISARET_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
EKSI_ISI   CON 1           ' Sıfır altında isaret biti=1  oluyor kontrol için
DERECE     CON 223         ' ° işareti
ISARET     VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR BYTE       ' Div32 bit hesap için geçici değişken
SYMBOL COMM_PIN=PORTB.1   ' One-wire Data-Pin "DQ" PortB.0 da

   
    symbol ROLE1=PORTC.0
    symbol ROLE2=PORTC.1
    symbol ROLE3=PORTC.2
    SYMBOL ROLE4=PORTC.3
    SYMBOL BUZER=PORTE.0
   
    RTC_RST     var PORTC.5
    RTC_CLK     var PORTC.6
    RTC_DTA     var PORTC.4
'-----------------------------B A Ş L A N G I Ç ------------------------------   
          LOW ROLE1
          LOW ROLE2
          LOW ROLE3
          LOW ROLE4
        PAUSE 20
    ' CLEAR: 'TRISA=%00111111:TRISB=0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
         PAUSE 500:ISARET=0
        LCDOUT $FE,$40,$6,$9,$9,$6,$0,$0,$0,$0        'derece işareti dataları   
        LCDOUT $FE,$48,$04,$0e,$0e,$0e,$1f,$04,$04,$0
        LCDOUT $FE,$50,10,0,17,17,17,17,14,0 'LCD 2. KARAKTER HAFIZASI Ü HARFİ
        LCDOUT $FE,$58,16,8,4,2,4,8,16,0     'LCD 3. KARAKTER HAFIZASI YON İŞARETİ   
GIRIS:
         LCDOUT $FE,$82, "OTOMATIK KULUCKA"           
         lcdout $FE,$C5,"MAKINESI"
         lcdout $FE,$95,"TASARIM ve YAZILIM"
         lcdout $FE,$D9,"FERHAT YOL"
         PAUSE 2000
         LCDOUT $FE,1
         
'-------------------------------------------------------------------------------
BASLANGIC:
SYC=0
AYAR=1
READ $07,GN:IF GN=255 THEN GN=1
READ $01,TERM:IF TERM=255 THEN TERM=0
READ $02,NEM:IF NEM=255 THEN NEM=0
READ $09,DUR:IF DUR=255 THEN DUR=0
READ $10,ZAM:IF ZAM=255 THEN ZAM=0
READ $11,A:IF A=255 THEN A=1
READ $06,UPC
READ $13,AYR
gosub ZAMAN_OKU
                   
BASLA: 
              KONTROL=%00000011:HAMISI=0   'SICAKLIK ÖLÇME
        GOSUB OLCUMAL
        Gosub ISIHESAP
              KONTROL=%00000101:HAMISI=0   'RUTUBET ÖLÇME
        GOSUB OLCUMAL
        GOSUB RUTHESAP:GOSUB SENSOROKU
        GOSUB ORTISI
        GOSUB ZAMAN_OKU
        GOSUB GUNEBAK
        GOSUB EKRAN1
        GOSUB ISIKONTROL
        GOSUB RUTKONTROL
        IF AYR=0 THEN
        GOSUB HAVAKONTROL
        ELSE
        LOW ROLE4
        ENDIF
        IF UPC=1 THEN
        GOSUB DONUSEBAK
        ENDIF
        IF MENU=1 THEN  GOTO AYAR_MENUSU

goto BASLA       
'---------------------------------------EKRANA YAZ -----------------------------
EKRAN1:
        lcdout $FE,$80,2,"=",DEC2 ISI1,",",DEC1 ISI2," A=",DEC2 ISI,",",DEC1 (FLOAT)," S=",DEC2 TERM,",",DEC1 A
        lcdout $FE,$C0,"ORTISI=",DEC2 ORTAISI,",",DEC1 CNY,0,"C NEM%",DEC2 U1
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN," ",DEC2 GN,".GUN"
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL
            IF SN=DUR THEN LOW ROLE3
        IF SAAT=0 AND DAK=0 AND SN=0 THEN
               GN=GN+1
            IF GN=31 THEN GN=1
            WRITE $07,GN
         ENDIF
        RETURN
'''''''''''''''''MOTOR ÇALIŞ '''''''''''''''''
DONUSEBAK:
'HER SAAT BAŞI ÇEVİR
                 IF ZAM=1 AND DAK=0 AND SN=0 THEN
                 HIGH ROLE3
                 ENDIF

        IF ZAM=2 THEN 'İKİ SAATTE BİR ÇEVİR
                 
             
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=2 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=4 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=6 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF                 

                 IF SAAT=8 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF

                 IF SAAT=10 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=12 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               

                 IF SAAT=14 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF           

                 IF SAAT=16 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF                 

                 IF SAAT=18 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF             

                 IF SAAT=20 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF

                 IF SAAT=22 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF
        ENDIF
       
        IF ZAM=3 THEN  '3 SAATTE BİR ÇEVİR
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=3 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=6 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=9 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF                 
                 
                 IF SAAT=12 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF
                   
                 IF SAAT=15 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=18 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=21 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF
        ENDIF
                           
        IF ZAM=4 THEN '4 SAATTE BİR ÇEVİR
                 IF SAAT=0 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=4 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIf                 
                 
                 IF SAAT=8 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF               
                 
                 IF SAAT=12 AND DAK=0 AND sn=0 THEN
                 HIGH ROLE3
                 ENDIF                 
                 
                 IF SAAT=16 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF
                 
                 IF SAAT=20 AND DAK=0 AND sn=0 THEN 
                 HIGH ROLE3
                 ENDIF           
        ENDIF
   
RETURN           

GUNEBAK:
SELECT CASE HAFTA
CASE 1
LCDOUT $FE,$E3,"PTESI"
CASE 2
LCDOUT $FE,$E3," SALI"
CASE 3
LCDOUT $FE,$E3," CARS"
CASE 4
LCDOUT $FE,$E3," PERS"
CASE 5
LCDOUT $FE,$E3," CUMA"
CASE 6
LCDOUT $FE,$E3,"CTESI"
CASE 7
LCDOUT $FE,$E3," PAZR"
END SELECT
RETURN
 
SENSOROKU:
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle    ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    ISARET  = "+"
    IF ISARET_BITI = EKSI_ISI THEN
       ISARET   = "-" 
       ham=~ham+2
    endif
    float = (HAM*10)/16        '
    ISI=FLOAT/10 
    RETURN 
'------------------------------- İŞLEM START -----------------------------------
T_START:
      OUTPUT DTA:OUTPUT CLK
        HIGH DTA
         LOW CLK
       PAUSE 1
        HIGH CLK
         LOW DTA
       PAUSE 1
         LOW CLK
       PAUSE 1
        HIGH CLK
       PAUSE 1
        HIGH DTA
         LOW CLK
RETURN
'-----------------------SENSORE KOMUT GÖNDER -----------------------------------
OLCUMAL:
           GOSUB T_Start
        SHIFTOUT DTA,CLK,1,[KONTROL]
           INPUT DTA
         PULSOUT CLK,10
                 HATA=0
             FOR W=0 to 65500
              IF DTA=0 then GIT
            NEXT W
                 HATA=1
GIT:         
              IF HATA=1 then
           endif
         SHIFTIN DTA,CLK,0,[H1]
          OUTPUT DTA
             LOW DTA
         PULSOUT CLK,10
           INPUT DTA
         SHIFTIN DTA,CLK,0,[H0]
         PULSOUT CLK,10
RETURN
'----------------------ISI HESAP ALT PROGRAMI-----------------------------------     
ISIHESAP: 
           If HAMISI<4000 then
              ISARETSHT=1 'sıcaklık eksi değerde demek
              ISI1=(4000-HAMISI)/100
              ISI2=((4000-HAMISI)//100)/10   
         goto ISISON
        endif
              ISI1=(HAMISI-4000)/100
              ISI2=((HAMISI-4000)//100)/10
ISISON:   
           
           ISI1=(HAMISI-4000)/100
           ISI2=((HAMISI-4000)//100)/10
RETURN       
'-------------------------RUTUBET HESAP ALT PROGRAMI----------------------------
RUTHESAP:
              'ISI=ISI1*10+ISI2
              p1=(26542-(54722**HAMISI+hamISI))**HAMISI-25     
              P2=655+(HAMISI*5)+(HAMISI**15917)      
              P3=(P2**(ISISHT*10+2480))-(P2**2730)+P1   
              U1=p3/10:U2=p3//10
           IF HAMISI>3710 THEN
              U1=0:U2=0
        ENDIF 
return

ORTISI:
ORTAISI=((ISI1*10+ISI2)+FLOAT)/20
CNY=((ISI1*10+ISI2)+FLOAT)/2
RETURN
'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:

         if TERM<ORTAISI-0 then   
          LOW Role1
        ENDIF
        if ORTAISI+0<TERM+0 then         
         HIGH ROLE1               
       Endif
      IF MENU=1 THEN  GOTO AYAR_MENUSU
RETURN
'----------------------------RUTKONTROL-----------------------------------------         
RUTKONTROL:
           if NEM<U1 then   
         HIGH Role2
         ELSE               
          LOW ROLE2
        ENDIF
        IF MENU=1 THEN  GOTO AYAR_MENUSU
RETURN

HAVAKONTROL:
FARK=ISI1-ISI
IF FARK.Bit15=1 then FARK=~FARK
IF FARK>1 then
   ROLE4=1
ELSE
   ROLE4=0
ENDIF
RETURN
BIP:
    HIGH buzer   
pause 50
     LOW buzer 
  RETURN
BIPBIP:
     HIGH buzer   
    PAUSE 50
      LOW buzer
    PAUSE 100
     HIGH BUZER
    PAUSE 50
      LOW BUZER
RETURN
'-------------------------------------------------------------------------------
AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=8 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=7
ENDIF
GOSUB DURUM
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,$c0,"  ISITICI AYARLARI  "
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO TERM_KONTROL
ENDIF
CASE 1
lcdout $fe,$c0,"    NEM AYALARI     "
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO NEM_KONTROL
ENDIF
CASE 2
lcdout $fe,$c0,"   CEViRiCi MOTOR   "
LCDOUT $FE,$94,"       AYARI       "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO MOT_AYAR
ENDIF
CASE 3
lcdout $fe,$c0,"   SAAT-TARiH-GUN   "
LCDOUT $FE,$94,"        AYARI       "   
IF MENU=1 then
GOSUB BIP
WHILE MENU=1:WEND
GOTO ZAMANAYARI
ENDIF
CASE 4
lcdout $fe,$C0,"   MANUEL OLARAK    "
lcdout $fe,$94,"   MOTORU CEVIRME   "
IF MENU=1 theN
GOSUB BIP
WHILE MENU=1:WEND
GOTO MANUEL
ENDIF
CASE 5
lcdout $fe,$c0,"     GUN AYARI      "
LCDOUT $FE,$94,"                    "     
IF MENU=1 then
GOSUB BIP
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
CASE 6
lcdout $fe,$c0,"SICAKLIK DENGELEYiCi"
LCDOUT $FE,$94,"     FAN AYARI      "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO FANKONTROL
ENDIF
CASE 7
lcdout $fe,$c0,"    MENUDEN CIKIS   "
LCDOUT $FE,$94,"                    "   
IF MENU=1 THEN AYARLANDI
END SELECT
RETURN

MANUEL:
GOSUB TEMIZLE
MANU:
lcdout $fe,$80,"MOTORU CALISTIRMAK "
LCDOUT $FE,$C0,"iCiN YUKLARIYA     "
LCDOUT $FE,$94,"BASINIZ...          "
       IF MENU=1 then
      GOTO AYAR_MENUSU 
       ENDIF         
       
        IF YUKARI=1 THEN
         lcdout $fe,$D4,"MOTOR CALISIYOR  "
        HIGH ROLE3
        ELSE
        lcdout $fe,$D4,"MOTOR KAPALI    "
        LOW ROLE3
        ENDIF
       
GOTO MANU

GUNAYARI:
       WHILE MENU=1:WEND
       GOSUB TEMIZLE
       READ $07,GN
GUNA:     
     LCDOUT $FE,$80,"GUNU AYARLA" 
     lcdout $FE,$C0,"GUN:",DEC2 GN
     IF MENU=1 THEN
      WRITE $07,GN:PAUSE 2
      GOTO AYAR_MENUSU
      ENDIF
     
        IF YUKARI=1 THEN
        GN=GN+1
        IF GN=31 THEN GN=1
        WHILE YUKARI=1:WEND
        ENDIF
       
        IF ASAGI=1 THEN
        GN=GN-1
        IF GN=0 THEN GN=30
        WHILE ASAGI=1:WEND
        ENDIF
             
     GOTO GUNA
     
FANKONTROL:
GOSUB TEMIZLE:
FANKONT:
       lcdout $fe,$80,"FAN DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"
       IF MENU=1 THEN
           WRITE $13,AYR:PAUSE 2
           GOTO AYAR_MENUSU
       ENDIF
           IF YUKARI=1 THEN AYR=1
           IF ASAGI=1 THEN AYR=0
           
           SELECT CASE AYR
           CASE 0
           LCDOUT $FE,$D4,3
           CASE 1
           LCDOUT $FE,$94,3
       END SELECT   
GOTO FANKONT
     
             
''''''''''''''''''''''''''''''''''''''''         
MOT_AYAR:
        WHILE MENU=1:WEND
        GOSUB TEMIZLE
        READ $06,UPC
MOTOR_AYAR:
       lcdout $fe,$80,"MOTOR DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"
           IF MENU=1 THEN
           WRITE $06,UPC:PAUSE 2
           GOTO M_ZAMANI
           ENDIF
           IF YUKARI=1 THEN UPC=1
           IF ASAGI=1 THEN UPC=0
           
           SELECT CASE UPC
           CASE 0
           LCDOUT $FE,$D4,3
           CASE 1
           LCDOUT $FE,$94,3
           END SELECT         
        GOTO MOTOR_AYAR         
M_CALISMA:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $09,DUR
MOTO_CALISMA:
           IF MENU=1 THEN
           WRITE $09,DUR:PAUSE 2
           GOTO AYAR_MENUSU 
           ENDIF
       lcdout $fe,$C0,"MOTOR CALISMA SURESi "
       lcdout $FE,$94,"SURE :",DEC2 DUR," SANIYE"
       
           IF YUKARI=1 THEN
           DUR=DUR+1
           WHILE YUKARI=1:WEND
           ENDIF   
           IF DUR=60 THEN DUR=0
           IF ASAGI=1 THEN
           DUR=DUR-1
           WHILE ASAGI=1:WEND
           ENDIF
           IF DUR=255 THEN DUR=59
         GOTO MOTO_CALISMA                         
M_ZAMANI:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $10,ZAM
MOTO_ZAMANI:
        IF ZAM=255 THEN ZAM=1
        IF YUKARI=1 THEN
        ZAM=ZAM+1
        WHILE YUKARI=1:WEND
        ENDIF
        IF ZAM=5 THEN ZAM=4
        IF ASAGI=1 THEN
        ZAM=ZAM-1
        WHILE ASAGI=1:WEND
        ENDIF
        IF ZAM=0 THEN ZAM=1       
        IF MENU=1 THEN
        WRITE $10,ZAM:PAUSE 2
        GOTO M_CALISMA
        ENDIF

        lcdout $fe,$C0,"MOTORU ",DEC1 ZAM," SAATTE BiR"
        lcdout $FE,$94,"CEVRiLSiN.."
GOTO MOTO_ZAMANI
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1
       LCDOUT $FE,$C0,"AYARLAR KAYDEDiLDi.."
       GOSUB BIPBIP
       AYAR=1
       SYC=0
       PAUSE 800
       
        GOSUB TEMIZLE
        goto BASLANGIC       
TEMIZLE:
        lcdout $fe,1
RETURN       
'-------------------------------------------------------------------------------
TERM_KONTROL:
       GOSUB TEMIZLE
       READ $01,TERM:READ $11,A       
SET_AYAR: 
LCDOUT $FE,$C0,"ISI LiMiTiNi SECIN"
LCDOUT $FE,$94,"AYAR:",DEC2 TERM,",",DEC1 A         
           IF YUKARI=1 then
              A=A+1
                IF A=10 THEN
                A=0:TERM=TERM+1
                ENDIF
              IF TERM=100 THEN TERM=0
              PAUSE 150
           ENDIF
           IF ASAGI=1 then
              A=A-1
                IF A=255 then
                A=9:TERM=TERM-1
                ENDIF
              IF TERM=255 THEN TERM=99
              PAUSE 150
           ENDIF
               
         IF MENU=1 THEN
         WRITE $01,TERM:PAUSE 2
         WRITE $11,A:PAUSE 2
         GOTO AYAR_MENUSU
         ENDIF
                     
GOTO SET_AYAR 
'-------------------------------------------------------------------------------
NEM_KONTROL:
       GOSUB TEMIZLE
       READ $02,NEM
NEM_KONT: 
       lcdout $fe,$C0,"NEM LiMiT"
       lcdout $FE,$94,"AYARI: %",DEC2 NEM
       
           IF YUKARI=1 then NEM=NEM+1
        WHILE YUKARI=1:WEND
           IF NEM=01 then NEM=121
           
           IF ASAGI=1 then NEM=NEM-1
        WHILE ASAGI=1:WEND
           IF NEM=121 then NEM=01       
            IF MENU=1 THEN
            WRITE $02,NEM:PAUSE 2
            GOTO AYAR_MENUSU 
            ENDIF                 
         GOTO NEM_KONT
       RETURN
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
ZAMANAYARI:
WHILE MENU=1:WEND
GOSUB TEMIZLE
AYAR=1
ZAMANAYAR:
IF MENU=1 THEN
AYAR=AYAR+1
WHILE MENU=1:WEND
ENDIF
GOSUB BUTONOKU
        LCDOUT $FE,$80,"    ZAMAN AYARI     "       
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN,"/",DEC2 AY,"/",DEC2 YIL
GOSUB GUNYAZ
IF AYAR=7 THEN ZAMAN_B
GOTO ZAMANAYAR

GUNYAZ:
SELECT CASE HAFTA
CASE 1
LCDOUT $FE,$E3,"PTESI"
CASE 2
LCDOUT $FE,$E3," SALI"
CASE 3
LCDOUT $FE,$E3," CARS"
CASE 4
LCDOUT $FE,$E3," PERS"
CASE 5
LCDOUT $FE,$E3," CUMA"
CASE 6
LCDOUT $FE,$E3,"CTESI"
CASE 7
LCDOUT $FE,$E3," PAZR"
END SELECT
RETURN

BUTONOKU:
SELECT CASE AYAR
CASE 1
LCDOUT $FE,$C0,"SAAT    "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
SAAT=SAAT+1
IF SAAT=24 THEN SAAT=0
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
SAAT=SAAT-1
IF SAAT=255 THEN SAAT=23
ENDIF

CASE 2
LCDOUT $FE,$C0,"DAKIKA"
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
DAK=DAK+1
IF DAK=60 THEN DAK=0
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
DAK=DAK-1
IF DAK=255 THEN DAK=59
ENDIF

CASE 3
LCDOUT $FE,$C0,"GUN    "   
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
GUN=GUN+1
IF GUN=31 THEN GUN=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
GUN=GUN-1
IF GUN=0 THEN GUN=30
ENDIF

CASE 4
LCDOUT $FE,$C0,"AY    "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
AY=AY+1
IF AY=13 THEN AY=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
AY=AY-1
IF AY=0 THEN AY=12
ENDIF

CASE 5
LCDOUT $FE,$C0,"YIL      "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
YIL=YIL+1
IF YIL=51 THEN YIL=5
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
YIL=YIL-1
IF YIL=4 THEN YIL=50
ENDIF

CASE 6
LCDOUT $FE,$C0,"HAFTA     "
IF YUKARI=1 THEN
WHILE YUKARI=1:WEND
HAFTA=HAFTA+1
IF HAFTA=8 THEN HAFTA=1
ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
HAFTA=HAFTA-1
IF HAFTA=0 THEN HAFTA=7
ENDIF
END SELECT
RETURN


ZAMAN_B:
        IF MENU=1 then ZAMAN_B
        gosub ZAMAN_YAZ
goto AYAR_MENUSU       
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ZAMAN_OKU:
    high RTC_RST:OUTPUT RTC_DTA
shiftout RTC_DTA, RTC_CLK, 0, [$BF]:INPUT RTC_DTA
SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, HAFTA, YIL, MEM]  'OKU
         MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         MEM=HAFTA:GOSUB CEVIR:HAFTA=SAYI
     low RTC_RST
  return

ZAMAN_YAZ:
         MEM=sn:gosub TERSCEVIR:sn=SAYI
         MEM=DAK:gosub TERSCEVIR:DAK=SAYI
         MEM=SAAT:gosub TERSCEVIR:SAAT=SAYI
         MEM=GUN:gosub TERSCEVIR:GUN=SAYI
         MEM=AY:gosub TERSCEVIR:AY=SAYI
         MEM=YIL:gosub TERSCEVIR:YIL=SAYI
         MEM=HAFTA:GOSUB TERSCEVIR:HAFTA=SAYI

    high  RTC_RST
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]    'WRT Protek açıldı
     low RTC_RST:PAUSEUS 10
    high RTC_RST         
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, HAFTA, YIL, 128]  'YAZ
     low RTC_RST
PAUSEUS 10
  return

CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
  return

TERSCEVIR:
         ONLAR=MEM DIG 1
         ONLAR=ONLAR<<4
         BIRLER=MEM DIG 0
         SAYI=ONLAR+BIRLER
  return
 

END
   
     





ete hocam burdaki kod sht 11 e göre yazılmıs ben bunu dht 11 e çevirmeye çalıştım fakat birtürlü dönderemedim nerde yanlışlıkda yaptığımı çözemedim acaba böyle bişe mümkün değilmi bide siz baksanız
Buda dht nin kodu.
Include "modedefs.bas"         
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16f628A, BOD_OFF
@ DEVICE pic16f628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16f628A, MCLR_OFF
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
'-------------------------- LCD Tanımlama --------------------
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
'DEFINE LCD_COMMANDUS 2000   ' Set command delay time in us
'DEFINE LCD_DATAUS 50        ' Set data delay time in us

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

SURE    var byte
I       VAR BYTE
TAMRUT  VAR BYTE
ONDARUT VAR BYTE
TAMISI  VAR BYTE
ONDAISI VAR BYTE
control var byte
DERECE  CON 223     ' ° işareti

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


BASLA:


output  dta
LOW     DTA
    Pause   18      '18 ms bekle
HIGH    DTA         'Data pinini High yap
    Pauseus 40      '40 us bekle
input   dta
WHILE   DTA=0:WEND
PAUSEUS 85

IF DTA=1 then HATA

TAMRUT=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 40
  IF DTA=1 then TAMRUT.0[I]=1
  while dta=1:wend
Next

ONDARUT=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 40
  IF DTA=1 then ONDARUT.0[I]=1
  while dta=1:wend
Next

TAMISI=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 40
  IF DTA=1 then TAMISI.0[I]=1
  while dta=1:wend 
Next

ONDAISI=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 40
  IF DTA=1 then ONDAISI.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 40
  IF DTA=1 then control.0[I]=1
  while dta=1:wend
 
Next
    LCDOUT  $FE,1
    LCDOUT  $FE,$80,"NEM=",DEC TAMRUT,"%"        ',DEC ONDARUT
    LCDOUT  $FE,$C0,"ISI=",dec TAMISI,derece,"C" ',DEC ONDAISI
    PAUSE   200

GOTO BASLA

hata:
    LCDOUT  $FE,1,"SENSOR HATASI"
    PAUSE   200
GOTO BASLA

END


POWER

elinde dht11 model dosyası olan varmı? bemde onu bulamadım.

ete

Isıs v.8.x de mevcut bu model.
Ete

POWER

2 gündür uğraşıyorum fakat dht11 ile nem ısı okuma proğramını çalıştıramadım.hep sensör hatası veriyor.tüm denemelerimi isis de yapıyorum.5 sayfalık bu başlığı baştan sona okuyarak vede verilen proğramları isis de deneyerek 2-3 defa tekrar yaptım.sonuç alamadım malesef.sadece "Reytabu" arkadaşımızın verdiği proğramlardan bir tanesinde ekrana 00.0 geldi.diğerlerinin tamamında sensör hatası veriyor.proteus 8.4 sp0 kullanıyorum.bu hata isis ile ilgilimi acaba? çünkü 2-3 arkadaş bu kodları çalıştırmış.

ete

Anlamak kolay. İlişikte yolladığım dosyaları bir dene bakalım çalışıyorsa simulede kusur yok programında kusur var demektir.

Ete

POWER

#70
Ete Hocam;
verdiğininiz  proğramı denedim. ilk açılışta ısı ve nem değerleri 0,0 şeklinde ekrana geliyor ve bir saniye sonra sensör hatası yazıyor ve beş saniye kadar ekranda kalıyor. sonra tekrar sı ve nem değerleri 0,0 şeklinde ekrana geliyor böylece devam ediyor. xp kullandığım için proğramda pasif edilmiş sigorta satırlarını kullanıma açtım.başka bir değişiklik yapmadım.
Hocam,
dht11 isis'den ekleyip denedim çalışdı.test ediyorum şimdilik.

ete

Senin isisde bir sorun var galiba. Bende çalışıyor o programlar sorunsuz olarak.

Ete

Osman22


POWER

proteus'un farklı versiyonunda deneyeceğim.sensör siparişi verdim.devreyi kurup ordada deneyip sonuçları paylaşırım.

POWER

#74
ete hocam,
sensör elime geçti.devreyi kurdum problemsiz çalıştı.isis de sensör hatası veren proğram gerçek devrede çalıştı.ısı değerini  18b20 li bir devre ile karşılaştırdım 2-3 derece dht11 eksik gösteriyor.yanlış hatırlamıyorsam dht11 ısı töleransı 2 derece idi,yanlışta olabilir.devrenin  ondalık kısımları çalışmıyor neden acaba?

Powered by EzPortal