otomatik çiçek sulama projesi bazı sorunlar var lütfen yardım edin!

Başlatan Mucit23, 30 Haziran 2010, 13:09:25

Mucit23

anlamıyorum hocam gerekli herşeyi yaptım ama nedense bi türlü programı yerine oturturamadım 20 mhz ye ayarladım ama nem sensörü çalışmıyor DS18B20 de yanlış ölçüyor çok yüksek gösteriyor yaptığım programın son olarak 20 mhz ye ayarlanmış haliye vereyim belki programla ilgili bi fikriniz veya tavsiyeniz olabilir
'****************************************************************
'*  Name    : KULUÇKA.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2010 [Desıgn by Ferhat YOL]         *
'*          : All Rights Reserved                               *
'*  Date    : 21.07.2010                                        *
'*  Version : 2.0                                               *
'*  Notes   :Bu program Kuluçka makinesi için Ferhat YOL        *
'*           Tarafından yazılmıştır                           *                                 
'****************************************************************
DEFINE OSC 20
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, HS_OSC

TRISA=%111111
TRISB=%00000001
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	4
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
DEFINE SHIFT_PAUSEUS 50 	
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
    Y        VAR    BIT
    SY       VAR    BIT
    SAYI     VAR    BYTE 
    SAYAC    VAR    BYTE
    AYAR     VAR    BYTE
    TERM     VAR    BYTE
    NEM      VAR    BYTE
    KONTROL  VAR    BYTE
    ORTAK    VAR    BYTE	   
    ISI1     VAR    BYTE       
    ISI2     VAR    BYTE       
    U1       VAR    BYTE         
    U2       VAR    BYTE
    C0       VAR    BYTE
    Z        VAR    BYTE
    SAY      VAR    BYTE
    ZAM      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=PORTC.7
    
    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,$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 $09,DUR:IF DUR=255 THEN DUR=0
READ $02,NEM:IF NEM=255 THEN NEM=0
READ $12,SY
READ $10,ZAM:IF ZAM=255 THEN ZAM=0
READ $11,A:IF A=255 THEN A=1
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 HAVAKONTROL
        GOSUB ISIKONTROL
        GOSUB RUTKONTROL
        IF SY=0 THEN
        GOSUB DONUSEBAK
        ENDIF
        IF MENU=1 THEN 
        GOTO AYAR_MENUSU
        WHILE MENU=1:WEND
        ENDIF
        
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,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+ISI*10)/20
RETURN
'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:
         if TERM<ISI then   
          LOW Role1
        ENDIF
        if ISI<TERM then          
         HIGH ROLE1               
       Endif
           
RETURN 
'----------------------------RUTKONTROL-----------------------------------------         
RUTKONTROL:
           if NEM<U1 then   
         HIGH Role2
         ELSE               
          LOW ROLE2
        ENDIF
RETURN

HAVAKONTROL:
FARK=ISI1-ISI
IF FARK.Bit15=1 then FARK=~FARK 
IF FARK>1 then 
   ROLE4=1
ELSE
   ROLE4=0
ENDIF
 
RETURN
'-------------------------------------------------------------------------------
AYAR_MENUSU:
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN 
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=7 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=6
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 
GOTO TERM_KONTROL 
ENDIF
CASE 1
lcdout $fe,$c0,"    NEM AYALARI     " 
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND 
GOTO NEM_KONTROL
ENDIF
CASE 2
lcdout $fe,$c0,"   CEViRiCi MOTOR   "
LCDOUT $FE,$94,"       AYARI       "
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO MOT_AYAR
ENDIF
CASE 3
lcdout $fe,$c0,"   SAAT-TARiH-GUN   "
LCDOUT $FE,$94,"        AYARI       "   
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO ZAMANAYARI
ENDIF
CASE 4
lcdout $fe,$C0,"   MANUEL OLARAK    "
lcdout $fe,$94,"   MOTORU CEVIRME   "
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO MANUEL
ENDIF
CASE 5
lcdout $fe,$c0,"     GUN AYARI      " 
LCDOUT $FE,$94,"                    "     
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
CASE 6
lcdout $fe,$c0,"    MENUDEN CIKIS   " 
LCDOUT $FE,$94,"                    "   
IF MENU=1 THEN BASLANGIC
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          
''''''''''''''''''''''''''''''''''''''''         
MOT_AYAR:
        WHILE MENU=1:WEND
        GOSUB TEMIZLE
        READ $12,SY
MOTOR_AYAR:
       lcdout $fe,$80,"MOTOR DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"
           IF MENU=1 THEN
           WRITE $12,SY:PAUSE 2
           GOTO M_ZAMANI
           ENDIF
           IF YUKARI=1 then SY=0
           IF ASAGI=1 THEN SY=1
           
           SELECT CASE SY
           CASE 0
           LCDOUT $FE,$94,3
           CASE 1
           LCDOUT $FE,$D4,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.."
       AYAR=1
       SYC=0
        PAUSE 1000
        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 LiMiTi"
       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
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
    
     

yorulmaz06

Alıntı yapılan: mucit23 - 23 Temmuz 2010, 18:28:54
Hocam Allah sizden razı olsun siz olmasaydınız bunu çözmem imkansızdı.
şimdi hiç sorun çıkartmadan Derleniyor..

kuluçka makinasının ise son haliyle vereyim
'****************************************************************
'*  Name    : KULUÇKA.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2010 [Desıgn by Ferhat YOL]         *
'*          : All Rights Reserved                               *
'*  Date    : 21.07.2010                                        *
'*  Version : 2.0                                               *
'*  Notes   :Bu program Kuluçka makinesi için Ferhat YOL        *
'*           Tarafından yazılmıştır                           *                                 
'****************************************************************
DEFINE OSC 8
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC

TRISA=%111111
TRISB=%00000001
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	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
    GUN1     VAR    BYTE
    MEM      var    byte 
    ONLAR    VAR    BYTE
    BIRLER   VAR    BYTE
    Y        VAR    BIT 
    SAYAC    VAR    BYTE
    AYAR     VAR    BYTE
    TERM     VAR    BYTE
    NEM      VAR    BYTE
    KONTROL  VAR    BYTE
    ORTAK    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
    ZAM      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     PORTB.0
    CIKIS   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=PORTC.7
    
    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,$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: 
READ $07,GUN:IF GUN=255 THEN GUN=1
READ $01,TERM:IF TERM=255 THEN TERM=0
READ $09,DUR:IF DUR=255 THEN DUR=0
READ $02,NEM:IF NEM=255 THEN NEM=0
READ $0,SAYI:IF SAYI=255 THEN SAYI=0
READ $10,ZAM:IF ZAM=255 THEN ZAM=0
READ $11,A:IF A=255 THEN A=1
gosub ZAMAN_OKU 
           HIGH BUZER:PAUSE 50:LOW BUZER
 
           
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 EKRAN1
        GOSUB HAVAKONTROL
        GOSUB ISIKONTROL
        GOSUB RUTKONTROL
        IF MENU=1 THEN AYARMENUSU
        
goto BASLA       
'---------------------------------------EKRANA YAZ -----------------------------	
EKRAN1:	 
         GOSUB ZAMAN_OKU
         GOSUB DONUSEBAK
         GOSUB GUNEBAK
        lcdout $FE,$80,2,"=",DEC2 ISI1,",",DEC1 ISI2," A=",DEC2 ISI,",",DEC1 (FLOAT)," S=",DEC2 TERM,",",DEC1 A
        lcdout $FE,$C0,"ORTISI=",DEC2 ORTAISI,0,"C  NEM=%",DEC2 U1
        LCDOUT $FE,$94,"SAAT ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN," ",DEC2 GUN,".GUN"
        LCDOUT $FE,$D4,"TARIH ",DEC2 GUN1,"/",DEC2 AY,"/",DEC2 YIL
            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
         ENDIF
        RETURN
'''''''''''''''''MOTOR ÇALIŞ '''''''''''''''''             
DONUSEBAK:
         
         READ $10,ZAM
         IF ZAM=255 THEN ZAM=1
         
                 IF ZAM=1 AND DAK=0 AND SN=0 THEN
                 HIGH ROLE3
                 ENDIF

        IF ZAM=2 THEN
                 
                 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
                 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
                 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+ISI*10)/20
RETURN
'----------------------------ISI KONTROL----------------------------------------
ISIKONTROL:
         if TERM<ISI then   
          LOW Role1
        ENDIF
        if ISI<TERM then          
         HIGH ROLE1               
       Endif
           
RETURN 
'----------------------------RUTKONTROL-----------------------------------------         
RUTKONTROL:
           if NEM<U1 then   
         HIGH Role2
         ELSE               
          LOW ROLE2
        ENDIF
RETURN

HAVAKONTROL:
FARK=ISI1-ISI
IF FARK.Bit15=1 then FARK=~FARK 
IF FARK>1 then 
   ROLE4=1
ELSE
   ROLE4=0
ENDIF
 
RETURN
'-------------------------------------------------------------------------------
AYARMENUSU:
       WHILE MENU=1:WEND
       GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN 
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=6 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=5
ENDIF
GOSUB DURUM
IF CIKIS=1 THEN GOTO BASLANGIC
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,$c0,"  ISITICI AYARLARI  "
LCDOUT $FE,$94,"                    "
IF MENU=1 then 
WHILE MENU=1:WEND 
GOTO TERM_KONTROL 
ENDIF
CASE 1
lcdout $fe,$c0,"    NEM AYALARI     " 
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND 
GOTO NEM_KONTROL
ENDIF
CASE 2
lcdout $fe,$c0,"   CEViRiCi MOTOR   "
LCDOUT $FE,$94,"       AYARI       "
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO MOT_AYAR
ENDIF
CASE 3
lcdout $fe,$c0,"   SAAT-TARiH-GUN   "
LCDOUT $FE,$94,"        AYARI       "   
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO ZAMANAYARI
ENDIF
CASE 4
lcdout $fe,$C0,"   MANUEL OLARAK    "
lcdout $fe,$94,"   MOTORU CEVIRME   "
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO MANUEL
ENDIF
CASE 5
lcdout $fe,$c0,"     GUN AYARI      " 
LCDOUT $FE,$94,"                    "     
IF MENU=1 then 
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
END SELECT
RETURN

MANUEL:
GOSUB TEMIZLE 
MANU:
 lcdout $fe,$80,"MOTORU CALISTIRMAK "
 LCDOUT $FE,$C0,"iCiN YUKLARIYA     " 
 LCDOUT $FE,$94,"BASINIZ...          "
       IF CIKIS=1 then             
        WHILE CIKIS=1:WEND
         GOTO AYARLANDI
        ENDIF

        IF YUKARI=1 THEN
         lcdout $fe,$D4,"MOTOR CALISIYOR  " 
        HIGH ROLE3
        ELSE 
        lcdout $fe,$D4,"MOTOR KAPALI    " 
        LOW ROLE3
        ENDIF
        
GOTO MANU

GUNAYARI:
       GOSUB TEMIZLE
       WHILE MENU=1:WEND
       READ $07,GUN
GUNA:      
     LCDOUT $FE,$80,"GUNU AYARLA"  
     lcdout $FE,$C0,"GUN:",DEC2 GUN
     IF CIKIS=1 THEN AYARLANDI
        WHILE CIKIS=1:WEND
        IF YUKARI=1 THEN 
        GUN=GUN+1
        IF GUN=31 THEN GUN=1
        WHILE YUKARI=1:WEND
        ENDIF
        
        IF ASAGI=1 THEN 
        GUN=GUN-1
        IF GUN=255 THEN GUN=30
        WHILE ASAGI=1:WEND
        ENDIF
             
     GOTO GUNA          
''''''''''''''''''''''''''''''''''''''''         
MOT_AYAR:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $0,SAYI:SAYI=0
MOTOR_AYAR:

       lcdout $fe,$80,"MOTOR DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"  
           IF MENU=1 THEN M_ZAMANI
        WHILE MENU=1:WEND
           IF YUKARI=1 THEN 
           SAYI=SAYI+1
           WHILE YUKARI=1:WEND
           ENDIF
           IF SAYI=2 THEN SAYI=0 
           SELECT CASE SAYI
           CASE 0
           LCDOUT $FE,$94,3
           CASE 1
           LCDOUT $FE,$D4,3
           END SELECT 
        GOTO MOTOR_AYAR         
M_CALISMA:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $09,DUR
MOTO_CALISMA:
           IF CIKIS=1 THEN AYARLANDI
        WHILE CIKIS=1:WEND
       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 M_CALISMA
        
        lcdout $fe,$C0,"MOTORU ",DEC1 ZAM," SAATTE"
        lcdout $FE,$94,"BiR CEViREYiM"
GOTO MOTO_ZAMANI

                                                                                 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
 AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1
       LCDOUT $FE,$C0,"AYARLAR KAYDEDiLDi.."
       WRITE $0,SAYI 
       WRITE $10,ZAM
       WRITE $09,DUR
       WRITE $07,GUN
       WRITE $01,TERM
       WRITE $02,NEM
       WRITE $11,A
       AYAR=1
        PAUSE 1000
        GOSUB TEMIZLE
         goto AYARMENUSU        
TEMIZLE:
        lcdout $fe,1
 RETURN        
'-------------------------------------------------------------------------------
TERM_KONTROL:
       GOSUB TEMIZLE       
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 CIKIS=1 THEN
        WHILE CIKIS=1:WEND 
         GOTO AYARLANDI
        ENDIF                  
GOTO SET_AYAR  	
'-------------------------------------------------------------------------------
NEM_KONTROL:
       GOSUB TEMIZLE
NEM_KONT:  
       lcdout $fe,$C0,"NEM LiMiTi"
       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 CIKIS=1 THEN
        WHILE CIKIS=1:WEND 
         GOTO AYARLANDI
        ENDIF                  
         GOTO NEM_KONT 	
       RETURN
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
ZAMANAYARI:
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 GUN1,"/",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
 GUN1=GUN1+1
 IF GUN1=31 THEN GUN=1
 ENDIF
IF ASAGI=1 THEN
WHILE ASAGI=1:WEND 
 GUN1=GUN1-1
 IF GUN1=0 THEN GUN1=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
           AYAR=1
        gosub ZAMAN_YAZ
        GOSUB TEMIZLE
        GOSUB AYARLANDI
         goto AYARMENUSU       
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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
    
     

Yanlız dediklerinizi pek anlayamadım nasıl yapacağımı bilmiyorum isterseniz bi programa bakın belki daha iyi bi yöntem söyleyebilirsiniz
hocam bu program isiste düzgün çalışıyo menüye geç girmesi dışında birde gün ayarı sorunlu onun dışında bi sorunu yok
gün 1 yapmama rağmen ana ekranda dün 26.gün yazıyodu bugün 27.gün yazıyo zannedersem rtc den alıyo gün bilgisini
birde bu programın baskı devresini yaptınızmı öncekini editleyeyim dedim ama pek düzgün olmadı

Mucit23

son gönderdiğim mesajdaki projramdaki sorunlar çözülmüştür bunu kullanabilirsiniz ama osc frekansını 4 mhz ye düşürmelisiniz şimdilik 4 mhz de daha düzgün çalışıyor eğer imkanınız varsa program gereçk ortamda deneyip sonuçları bildirirseniz sorunlar hakkında bana daha yardımcı olur

Alfa

sayın mucit 23 devreyi kurup deneyecegim fakat şemada 452 var programda 877 hangisi dogru olanı?
isis cizimini ve kaynak kodunu bir arada verirsen iyi olur.

Mucit23

arkadaşlar programın son hali ile dosyalarını veriyorum kaynak kodu ve isis çizimleri mevcuttur sizden ricam eğer deneyecek olan arkadaşlar varsa bana gözlemlerini bildirmesini istiyorum bu verdiğim son haliyle çift sensörlü olandır simülasyonda saat biraz yavaş çalışıyor ama gerçekte normal hızıyla çalışacağını umuyorum
http://www.upload.gen.tr/d.php/s13/jof9xnfb/kulu__ka_son_hali.rar.html

yorulmaz06

Mucit23 hocam verdiğin isis bende çalışmadı iznin olursa bendekini vereyim emeklerin için teşekkürler

http://rapidshare.com/files/409384893/son.rar.html

Önümüzdeki günlerde devreyi kurup çalıştırmayı düşünüyorum ama  iki haftaan önce zor gibi işler nedeniyle. yapınca sonuçları yazarım buraya
bu arada geçtiğimiz cumartesi 24 bıldırcın yumurtasından 16 tanesi çıktı pazar günüde 43 tavuk yumurtasından 32 si çıktı
ama birde üzücü haber var bıldırcınlardan 4 tanesini kediye kaptırdık :( :-[

Mucit23

proteus olarak 7.6spo kullanıyorum belki ondan açamamışsındır benim için sorun değil herkes istediği gibi paylaşsın faydalansın bişeyler öğrensin istiyorum bu tür projelerden para kazanma gibi bi niyetim yok

yorulmaz06

şu anda makinamda kullandığım termostat devresi DS18B20 ve 16f628 ile yapıldı motor için ise küçük delikli plakete 16f628 koydum basit bide program yazmaya çalıştım saatte 1 kere  3 saniye motoru çalıştırıyo. makinanın kendiside eski bulaşık makinası

Alfa


yorulmaz06

1 adet 50 watt ampul birazda elektrikli battaniye rezistansı kullandım

Alfa

Bir arkadaş demiş ki;elk.battaniye rezinstansı ve 100w 2 adet ampül 1 ay boyunca 250 lira gelmiş fatura:) böyle bişey mümkün değil.sende ne alemde

yorulmaz06

Dikkat etmedim ama en fazla 20 tl farketmiştir.
Zaten makina 20 -30 saniye açık kalıyo 3 - 3,5 dakikada kapalı kalıyo
o arkadaş ya çok büyük makinası var yada yalıtımı kötü 2 tane 100w ampul fırın gibi yapar benim makinayı

Mucit23

Alıntı yapılan: ete - 24 Temmuz 2010, 18:17:01
Define komutları içinde yalnızca shiftout YADA shiftin komutlarını yavaşlatacak komut mevcut buda;
DEFINE SHIFT_PAUSEUS 50 'Slow down the Shiftin and Shiftout clock
şeklinde kullanılıyor.
Ama esas ayarlamayı yapan Define OSC 20 komutudur.
Bu komutu ilave etmedi isen sensörler çalışmayabilir. Ama ilave edersen sorunsuz çalışırlar.

Ete

merhabalar ETE hocam
hocam konu başlığından farklı ama size bişey sormak istiyorum ;
picin adc kanalları ile 3 fazlı sistemde her fazın gelirimini ölçüp ekrana yansıtmak istiyorum internette biraz araştırma yaparak 220 vot gelirimi aşağıdaki şema ile picin anlayacağı gelirime dönüştürebildim
[IMG]http://img411.imageshack.us/img411/4162/adszuap.jpg[/img]

Uploaded with ImageShack.us
ama ADC ile ölçyüğümüz ham değerini nasıl volt olarsk hesaplıyacam bunu bilmiyorum bu konuda bana yardımcı olursanız sevinirim ayrıca bu gibi yüksek voltaj ölçümü gereken yerlerde  True-RMS diye bir sistem kullanılıyormuş.İnternette biraz araştırma yaptım ama kayde değer bi kaynak bulamadım bu konuda sizin bi bilginiz varsa beni bilgilendirirseniz sevinirim

ete

Benzer bir işte ben 2 watt 5V luk bir trafo kullandım. Trafo çıkışını 5V seviyesine getirip onuda pic'e girerek (doğrultup) ölçüm yaptım.
Bu şekilde hem daha emniyetli hem daha stabil. Hesap şeklinde şöyle olabilir.
Pic'e 5V geldiğinde AC volt karşılığı 300V olsun.
Bu durumda 220V AC de pic ADC girişine daha düşük bir voltaj gelecektir.
Trafo seni yanıltmasın. Gerilim düştüğünde yada arttığında tarfo çıkışıda paralel artıp düşmektedir.

TRUE RMS bir alternatif akım sinyalinin ölçümünde onun DC karşılığınında değerlendirilmesi şeklinde diye biliyorum. Daha fazla bilgi için daha iyi bilen birisine sormanda yarar var. Nede olsa benim konum değil.
Ama sinüs işaretlerinde RMS çevirimi için şu formüller kullanılıyormuş.

    * RMS değeri = 0.707 x Tepe değeri
Bana kalırsa bu teorik bilgiler içinde kaybolma. Sana lazım olan şebeke voltajının değeri öyle değilmi.
Sonuçta multimetren ile ölçtüğünde 219V gibi bir değer alıyorsan aynı değeri pic devrende vermeli benim için esas olan budur.
Bunuda benim tarif ettiğim gibi yaparsan sonuç alırsın.

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

Mucit23

trafo benimde aklıma yattı aslında dediğiniz gibi daha emniyetli olur ama bu şekilde trafolar varmıdır yada sizin tarifinize uygun trafoyu nereden temin edebilirim