lcd de eksı sıcaklık set etme geri saydırma

Başlatan hkalaycioglu, 22 Ekim 2012, 23:02:12

hkalaycioglu

herkese iyi akşamlar ben lcd ile sıcaklık kontrol devresi yaptım ama eksi sıcaklıkları bır turlu ayarlayamadım yardımcı olursanız sımdıden tesekkurler download lınkıde asağıda

linki yanlıs yapıstırdım kopyala yapıstır yapıp o sekılde acabilirsiniz

https://rapidshare.com/files/2582615186/628 ile.DSN

@ DEVICE pic16F628 'işlemci 16F628
@ DEVICE pic16f628, WDT_OFF
@ DEVICE pic16f628, PWRT_OFF
@ DEVICE pic16f628, BOD_OFF
@ DEVICE pic16f628, LVP_OFF
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16f628, MCLR_OFF
@ DEVICE pic16f628, INTRC_OSC_NOCLKOUT
DEFINE OSC 4 '4 Mhz hızında çalışıyoruz.

CMCON = 7
TRISA=%00110111
TRISB=%00000010

PORTA=0
PORTB=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   2
     
'---------------------------değişkenler-----------------------------------------
    SYC      VAR    BYTE
    a var byte
    TERM     VAR    BYTE
    SAYI     VAR    BYTE
    AYAR     VAR    BYTE
    TSEN     VAR    WORD
    TSET     VAR    WORD
    ALT      VAR    WORD
    EK       VAR    BYTE       
    ALARM1   VAR    WORD
    ALARM2   VAR    WORD
    E1        VAR    BYTE
    E2        VAR    BYTE
    MENU    VAR     PORTA.0
    YUKARI  VAR     PORTA.1
    ASAGI   VAR     PORTA.2
    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

LCDOUT $FE,$40,4,14,14,14,14,31,31,0
lCDOUT $FE,$48,$6,$9,$9,$6,$0,$0,$0,$0        'derece işareti

GIRIS:
   
   LCDOUT $FE,$80,"I S I A L A R M "               
   lcdout $FE,$C0," D E V R E S I  " ' One-wire Data-Pin "DQ" PortB.0 da
    PAUSE 2000
         LCDOUT $FE,1
   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
     '-------------------------------------------------------------------------------
BASLANGIC:
SYC=0

READ $01,ALT.BYTE0:IF ALT.BYTE0=255 THEN ALT.BYTE0=0
READ $11,ALT.BYTE1:IF ALT.BYTE1=255 THEN ALT.BYTE1=1



read $38,EK:IF EK=255 THEN EK=0
                 
BASLA: 
        GOSUB SENSOROKU
        GOSUB EKRAN1
        GOSUB ISIKONTROL

IF MENU=1 THEN  GOTO AYAR_MENUSU
goto BASLA       
'---------------------------------------EKRANA YAZ -----------------------------   
EKRAN1:   
  ALARM1=ALT/10:ALARM2=ALT//10
  lcdout $FE,2,"ORTAM ISI=",ISARET,DEC2 ISI,",",DEC1 (FLOAT),1,"C"
  lcdout $fe,$C0,"SET =",ISARET,DEC2 ALARM1,",",DEC1 ALARM2,1,"C"
  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 
'----------------------------ISI KONTROL----------------------------------------

ISIKONTROL:
READ $38,EK
TSET=ALT:TSEN=FLOAT
         if tsen=<(TSET-EK)then   
          LOW PORTA.7
         
           LCDOUT $FE,$CC," "
            LCDOUT $FE,$CD," "
             LCDOUT $FE,$CE," "
          ELSE
         
         
          lcdout $fe,$CC,0
          lcdout $fe,$CD,0
          lcdout $fe,$CE,0
          ENDIF
        if TSET=<tsen then         
         HIGH PORTA.7
        Endif
      IF MENU=1 THEN  GOTO AYAR_MENUSU
RETURN



BIP:
    HIGH PORTA.3   
pause 50
     LOW PORTA.3 
  RETURN
BIPBIP:
     HIGH PORTA.3   
    PAUSE 50
      LOW PORTA.3
    PAUSE 100
     HIGH PORTA.3
    PAUSE 50
      LOW PORTA.3
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=3 THEN SYC=0
ENDIF

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

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,2,"ISITICI AYARLARI"
LCDOUT $FE,$C0,"              "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO TERM_KONTROL
ENDIF

CASE 1
lcdout $fe,2,"ISI HASSASIYET  "
LCDOUT $FE,$C0,"   A Y A R I "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO HASSASIYET
ENDIF

CASE 2
lcdout $fe,2,"MENUDEN CIKIS   "
LCDOUT $FE,$C0,"              "   
IF MENU=1 THEN AYARLANDI
END SELECT

RETURN

TERM_KONTROL:
       GOSUB TEMIZLE
      READ $01,ALT.BYTE0:READ $11,ALT.BYTE1     
SET_AYAR:
 
ALARM1=ALT/10:ALARM2=ALT//10 
LCDOUT $FE,2,"ISI LiMiTiNi SEC"
LCDOUT $FE,$C0,"AYAR:",ISARET,DEC2 term,",",DEC1 A,1,"C"
'LCDOUT $FE,$C0,"AYAR:",ISARET,DEC2 ALARM1,",",DEC1 ALARM2,1,"C"       
           
           IF YUKARI=1 then
              A=A+1
             
                IF A=10 THEN
                if term=>00 then isaret="+"
                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
                if term=<00 then isaret="-"
                A=9:TERM=TERM-1
                ENDIF
                if term=00 and ASAGI=1 then
                 isaret="-"
                 term=term+1
                 endif
             
              'IF TERM=255 THEN TERM=99
             PAUSE 150
           ENDIF
           
iF MENU=1 THEN
       
         'WRITE $01,ALT.BYTE0
        ' WRITe $11,ALT.BYTE1
         GOTO AYAR_MENUSU
         ENDIF
                     
GOTO SET_AYAR 

HASSASIYET:
GOSUB TEMIZLE
HASSAS:
E1=EK/10:E2=EK//10
LCDOUT $FE,2,"HASSASIYET"
LCDOUT $FE,$C0,"AYARI:",DEC1 E1,",",DEC1 E2,1,"C"
IF YUKARI=1 THEN
EK=EK+1
PAUSE 100
gosub BIP
endif
IF EK=01 THEN EK=51
IF ASAGI=1 THEN
EK=EK-1
gosub BIP
PAUSE 100
endif
IF EK=51 THEN EK=01
IF MENU=1 THEN
WRITE $38,EK:PAUSE 10
GOTO AYAR_MENUSU
ENDIF
GOTO HASSAS   
   



AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1
      LCDOUT $FE,$80,"AYARLAR  ....  "
      LCDOUT $FE,$C0,"KAYDEDILDI....  "
       GOSUB BIPBIP
       AYAR=1
       SYC=0
       PAUSE 800
       
        GOSUB TEMIZLE
        goto BASLANGIC       
TEMIZLE:
        lcdout $fe,1
RETURN       
END
   
     


ete

Eksi sıcaklıkmı okutamıyorsun yoksa set ayarlamada eksi sıcaklığı devreyemi alamıyorsun.
Sorununu daha açık anlatsan daha kolay yardım görürsün. Sorun ortaya tam koyulmayınca otuup programı incelemek veya simulasyonda çalıştırmak gerekir. Her zaman çalıştırmak sorunu görmeye yetmez. Bu nedenle detaylı ve doğru açıklama önemlidir. Cevap yazmak isteyenlere yardımcı olur. Yoksa bir sürü vakit harcamak gerekiyor sorunun ne olduğunu bulmak için.
Ete

hkalaycioglu

#2
eksı sıcaklıgı set edemıyorum sıfırdan sonra -53 falan gibi degerler gelıyor ben -1 , -2  gibi gitsin istiyorum beceremedım internettede bayağı bir baktım lcd ile eksi degere set eden bir program ornegıde bulamadım


ete

Eksi sıcaklığı işaret biti belirlemektedir. İşaret biti=1 ise sıcaklık eksi demektir. Bu sensörden okunan sıcaklığın set sıcaklığı ile karşılaştırıldığında dikkat etmen gereken önemli bir noktadır.

Set ayarına gelince , set sıcaklığı +10 derece iken diyelimki -3 dereceye ayarlayacaksın. Normalde azaltma butonuna bastığın müddetçe sıcaklık pozitif ise sıcaklık değeri bir eksilir. Ancak sıfırdan sonra eksi bölgeye geçmiş olursun ve bu konumda sıcaklık değerin yeniden bir artması gerekir. Set sıcaklığınında bir işaret biti olmalıdır. Dolayısıyla sıfırdan sonra sıcaklık hala düşürülecek ise önce set işaret biti 1 yapılmalı ve sıcaklık değeri eksiltme tuşuna basılmış olmasına rağmen bir artırılmalıdır. Sıcaklık değerlerinin alması gereken değerler şöyle olacak,
0 sonra 1 (-1) sonra 2 (-2) sonra 3 yani -3 olacaktır.
Aynı şekilde artırma tuşuna bastığın zaman sıcaklık eksi bölgede ise eksiltme yapacak artı bölgede ise artırma yapacaksın.
Bütün işin püf noktası burada ve aslında mantığını çalıştırsan son derece olay bir iş ama bazın kafa karıştırıyor işte.

Ete

hkalaycioglu

ete hocam ben bu isi beceremedım bir turlü olmuyor geri saydıramıyorum zamanınız varsa yuardımcı olursanız sevinirim simdiden bayramınızıda kutluyorum

ete

Değişen set ayar kısmını veriyorum yalnızca.

Ete

SET_AYAR: 
ALARM1=ALT/10:ALARM2=ALT//10
LCDOUT $FE,2,"ISI LiMiTiNi SEC"
LCDOUT $FE,$C0,"AYAR:",ISARET,DEC2 term,",",DEC1 A,1,"C"
'LCDOUT $FE,$C0,"AYAR:",ISARET,DEC2 ALARM1,",",DEC1 ALARM2,1,"C"       
           
           IF YUKARI=1 then
              if isaret="+" then
                A=A+1
                if a=10 then
                  a=0:term=term+1
                  if term>100 then term=100
                endif
              else
                a=a-1
                if a=255 then
                  term=term-1
                  A=9
                  if term=255 then
                    term=0:isaret="+":A=1                 
                  endif
                endif
              endif   
              PAUSE 200
           ENDIF
           
           IF ASAGI=1 then
             if isaret="+" then
                A=A-1
                if a=255 then
                   a=9:Term=TERM-1
                   IF TErm=255 then
                     TERM=0:isaret="-":A=1
                   endif
                 endif   
                 goto CIK
             else
                a=a+1
                if a=10 then
                  a=0:term=term+1
                  IF term=51 then term=50
                endif 
             endif
             pause 200
            endif       
             
CIK:             
             PAUSE 150
         
           
'           iF MENU=1 THEN       
'         'WRITE $01,ALT.BYTE0
'        ' WRITe $11,ALT.BYTE1
'         GOTO AYAR_MENUSU
'         ENDIF
                     
GOTO SET_AYAR

hkalaycioglu

cok tesekkur ederım ete hocam elinize saglık bununla ilgili hic bir proje yok eksi olcum ve ayarlama ile ilgili bitince sitenize koyarız birilerinin işine mutlaka yarar

ete

Benim termoalarm projelerimde olması gerek daha önce yapmıştım.
Ete

hkalaycioglu

7 segment displayler için var ama lcd için yok sanki öyle hatırlıyorum

Powered by EzPortal