kuluçka makinası yardım

Başlatan Mucit23, 08 Haziran 2010, 22:07:02

Mucit23

Merhaba arkadaşlar Dursuncanteknik arkadaşın programını yazmış olduğu kuluçka makinası devresini yaptım fakat devrede bazı sorunlar var bu konuda siz değerli arkadaşlardan yardım istiyorum
öncelikle ilk sorun devredeki ısı limit çıkışı  devreyi çalıştırdıktan 1-2 saniye sonra 1 konumuna geçiyor yanı set değeri felan dinlemiyor ama nem kısmında sorun yok diğer bi konu ise çevirici motorun ayarladığım zmanlar dışında çalışması çalışma zamanlarını ayarladıktan sonra her dakika başında motor kaç saniye çalışacaksa okadar çalışıp duruyor bu her dakika için devam ediyor

devrenin programın veriyorum arkadaşlar ısı ve nem ölçme kodları ete hocamızın kodlarıdır bu konuda ete hocamızın bi fikri olur inş
Devrenin aççık kodlarını ben kendi bilgisayarımda derlemeye çalışıyorum fakat bir türlü derlenmiyor Fattal error:out of memory diye bi hata veriyor galiba hafıza ile ilgili bu sorunu nasıl çözebilirim

Ayrıca Microcode studioya mplabı tanıtmak gerekiyormuş arkadaşlar bunu nasıl yapmam gerekiyor.
Mplab olmadan galiba 18F serisi picler için program yazılamıyor


Devrenin açık kodları

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 [dursuncanteknik@hotmail.com]  *
'*          : All Rights Reserved                               *
'*  Date    : 14.09.2009                                        *
'*  Version : 1.2                                               *
'*  Notes   :Bu program Kuluçka makinesi için Dursun CAN        *
'*             Tarafından yazılmıştır                           *                                 
'****************************************************************
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC

TRISA=%111111
TRISB=%00000000
TRISC=%11110000
PORTA=0
PORTB=0
PORTC=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	
ADCON1 = 7              
'---------------------------değişkenler----------------------------------------- 
    E       var     byte 
    AY      var     byte
    YIL     var     byte
    SN      VAR     BYTE
    DAK     VAR     BYTE
    SAAT    VAR     BYTE
    GUN     VAR     BYTE
    MEM     var     byte 
    ONLAR   VAR     BYTE
    BIRLER  VAR     BYTE
    Y       VAR     BIT 
    SAYAC   VAR     BYTE
    TERM    VAR     BYTE
    NEM     VAR     BYTE
    KONTROL VAR     BYTE	   
    ISI1    VAR     BYTE       
    ISI2    VAR     BYTE       
    U1      VAR     BYTE         
    U2      VAR     BYTE
    C0      VAR     BYTE
    Z       VAR     BYTE
    SAYI    VAR     BYTE
    SAY     VAR     BYTE
    H0      VAR     HAM.BYTE0
    H1      VAR     HAM.BYTE1
    HAM		VAR	    WORD
    RAW     var     word
    ISI     VAR     WORD 
    RUT     VAR     WORD
    P1      VAR     WORD
    P2      VAR     WORD
    P3      VAR     WORD             
    C       VAR     WORD
    B       VAR     WORD
    W       VAR     WORD
    DUR      VAR    BYTE
    ZAMAN    VAR    BYTE
    ZAMAN1   VAR    BYTE
    ZAMAN2   VAR    BYTE
    ZAMAN3   VAR    BYTE
    ZAMAN4   VAR    BYTE
    ZAMAN5   VAR    BYTE
    CLK     VAR     PORTA.5
    DTA     VAR     PORTA.3  
    ISARET  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
    
    symbol ROLE1=PORTC.0
    symbol ROLE2=PORTC.1
    symbol ROLE3=PORTC.2
    SYMBOL BUZER=PORTC.3
    
    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
        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,1, "KULUCKA MAKiNESi"            	
         lcdout $FE,$C0,"  version 1.2  "
          pause 3000
         LCDOUT $FE,1
           HIGH BUZER:PAUSE 50:LOW BUZER          
BASLA:  
              KONTROL=%00000011:HAM=0   'SICAKLIK ÖLÇME
        GOSUB OLCUMAL
        Gosub ISIHESAP:GOSUB EKRAN1
       'PAUSE 250
              KONTROL=%00000101:HAM=0 'RUTUBET ÖLÇME
        GOSUB OLCUMAL
        GOSUB RUTHESAP
       'GOSUB EKRAN2
        pause 200
        GOSUB ISIKONTROL
        GOSUB RUTKONTROL
           IF MENU=1 THEN
        WHILE MENU=1:WEND 
         GOTO AYAR_MENULERI
        ENDIF
         goto BASLA       
'---------------------------------------EKRANA YAZ -----------------------------	
EKRAN1:	 
         GOSUB DONUSEBAK
         GOSUB ZAMAN_OKU
          READ $07,GUN
        lcdout $FE,$80,DEC2 ISI1,".",dec1 ISI2 ,0,"C   ",DEC2 GUN,".GUN" 
        lcdout $FE,$C0,"NEM:",DEC2 U1 ,"  ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
          READ $09,DUR
            IF SN = DUR THEN LOW ROLE3
            IF SAAT=0 AND DAK=0 AND SN=0 THEN 
               GUN=GUN+1
            IF GUN=31 THEN GUN=1
         WRITE $07,GUN
         PAUSE 300
         ENDIF
        RETURN
'''''''''''''''''MOTOR ÇALIŞ '''''''''''''''''             
DONUSEBAK:
           READ $0,SAYI
           READ $10,ZAMAN
           READ $11,ZAMAN1
           READ $12,ZAMAN2
           READ $13,ZAMAN3
           READ $14,ZAMAN4
           READ $15,ZAMAN5
             IF SAYI=1 THEN 
             IF SAAT AND ZAMAN AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN1 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN2 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN3 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN4 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN5 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
          ENDIF
         RETURN
''''''''''''''''TEK BIP'''''''''''''''''''''''''''''''''       
 BIP:
    HIGH buzer   
     for sayac=0 to 2
 pauseus 65535
    next
     LOW buzer  
  RETURN
''''''''''''''''ÇİFT BİP''''''''''''''''''''''''''
  BIPBIP:
     HIGH buzer   
    PAUSE 50
      LOW buzer 
    PAUSE 100
     HIGH BUZER
    PAUSE 50
      LOW BUZER 
  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 EXIT
            NEXT W
                 HATA=1
EXIT:         
              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 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:    
           
           ISI1=(HAM-4000)/100
           ISI2=((HAM-4000)//100)/10
RETURN       
'-------------------------RUTUBET HESAP ALT PROGRAMI----------------------------
 RUTHESAP: 
              'ISI=ISI1*10+ISI2
              p1=(26542-(54722**ham+ham))**ham-25     
              P2=655+(HAM*5)+(HAM**15917)	      
              P3=(P2**(ISI*10+2480))-(P2**2730)+P1   
              U1=p3/10:U2=p3//10
           IF ham>3710 THEN
              U1=0:U2=0
        ENDIF  
return 
'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:
         read 1,TERM
           if TERM<ISI1-0 then   
          LOW Role1
         ELSE
        ENDIF
           if ISI1<TERM+0 then          
         HIGH ROLE1               
        Endif      
RETURN 
'----------------------------RUTKONTROL-----------------------------------------         
RUTKONTROL:
         READ 2,NEM
           if NEM<U1 then   
         HIGH Role2
         ELSE               
          LOW ROLE2
        ENDIF
RETURN 
'-------------------------------------------------------------------------------
AYAR_MENULERI:
        WHILE MENU=1:WEND
       GOSUB TEMIZLE
ISI_AYARI:
       lcdout $fe,$c0,"   ISI LiMiTi   "
           IF MENU=1 then 
        WHILE MENU=1:WEND 
         GOTO TERM_KONTROL 
        ENDIF
 
           IF ASAGI=1 then
        WHILE ASAGI=1:WEND 
         GOTO NEM_AYARI
        ENDIF 
   
           IF YUKARI=1 then 
        WHILE YUKARI=1:WEND
         GOTO GUNN
        ENDIF
         GOTO ISI_AYARI
     
NEM_AYARI:

       lcdout $fe,$c0,"   NEM LiMiTi   " 
           IF MENU=1 then
        WHILE MENU=1:WEND 
         GOTO NEM_KONTROL
        ENDIF
           
           IF ASAGI=1 then 
        WHILE ASAGI=1:WEND
         GOTO CIK
        ENDIF
         
           IF YUKARI=1 then 
        WHILE YUKARI=1:WEND
         GOTO ISI_AYARI
        ENDIF
         
         goto NEM_AYARI     

CIK:
       WHILE MENU=1:WEND
       GOSUB TEMIZLE
CK:
     
       lcdout $fe,$c0," MENUDEN CIKIS "
           IF MENU=1 then 
        WHILE MENU=1:WEND
         GOTO BASLA
        ENDIF
         
           IF ASAGI=1 then 
        WHILE ASAGI=1:WEND
         GOTO MOTO
        ENDIF
         
           IF YUKARI=1 then
        WHILE YUKARI=1:WEND 
         GOTO NEM_AYARI
        ENDIF   
         goto CK
MOTO:
        GOSUB TEMIZLE
MOTOR:
        
       lcdout $fe,$c0," CEViRiCi MOTOR "
           IF MENU=1 then 
        WHILE MENU=1:WEND
         GOTO MOT_AYAR
        ENDIF
         
           IF ASAGI=1 then 
        WHILE ASAGI=1:WEND
         GOTO SAATT
        ENDIF
         
           IF YUKARI=1 then
        WHILE YUKARI=1:WEND 
         GOTO CIK
        ENDIF   
         goto MOTOR 
SAATT:
       GOSUB TEMIZLE
SAT:
       lcdout $fe,$c0,"  SAAT AYARI   "
       
           IF MENU=1 then 
        WHILE MENU=1:WEND
         GOTO SAATAYAR1
        ENDIF
         
           IF ASAGI=1 then 
        WHILE ASAGI=1:WEND
         GOTO GUNN
        ENDIF
         
           IF YUKARI=1 then
        WHILE YUKARI=1:WEND 
         GOTO MOTO
        ENDIF   
         goto SAT 
          
GUNN:
       GOSUB TEMIZLE
GUNU:
     lcdout $fe,$c0,"  GUNU SIFIRLA  "
       
           IF MENU=1 then 
        WHILE MENU=1:WEND
         GOTO GUNAYARI
        ENDIF
         
           IF ASAGI=1 then 
        WHILE ASAGI=1:WEND
         GOTO ISI_AYARI
        ENDIF
         
           IF YUKARI=1 then
        WHILE YUKARI=1:WEND 
         GOTO SAATT
        ENDIF   
         goto GUNU
GUNAYARI:
       GOSUB TEMIZLE
       WHILE MENU=1:WEND
GUNA:  
     READ $07,GUN
     lcdout $FE,$C0,"GUN:",DEC2 GUN
     IF MENU=1 THEN AYARLANDI
        WHILE MENU=1:WEND
        IF YUKARI=1 THEN GUN=1
        PAUSE 10
        WRITE $07,GUN
           
     GOTO GUNA          
''''''''''''''''''''''''''''''''''''''''         
MOT_AYAR:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
MOTOR_AYAR:

         READ $0,SAYI
       lcdout $fe,$80,"  MOTOR DURUMU  "  
        
           IF MENU=1 THEN M_ZAMANI
        WHILE MENU=1:WEND
           IF YUKARI=1 THEN SAYI=SAYI+1
        WHILE YUKARI=1:WEND
           IF SAYI=2 THEN SAYI=0
        WRITE $0,SAYI  
          
          IF SAYI=1 THEN lcdout $FE,$C0,"     ACIK       "
          IF SAYI=0 THEN LCDOUT $FE,$C0,"    KAPALI      "
        GOTO MOTOR_AYAR         
M_CALISMA:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
MOTO_CALISMA:
         READ $09,DUR
           IF MENU=1 THEN AYARLANDI
        WHILE MENU=1:WEND
       lcdout $fe,$80,"MOT.DONUS SURESi" 
       lcdout $FE,$C0,"SURE :",DEC2 DUR," SANIYE"
           IF YUKARI=1 THEN DUR=DUR+1
        WHILE YUKARI=1:WEND   
           IF DUR=60 THEN DUR=0
           IF ASAGI=1 THEN DUR=DUR-1
        WHILE ASAGI=1:WEND
           IF DUR=255 THEN DUR=59
        WRITE $09,DUR
         GOTO MOTO_CALISMA                          
M_ZAMANI:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
MOTO_ZAMANI:
         READ $10,ZAMAN
         READ $11,ZAMAN1
         READ $12,ZAMAN2
         READ $13,ZAMAN3
         READ $14,ZAMAN4
         READ $15,ZAMAN5
           IF MENU=1 THEN M_ZAMANI1
        WHILE MENU=1:WEND
       lcdout $fe,$80,"D.SAATLERi :",e=0,DEC2 ZAMAN 
       lcdout $FE,$C0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",DEC2 ZAMAN5
           IF YUKARI=1 THEN ZAMAN=ZAMAN+1
        WHILE YUKARI=1:WEND   
           IF ZAMAN=24 THEN ZAMAN=0
           IF ASAGI=1 THEN ZAMAN=ZAMAN-1
        WHILE ASAGI=1:WEND
           IF ZAMAN=255 THEN ZAMAN=23
        WRITE $10,ZAMAN
         GOTO MOTO_ZAMANI
M_ZAMANI1:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
MOTO_ZAMANI1:
         READ $10,ZAMAN
         READ $11,ZAMAN1
         READ $12,ZAMAN2
         READ $13,ZAMAN3
         READ $14,ZAMAN4
         READ $15,ZAMAN5
           IF MENU=1 THEN M_ZAMANI2
        WHILE MENU=1:WEND
       lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN  
       lcdout $FE,$C0,e=0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",DEC2 ZAMAN5
           IF YUKARI=1 THEN ZAMAN1=ZAMAN1+1
        WHILE YUKARI=1:WEND   
           IF ZAMAN1=24 THEN ZAMAN1=0
           IF ASAGI=1 THEN ZAMAN1=ZAMAN1-1
        WHILE ASAGI=1:WEND
           IF ZAMAN1=255 THEN ZAMAN1=23
        WRITE $11,ZAMAN1
         GOTO MOTO_ZAMANI1
M_ZAMANI2:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
MOTO_ZAMANI2:
         READ $10,ZAMAN
         READ $11,ZAMAN1
         READ $12,ZAMAN2
         READ $13,ZAMAN3
         READ $14,ZAMAN4
         READ $15,ZAMAN5
           IF MENU=1 THEN M_ZAMANI3
        WHILE MENU=1:WEND
       lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN 
       lcdout $FE,$C0,DEC2 ZAMAN1,":",e=0,DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",DEC2 ZAMAN5
           IF YUKARI=1 THEN ZAMAN2=ZAMAN2+1
        WHILE YUKARI=1:WEND   
           IF ZAMAN2=24 THEN ZAMAN2=0
           IF ASAGI=1 THEN ZAMAN2=ZAMAN2-1
        WHILE ASAGI=1:WEND
           IF ZAMAN2=255 THEN ZAMAN2=23
        WRITE $12,ZAMAN2
         GOTO MOTO_ZAMANI2
M_ZAMANI3:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
MOTO_ZAMANI3:
         READ $10,ZAMAN
         READ $11,ZAMAN1
         READ $12,ZAMAN2
         READ $13,ZAMAN3
         READ $14,ZAMAN4
         READ $15,ZAMAN5
           IF MENU=1 THEN M_ZAMANI4
        WHILE MENU=1:WEND
       lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN 
       lcdout $FE,$C0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",e=0,DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",DEC2 ZAMAN5
           IF YUKARI=1 THEN ZAMAN3=ZAMAN3+1
        WHILE YUKARI=1:WEND   
           IF ZAMAN3=24 THEN ZAMAN3=0
           IF ASAGI=1 THEN ZAMAN3=ZAMAN3-1
        WHILE ASAGI=1:WEND
           IF ZAMAN3=255 THEN ZAMAN3=23
        WRITE $13,ZAMAN3
         GOTO MOTO_ZAMANI3 
M_ZAMANI4:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
MOTO_ZAMANI4:
         READ $10,ZAMAN
         READ $11,ZAMAN1
         READ $12,ZAMAN2
         READ $13,ZAMAN3
         READ $14,ZAMAN4
         READ $15,ZAMAN5
           IF MENU=1 THEN M_ZAMANI5
        WHILE MENU=1:WEND
      lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN  
       lcdout $FE,$C0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",e=0,DEC2 ZAMAN4,":",DEC2 ZAMAN5
           IF YUKARI=1 THEN ZAMAN4=ZAMAN4+1
        WHILE YUKARI=1:WEND   
           IF ZAMAN4=24 THEN ZAMAN4=0
           IF ASAGI=1 THEN ZAMAN4=ZAMAN4-1
        WHILE ASAGI=1:WEND
           IF ZAMAN4=255 THEN ZAMAN4=23
        WRITE $14,ZAMAN4
         GOTO MOTO_ZAMANI4 
M_ZAMANI5:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
MOTO_ZAMANI5:
         READ $10,ZAMAN
         READ $11,ZAMAN1
         READ $12,ZAMAN2
         READ $13,ZAMAN3
         READ $14,ZAMAN4
         READ $15,ZAMAN5
           IF MENU=1 THEN M_CALISMA
        WHILE MENU=1:WEND
      lcdout $fe,$80,"D.SAATLERi :",DEC2 ZAMAN  
       lcdout $FE,$C0,DEC2 ZAMAN1,":",DEC2 ZAMAN2,":",DEC2 ZAMAN3,":",DEC2 ZAMAN4,":",e=0,DEC2 ZAMAN5
           IF YUKARI=1 THEN ZAMAN5=ZAMAN5+1
        WHILE YUKARI=1:WEND   
           IF ZAMAN5=24 THEN ZAMAN5=0
           IF ASAGI=1 THEN ZAMAN5=ZAMAN5-1
        WHILE ASAGI=1:WEND
           IF ZAMAN5=255 THEN ZAMAN5=23
        WRITE $15,ZAMAN5
         GOTO MOTO_ZAMANI5                                                                                                          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
 AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1,"   AYARLANDI   "
        PAUSE 1000
        gosub BIPBIP
        GOSUB TEMIZLE
         goto CIK        
TEMIZLE:
        lcdout $fe,1
 RETURN        
'-------------------------------------------------------------------------------
TERM_KONTROL:
       GOSUB TEMIZLE
TERM_KONT: 
       lcdout $fe,$80,"  ISI LiMiTi    "
       lcdout $FE,$C0,"AYARI:",DEC2 TERM 
          
           IF YUKARI=1 then TERM=TERM+1
        WHILE YUKARI=1:WEND
           IF TERM=01 then TERM=121
           
           IF ASAGI=1 then TERM=TERM-1
        WHILE ASAGI=1:WEND
           IF TERM=121 then TERM=01
           
        WRITE 1,TERM:PAUSE 10         
           IF MENU=1 THEN
        WHILE MENU=1:WEND 
         GOTO AYARLANDI
        ENDIF                  
         GOTO TERM_KONT  	
RETURN
'-------------------------------------------------------------------------------
NEM_KONTROL:
       GOSUB TEMIZLE
NEM_KONT:  
       lcdout $fe,$80,"   NEM LiMiTi   "
       lcdout $FE,$C0,"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
           
        WRITE 2,NEM:PAUSE 10         
           IF MENU=1 THEN
        WHILE MENU=1:WEND 
         GOTO AYARLANDI
        ENDIF                  
         GOTO NEM_KONT 	
       RETURN
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
SAATAYAR1:
       lcdout $fe,1
           IF MENU=1 then SAATAYAR1
        gosub EKRAN0

SAATAYAR:
        PAUSE 200
       lcdout $fe, $c7, dec2 SAAT
       lcdout $fe,$0e
       lcdout $fe, $10
              E=0

       button MENU, 1, 255, 255, E, 1,DAKIKAAYAR1
       button YUKARI,1,255,255,E,1,SAATIARTIR
       button ASAGI,1,255,255,E,1,SAATIAZALT
         goto SAATAYAR

SAATIARTIR:
           IF YUKARI=1 then SAAT=SAAT+1
           IF SAAT=24 then SAAT=0
         goto SAATAYAR

SAATIAZALT:
           IF ASAGI=1 then SAAT=SAAT-1
           IF SAAT=255 then SAAT=23
         goto SAATAYAR
DAKIKAAYAR1:
           IF MENU=1 then DAKIKAAYAR1
       lcdout $fe,1
        gosub EKRAN0
DAKIKAAYAR:
        PAUSE 200
       lcdout $fe, $ca, dec2 DAK
       lcdout $fe,$0e
       lcdout $fe, $10
              E=0
       button MENU, 1, 255, 255, E, 1,ZAMAN_B
       button YUKARI,1,255,255,E,1,DAKARTTIR
       button ASAGI,1,255,255,E,1,DAKAZALT
DAKARTTIR:
           IF YUKARI=1 then DAK=DAK+1
           IF DAK=60 then DAK=0
         goto DAKIKAAYAR
DAKAZALT:
           IF ASAGI=1 then DAK=dak-1
           IF DAK=255 then DAK=59
         goto DAKIKAAYAR
ZAMAN_B:
           IF MENU=1 then ZAMAN_B
        gosub ZAMAN_YAZ
        GOSUB TEMIZLE
        GOSUB AYARLANDI
         goto CIK       
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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, MEM, 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
     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

    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, 0, 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 
  
EKRAN0:
lcdout " SAATi AYARLA "
lcdout $fe,$c0,"SAAT : ",dec2 SAAT,":",dec2 DAK,":",dec2 SN
return  
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
END


Devre ile ilgili tüm dosyalar
http://www.dosya.tc/5HNFy2/16F877ileKulu_kaMakinesi.rar.html

lütfen arkadaşlar bana bu konuda yardım edin arkadaşlar bu programı daha sade bir şekilde nasıl yazabilirim

ete

Mucit23,

Programın yazılma mantığı gerçekten kötü. Yanlış anlaşılmasın işin kontrol kısmından bahsediyorum. Yoksa programa bakarsan %50 den fazlası zaten ETE kodlarıdır (kimse belirtmemiş ama ben belirteyim).
Her şeyden önemlisi programda değişkenler kullanılmasına rağmen yinede bütün bilgi sürekli eeproma yazılıp oradan okunup işleme sokulmaktadır. Eeproma önceden bir şey yazmadan oradan okuma yaparsanız ilk okumada 255 değerini okursunuz daima.
Sorun buradan kaynaklanıyor. Bu konuda bir tedbir alınmamış.
Programın aşağıdaki kısmına bir bakarsan;
ISIKONTROL:
         read 1,TERM
         if TERM<ISI1-0 then   
           LOW Role1          
         ELSE
         ...
         ...        
RETURN

İlk çalıştırmada TERM değeri 255 olarak okunacak ve bu değer ISI1 değerinden büyük olacağı için Role1 aktif olacaktır. Aynı sorun Nem kontrol kısmında da mevcut. Çözüm ilk okumalarda 255 değerinin okunma ihtimaline karşın bu değerin değiştirilmesi şeklinde uygulanmalıdır. Nasıl dersen,
ISIKONTROL:
         read 1,TERM
'         IF TERM=255 then TERM=0     '......çözüm bu işte
          if TERM<ISI1-0 then   
            LOW Role1          
          ELSE
            if ISI1<TERM+0 then HIGH ROLE1 
         ENDIF
        
RETURN


Daha sade bir program yazmak istersen mantığı değiştirmen gerekir.
Bütün kontrol kısmını çıkar yeniden yaz. Bilgi değiştiği zaman eeproma yazılsın ama ilk çalıştırmada bir kere programın başında eepromdan okunsun. Hepsi bu kadar.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Hocam ilginiz için teşekkür ederim

Programda değişiklik yaparak hiç bir şekilde microcode studioda derleyemiyorum "Fattal error :Out of memory "yani hafıza yok diyor programı nasıl derlemişler hala çözemedim aslında bence bu program için 16 f serisi yetersiz kalıyor 18 f serisi ile yapılması şart gibi görünüyor ama yine aynı şekilde basicdede 18 f serisi için program yazamıyorum bi ayarı yapılması gerekiyormuş. Protonda yazmam gerek programı

Ayrıca dün ilginç bir şeye şahit oldum aynı programı başka bi 877 yükleyince ısı kontrol kısmı çalıştı orada sorun yok ama lakin bu seferde nem kısmında sorun var nem kısmı olduğundan çok fazla değerler gösteriyor ve nem çıkışı daima bir konumunda
Motor kısmı ise biraz daha karışık ayarladığım zamanların dışında çalışıyor her dakikanın başında motorun çalışma süresini kaç saniyeye ayarlamışsam o kadar çalışıp duruyor. Şimdilik sorunlar bunlar inş çabucak çözüm getiririm

ete

Benimde derlemede bir sorunum yok. Sorun senin MCS ve PBP kurulumunda.
PBP yu C ana klasörüne kurman tavsiye edelir.
Çalıştığın dosya isimlerinde Türkçe karekter olmamalı. AYrıca yol (path) uzunluğu 65 karekteri geçmemelidir.
Verilen hata hafıza hatası değildir. Olsa bende de olurdu. Muhtemelen derleyicin eskidir.

Program bu hali ile 5800 civarında word  yer tutuyor. Makismum 8192 olması gerek sanırım.  Dolayısıyla hafıza ile ilgili bir sorun yok henüz.

Programda EXIT diye bir etiket var. Onu başka bir isimle değiştir.

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 EXIT   
            NEXT W
                 HATA=1
EXIT:


Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Tamam hocam deniyeyim şu anda bilgisayarımda microcode studio plus yüklü siz hangi versiyonunu tavsiye ediyorsunuz yada  yükleme ve kurulumda bana önereceğiniz bir konu varmı

ete

Hiç bir zaman Plus kullanmadım. Gereksiz. Onun yerine normal olan ve free olan MCS yi kullanıyorum.
MCS sadece bir editör ahım şahım bir fonksiyonu yok zaten. O olmuş bu olmuş fark etmez ama kullanmadığın özellikleri olan bir şeyi kullanmak yerine sade olanı tercih etmek daha akıllıca olmazmı?.

aşağıdaki linki incele.

https://www.picproje.org/index.php?topic=27652.0

Linke direk tıklarsan yüklemiyor. Onun yerine kopyala ve yapıştır yöntemini kullan. Adminlere duyurulur!!!!!!!!!!!!!!!!
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Hocam ne diyeyim allah sizden razı olsun Allah size uzun ve rahat bir ömür versin .Dediklerinizi uyguladım ve şimdi derleyebiliyorum  :) sayenizde bişeyler öğrendim

Mucit23

hocam şimdilik ısı ve nemde sorun kalmadı daha yeni devreyi çalıtırdım ısı ve nemde sorun yok şimdilik tek bir sorun kaldı cevirici motor kısmı motorda nedense ayarladığım saatler dışında çalışıyor her dakikanın vbaşında motorun çalışma süresini ne kadara ayarlamışsam o kadar çalışıyor ve duruyor anlayamadım hocam bu sorun için bana önereceğiniz bi değişiklik varmı sizceneden olabilir

ete

Motor Röle3' ilemi aktif oluyor?

Eğer öyle ise programın o kısmına birlikte bakalım;

DONUSEBAK:
           READ $0,SAYI
           READ $10,ZAMAN
           READ $11,ZAMAN1
           READ $12,ZAMAN2
           READ $13,ZAMAN3
           READ $14,ZAMAN4
           READ $15,ZAMAN5
             IF SAYI=1 THEN
             IF SAAT AND ZAMAN AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN1 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN2 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN3 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN4 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
            IF SAAT AND ZAMAN5 AND SN=0 THEN
           HIGH ROLE3
          ENDIF
          ENDIF
         RETURN

Bir defa aynı eeprom okuma sorunu burada da mevcut. Bunların hepsine okunan değer 255 ise değer=0  ilavesi gerekiyor.
Sonra;
Sence aşağıdaki komut ne anlama geliyor?
IF SAAT AND ZAMAN AND SN=0 THEN

Bence kullanım amacına ters gelen bir komut bu. Aslında anlamı Saat=1 ise ve Zaman=1 ise ve SN=0 ise Then demek oluyor.
Ama burada yanlış sonuçlara sebep olmakta bu komut. Bence sorun burada;
Ohalde doğrusu nedir?
             IF SAAT=ZAMAN  AND SN=0 THEN  HIGH ROLE3

Şeklinde olmalı. Açıklamak gerekir ise o andaki saat değeri ile motorun dönme saati eşit ise motor dönmeli.
Bu birinci zaman ve diğer zamanlar için aynı olmalıdır.

Kolay Gelsin
Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

hocam anlayamadım
Dediğiniz gibi motor röle 3 ile aktif oluyor burada epromdan okunan değerler için 255 olmasını önlemek için aşağıdaki gibimi yazılması gerekiyor

DONUSEBAK:
           READ $0,SAYI
           READ $10,ZAMAN
           READ $11,ZAMAN1
           READ $12,ZAMAN2
           READ $13,ZAMAN3
           READ $14,ZAMAN4
           READ $15,ZAMAN5
             IF SAYI=1 THEN
                 IF ZAMAN=255 THEN ZAMAN=0 
                 IF SAAT=ZAMAN  AND SN=0 THEN  
                 HIGH ROLE3
                 ENDIF
            
                 IF ZAMAN1=255 THEN ZAMAN1=0 
                 IF SAAT=ZAMAN1  AND SN=0 THEN  
                 HIGH ROLE3
                 ENDIF
                 
                 IF ZAMAN2=255 THEN ZAMAN2=0 
                 IF SAAT=ZAMAN2  AND SN=0 THEN  
                 HIGH ROLE3
                 ENDIF
                 
                 IF ZAMAN3=255 THEN ZAMAN3=0 
                 IF SAAT=ZAMAN3  AND SN=0 THEN  
                 HIGH ROLE3
                 ENDIF
                 
                 IF ZAMAN4=255 THEN ZAMAN4=0 
                 IF SAAT=ZAMAN4  AND SN=0 THEN  
                 HIGH ROLE3
                 ENDIF
                 
                 IF ZAMAN5=255 THEN ZAMAN5=0 
                 IF SAAT=ZAMAN5  AND SN=0 THEN  
                 HIGH ROLE3
                 ENDIF
          ENDIF
         RETURN


Eğer yanlış anlamadıysam kodun doğru yazılışı böyle olması gerekiyor

ete

Evet yadıkların doğru. İlk zaman ayarları yapılıncaya kadar bu ayarların sıfır yada sıfırdan farklı bir şekilde mesela hiç bir şekilde ulaşılamayan bir saat değerine 70 gibi bir değere eşitlenebilir. Sıfır yaparsan gece yarısı saat değeride sıfır olacağı için eşitlik sağlanabilir. Aslında hiç dokunmasan belki 255 de kalmaları daha uygunda olabilir . İnsan sesli düşününce bu kısımda epromdan okunan değerler 255 de kalabilir tabiiki ilk ayarı verinceye kadar. İlk ayar verinceye kadar motorun aktif olmamasını sağlamak lazım.
Emin olayım dersen 255 okunan değerleri 70 yap istersen.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Hocam dediklerinizi uyguladım fakat sorun  yine aynı şekilde belliki bizim farkedemediğimiz başka bir sorun var aslında yapamıyorsak eğer o kadar uğraşmanıza gerek yok hocam sizi fazla yormak istemiyorum.Benim için önemli olan ısı ve nemdi onlarda sorun kalmadı. motorda her dakikanın başında çalışyor bende çalışma süresini minimuna indiririm bu şekilde motor 4 saatte bir değilde her dakikanın başında adım adım hareket eder bu böylece 21 gün boyunca devam eder

ete

Sen sorunu tam olarak bana açıklarmısın. Ona göre bakayım.
Birde mümkünse pic'in eepromunu bir oku ve bana 0-10 adresleri arasında ne kayıtlı onlarıda söyleyiverki ona göre karşılaştırma yapabileyim.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Mucit23

Hocam sorunu tam olarak açıklayayım
programda ana menüden cevirici motor kısmına girdiğimiz zaman ilk önce motor açıkmı kapalımı onu şeçiyoruz, açığı seçtikten sonra motorun dönüş saatleri ni girmemiz isteniyor.
   kuluçka makinelerinde yumurtaların en az 4 saatte bir çevrilmesi gerekir buda 24 saatte 6 kez döndürülmesi anlamaına geliyor tekrar menüye dönersek ;
sırasıyla yumurtaların dönüş saatlerini giriyoruz
00,04,08,12,16,20
dönüş saatlerini bu şekilde giriyoruz yani bu şekilde saat 00 birkez döner durur saat 4 oldumu tekrar döne bu böylece devam eder
tekrar menü tuşuna bastığımızda bu seferde motorun kaç saniye boyunca çalışacağını girmemiz istenir bunu saniye cinsinden 0 ile 59 arasında bir sayı girilerek yapılır .
tüm ayarlamaları yaptıktan sonra normal çalışma moduna geri döndüğümüzde motorun ayarladığımız saatlerde değilde her dakikanın başında kaç saniye dönmesi gerekiyorsa o kadar dönüyor
Örnek vermek gerekirse
diyelimki saat 12:08:32 bu şekilde motor çalışmıyor ama saat 12:09:00 olduğu anda motor kaç saniye dönmesini istemişsek okadar dönüp duruyor bu her dakikanın başında tekrarlanıyor ana sorun budur hocam

yanlız bu eprom okuma işini anlamadım bunu nasıl yapıcam



ete

Sorunu anladım. Muhtemelen eeproma saat değil dakika değerleri kayıt edilmiş olmasın?.
Ama her dakika sıfırlandığında bu olay meydana geliyorsa sorun başka yerdedir bakayım.

Eepromu okumak için pici yerinden sök ve programlayıcıya tak. READ komutunu çalıştır ve eeprom değerlerine bak.
Orada sıfırncı adresten itibaren okuduğun değerleri bir yere not et. Bu değerler sorunun bulunması için önem arzediyor.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com