PIC BASIC yazılımsal sorun

Başlatan yilmaz-imr, 24 Ekim 2015, 15:02:25

yilmaz-imr

Aşırı yağışdan dolayı geceleri elektrikler gidip geldiğinde NEM set değeri silinip %10 oluyor. Yardımcı olabilecek varmı. Yumurtaları kuluçkaya yatırmıştım. Bu sorundan dolayı yumurtalar telef olacak.

Devre ete hocanın ısı nem alarm projesi.


DEFINE LCD_DREG		PORTB	'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
define lcd_RWREG    PORTB
define LC_RWBIT     2
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
OPTION_REG.7=1
@ __config _CP_ON & _DATA_CP_ON & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
'---------------------------değişkenler------------------------------
    ILK     VAR     BIT
    Y       VAR     BIT
    poz     var     BIT
    KAP     VAR     BIT
    KONTROL VAR     BYTE    
    DUR     VAR     BYTE       'EN SON SHT SENSÖR OKUMA BÖLÜMÜ 
    ISI1    VAR     BYTE       'BU PROGRAMDA VAR. 29-04-2005 DE
    ISI2    VAR     BYTE       'YAPILDI. İYİ ÇALIŞIYOR.
    ALARM1  VAR     BYTE       
    ALARM2  VAR     BYTE       
    U1      VAR     BYTE         
    U2      VAR     BYTE
    C0      VAR     BYTE
    Z       VAR     BYTE
    ALRM    VAR     BYTE
    SEC     VAR     BYTE
    H0      VAR     HAM.BYTE0
    H1      VAR     HAM.BYTE1
    HAM VAR     WORD
    RAW     var     word
    RAI     var     word
    ISI     VAR     WORD
'    RUT     VAR     WORD
    NEM     VAR     WORD
    ALT     VAR     WORD
    P1      VAR     WORD
    P2      VAR     WORD
    P3      VAR     WORD             
    C       VAR     WORD
    B       VAR     WORD
    W       VAR     WORD
    CLK     VAR     PORTA.0
    DTA     VAR     PORTA.1  'PORTA.2 DE ROLE BAĞLI OLACAK
    ISARET  VAR     BIT   'sensor değeri 0 ise artı, 1 ise eksi
    SIGN    VAR     BIT   'alarm ısı isareti 0 ise artı 1 ise eksi
    HATA    var     BIT

  '-----------------------------B A Ş L A N G I Ç ---------------------------   
   
    CLEAR:TRISA=%00111000:PORTB=0:TRISB=0:CMCON=7:Z=1:low PORTB.2:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    PAUSE 200: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,1
'    data @$20,"TERMOMET":DATA @$28,"  V.13   "  'PROGRAM ADI VE VER NO
     GOSUB OKU
    IF ALT>400 THEN
       ALT=005:GOSUB ISIYAZ:ENDIF
    IF NEM>1000 THEN
       NEM=100:GOSUB NEMYAZ:ENDIF   
    gosub reset :GOSUB T_START:SEC=0
    PORTB.0=0
'-------------------------------------------------------------------------------   
BASLA:  SEC=1-SEC
'        IF SEC=0 then ESAS
        KONTROL=%00000011:HAM=0   'SICAKLIK ÖLÇME
        GOSUB OLCUMAL
       'HAM=4000 sıfır dereceye tekabül ediyor, HAM=3000 -10 derece oluyor.
'        ham=7850
        RAI=HAM
          Gosub ISIHESAP:GOSUB EKRAN1
            IF ALRM=1 THEN
              LCDOUT $FE,2,1
            ELSE
              LCDOUT $FE,2," "
            ENDIF
        PAUSE 50

       KONTROL=%00000101:HAM=0 'RUTUBET ÖLÇME
       GOSUB OLCUMAL
     '  ham=710        'HAM=3710 bu değer %100 rutubete eşdeğerdir.
        GOSUB RUTHESAP:GOSUB EKRAN2
       
'--------BU ARAYA ISI VE RUTUBETE BAĞLI KONTROL RUTİNİ YERLEŞTİRİLECEK--------------------

ESAS:     IF PORTA.3=0 THEN           'SELECT TUŞU PORTA.3 DE
             WHILE Z<22
               ILK=0
               GOTO SECIM
             WEND 
           ENDIF   
           
        IF PORTA.5=0 then
            ALRM=1-ALRM:GOSUB DURUM
            WHILE PORTA.5=0
            WEND
        ENDIF
       
       IF PORTA.4=0 then
            ALRM=1-ALRM:GOSUB DURUM
            WHILE PORTA.4=0
            WEND
         ENDIF
'------------------------------------------------------------------------------------------
       GOSUB GERIHESAP
       
       IF (Y=0) then
         if (RAI=<RAW) THEN      'ISI ayarlanandan düşük ise
           GOSUB AC:GOTO ATLA 'alarmı aç
         ENDIF
       endif   
             
       IF NEM>P3 THEN          'nem ayarlanandan yüksek ise
          PORTB.0=1    'alarmı aç
       ENDIF 
           
         if (RAI>RAW) THEN    'ısı ayarlanandan yüksek ise alarmı kapa
         GOSUB KAPA
       endif
           
       
         IF NEM<P3 THEN  'nem ayarlanandan alçak ise alarmı kapa
         PORTB.0=0 
       ENDIF
       IF KAP=1 AND POZ=1 THEN GOSUB KAPA
ATLA:   Z=1
        SLEEP 1
        GOTO BASLA
'------------------------------------------------------------------
AC:     PORTA.2=1:Y=1:ALRM=1
ACBIR:
'        LCDOUT $FE,2
'        LCDOUT "   ALARM ACIK   "
        Z=0:ILK=0:PAUSE 100
        RETURN

KAPA:   PORTA.2=0:Y=0:ALRM=0:POZ=0
KAPABIR:
'        LCDOUT $FE,2
'        LCDOUT "  ALARM KAPALI  "
        Z=0:ILK=0:PAUSE 100
        RETURN

DURUM:  IF ALRM=0 THEN
           low PORTA.2
           gosub KAPABIR
        ELSE
           HIGH PORTA.2
           GOSUB ACBIR
        ENDIF
        Z=0       
        RETURN
'---------------------------------------EKRANA YAZ ------------------------------------------------
EKRAN1: LCDOut $FE,2       
        if ISARET=1 THEN
          LCDOut "  ISI :-",DEC2 ISI1 , "," , DEC1 ISI2," ",0,"C ":RETURN 
        endIF
        LCDOut "  ISI : ",DEC2 ISI1 , "," , DEC1 ISI2," ",0,"C ":RETURN
EKRAN2: LCDOut $FE,$C0:
        ALARM1=ALT/10:ALARM2=ALT//10
'        LCDOUT "RAI=",#RAI,"HAM=",#HAM
    LCDOut "  NEM : ",DEC2 U1 , "," , DEC1 U2,"  % "
RETURN
'----------------------------------------------------------------------------------
SECIM:  pause 50:LCDOUT $FE,1     
IKINCI: Z=20
IKIBIR: GOSUB EKRAN3
        IF PORTA.5=0 THEN
           IF SIGN=1 THEN
             alt=alt-1
             IF alt=65535 THEN
                alt=1:SIGN=0
             ENDIF   
             GOTO ARACIK
           ENDIF
        ALT=ALT+1 
        ENDIF
        IF PORTA.4=0 THEN
           IF SIGN=1 THEN
              alt=alt+1:GOTO ARACIK
           ENDIF   
            ALT=ALT-1
          IF ALt=65535 THEN
            SIGN=1
            ALT=1
          ENDIF :ENDIF
ARACIK: GOSUB ISIYAZ:PAUSE 15
        IF PORTA.3=0 THEN
            IF Z=20 THEN IKIBIR
            GOTO NEMALRM:ENDIF
        Z=22:GOTO IKIBIR
       
NEMALRM:
         GOSUB EKRAN4
         IF PORTA.5=0 THEN 
            NEM=NEM+1
            IF NEM=1001 THEN NEM=1000
         GOTO NEMARA
         ENDIF
         IF PORTA.4=0 THEN
            NEM=NEM-1
            IF NEM=65535 THEN NEM=0
         ENDIF
NEMARA:  GOSUB NEMYAZ:PAUSE 25
         IF PORTA.3=0 THEN
            IF Z=22 THEN NEMALRM
         GOTO BASLA:ENDIF
         Z=30:GOTO NEMALRM     

EKRAN3: LCDOUT $FE,$80," ALARM-ISI AYARI"
       
TOP:    LCDOut $FE, $C0
        ALARM1=ALT/10:ALARM2=ALT//10
        IF SIGN=1 THEN
           LCDOut " ALARM: -",#ALARM1 ,"," , DEC1 ALARM2," ",0,"C "       
           goto TOPCIK
           ENDIF
        LCDOut " ALARM:  ",#ALARM1 ,"," , DEC1 ALARM2," ",0,"C "       
TOPCIK: PAUSE 150
        RETURN 
                 
EKRAN4: LCDOUT $FE,$80," ALARM-NEM AYARI"
        LCDOut $FE, $C0
        ALARM1=NEM/10:ALARM2=NEM//10
        LCDOut " NEMALARM: ",#ALARM1 ,"," , DEC1 ALARM2,"%"
        GOTO TOPCIK
       
       
'------------------------------- İŞ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

'-----------------------------R E S E T -----------------------------------------------------------
RESET:  OUTPUT DTA:OUTPUT CLK':TRISA.0=0:TRISA.1=0'
        high DTA=1
        FOR W=0 TO 9
        HIGH CLK
        pause 1
        LOW CLK
        Next W
        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 CIKIS
        NEXT W
        HATA=1
CIKIS:  IF HATA=1 then
         gosub SENSORYOK
       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:  ISARET=0
           if ham<4000 then
              ISARET=1 'sıcaklık eksi değerde demek
              ISI1=(4000-HAM)/100
              ISI2=((4000-ham)//100)/10   
              goto ISISON
            endif
           ISI1=(HAM-4000)/100
           ISI2=((HAM-4000)//100)/10
ISISON:    if HAM>16384 then
             ISI1=0:ISI2=0
           endif 
    RETURN
GERIHESAP:
           IF SIGN=1 THEN
               raw=4000-(ALT*10)
            else
               raw=4000+ALT*10 
           ENDIF
             
             RETURN                   
'-------------------------RUTUBET HESAP ALT PROGRAMI-------------------------------------------------
RUTHESAP: 
           ISI=ISI1*10+ISI2
           p1=(26542-(54722**ham+ham))**ham-40     
           P2=655+(HAM*5)+(HAM**15917)      
           P3=(P2**(ISI+2480))-(P2**2730)+P1   ' kompanse edilmiş değer
           U1=p3/10:U2=p3//10
           IF ham>3710 THEN
              u1=0:U2=0
              GOTO SENSORYOK
           ENDIF 
           return       
'---------------------------------------------------------------------------------- 
         
OKU:   READ 8,ALT.BYTE0:PAUSE 10:READ 9,ALT.BYTE1:PAUSE 10:READ 10,SIGN:PAUSE 10
       READ 15,NEM.BYTE0:PAUSE 10:READ 16,NEM.BYTE1:PAUSE 10
       RETURN
       
ISIYAZ:WRITE 8,ALT.BYTE0:PAUSE 10:WRITE 9,ALT.BYTE1:PAUSE 10:WRITE 10,SIGN:PAUSE 10
       RETURN     

NEMYAZ:WRITE 15,NEM.BYTE0:PAUSE 16:WRITE 21,NEM.BYTE1:
       RETURN 
       
SENSORYOK: LCDOUT $FE,$02,"   SENSOR YOK   "
           LCDOUT $FE,$C0," LUTFEN TAKINIZ " 
           PAUSE 1000               
           RETURN
        END

ete

İlk defa programlanıp kullanılmaya başlanan bir PİC de eprom adresleri $FF (255) ile doldurulmuştur.
Programın başında eproma önceden kayıt edilmiş NEM set değerinin okunması için;
IF NEM>1000 THEN
       NEM=100:GOSUB NEMYAZ:ENDIF 
şeklinde bir satır programın başında yer almaktadır.  Bu satırlardan önce GOSUB OKU komut satırı ile eprom değerleri okunur ve bu satırlarda okunan değer 1000 (%100,0 e tekabül eder) den büyük ise onu 10,0 yani NEM=100 yapar ve gidip bu değeri eproma kayıt eder. Sende de bu olay ceryan ediyor.
Bir şekilde nem set değerin silinmiş yada bozulmuş. Sebebini bilemiyorum. Ama yapman gereken şey ayarlara girip yeniden bir Nem set değer girişi yapman olacaktır. Şayet bu girişi yapmana rağmen sistrem her açılışta 10,0 nem değeri ile açılıyor ise o zaman o Pic de bir sorun var demektir bence değiştir.

Ete

Powered by EzPortal