avatar_gevv

Otomatik kümes kapısı açma sistemi

Başlatan gevv, 30 Haziran 2016, 16:00:47

blueboard

Ete hocam, dediklerinizi yaptığımı sanmakla birlikte yine bir yerlerde hata yapmış olmalıyım. Program derlenmiyor bile. Dosyanın son halini ekliyorum.

ete

Program aşağıdadır kopyalayıp derleyebilirsin.

Ete
@ DEVICE PIC16F628A
@ DEVICE PIC16F628A , WDT_OFF 
@ DEVICE PIC16F628A , pwrt_on
@ DEVICE PIC16F628A ,protect_on 
@ DEVICE PIC16F628A , cpd_on 
@ DEVICE PIC16F628A , MCLR_off
@ DEVICE PIC16F628A , INTRC_OSC_NOCLKOUT '(Dahili osilatör kullanılıyor)

DEFINE   OSC 4           ' 4MHz 
CMCON = 7                ' Disable on-chip comparator, PORTA in digital mode


TRISA = %00000000           
PortA=0
PORTB = %00000000
TRISB = %00000000

OPTION_REG.7 = 1  'Dahili pull-up lar pasif yapıldı

SN      VAR BYTE 
SECOND  VAR BYTE
ESKISN  VAR BYTE
DAK     VAR BYTE
MINUTE  VAR BYTE
SAAT    VAR BYTE
HOUR    VAR BYTE
HAFGUN  VAR BYTE 56
WEEK    VAR BYTE 57
AYGUN   VAR BYTE 58
DAY     VAR BYTE 59  
AY      VAR BYTE 60
MONTH   VAR BYTE
YIL     VAR BYTE
YEAR    VAR BYTE

ACSAAT1  VAR BYTE  
ACSAAT2  VAR BYTE


ACDAK1  VAR BYTE   
ACDAK2  VAR BYTE



KAPATSAAT1 VAR BYTE
KAPATDAK1 VAR BYTE
KAPTEMP1 VAR BYTE


KAPATSAAT2 VAR BYTE
KAPATDAK2 VAR BYTE
KAPTEMP2 VAR BYTE

  
TEMP    VAR BYTE 61
TEMP1   VAR byte
TEMP2    VAR byte



SIMDI   VAR WORD 
AKTIF   VAR BYTE 

ACGUNSALI   VAR BYTE 62
ACGUNCARS   VAR BYTE
ACGUNCTESI   VAR BYTE
ACGUNPAZAR   VAR BYTE

ACIK    VAR BIT

n var byte
SYMBOL ROLE1=porta.0
SYMBOL ROLE2=porta.1
SYMBOL SCL =portb.4
SYMBOL SDA =portb.5   
PAUSE 250

READ 0,AKTIF
data @0,255
IF AKTIF=255 THEN  'DS1307 DE PİL OLURSA İLK ÇALIŞTIRMADA ZAMAN DEĞERLERİNİ GİRERSEN SAAATI AYARLAYACAK SONRADAN UNUTMAYACAK 
 SN=50
 saat=20
 DAK=59 
 HAFGUN=3 'HAFGUN=1 PAZAR GÜNÜ DOĞRU
          'HAFGUN=7 DE CUMARTESİ İÇİN DOĞRU
           'HAFGUN 3 SALI İÇİN  DOĞRU
          'HAFGUN 4 ÇARŞAMBA İÇİN  DOĞRU          
 AY=6
 AYGun=22    'AYIN KAÇI İSE BURAYA YAZILACAK
 YIL=22      'YIL 2022'UN YALNIZCA 22 'si  YAZILACAK
 GOSUB ZAMANYAZ
 AKTIF=1
 WRITE 0,AKTIF:pause 10   'AKTIF=1 İSE SAAT AYARLI DEMEKTİR BİR KERE AYARLANACAK
ENDIF

ACIK=0



'SENARYO ŞU ŞEKİLDE:
'HER SALI VE CUMARTESİ GÜNÜ SAAT 21.00'DA ROLE1 AKTİF OLACAK      
'HER ÇARŞAMBA VE PAZAR GECESİ SAAT 02.00 'DA ROLE1 KAPANACAK

'HER ÇARŞAMBA VE PAZAR GECESİ SAAT 04.00'DA ROLE 2 AKTİF OLACAK
'HER ÇARŞAMBA VE PAZAR SABAHI SAAT 08.00'DA ROLE 2 KAPANACAK
 
BASLA:
      GOSUB ZAMANOKU
      
      IF HAFGUN=3 OR HAFGUN=7 THEN   'SALI VE CUMARTESİ GÜNÜ   
        IF SAAT=>21 and DAK=0 AND SN=0 AND ROLE1=0 THEN ROLE1=1  
      ENDIF
      
      IF HAFGUN=4 OR HAFGUN=1 THEN     'ÇARŞAMBA VE PAZAR GÜNÜ
          IF SAAT=>2 AND DAK=0 AND SN=0 AND ROLE1=1 THEN ROLE1=0
          IF SAAT=>4 AND SAAT<8 AND DAK=0 AND SN=0 THEN ROLE2=1
          IF SAAT=>8 AND DAK=0 AND SN=0 AND ROLE2=1 THEN ROLE2=0          
      ENDIF
      
      PAUSE 200
      GOTO BASLA
      
ROLEL1:      
      IF SIMDI=TEMP1 THEN GOSUB ACTIR1  'SALI GÜNÜ TEMP1= 21.00'DA BİRİNCİ RÖLEYİ AÇ
       
      RETURN
      
ACTIR1:      'SALI VE CUMARTESİ GÜNÜ 21.00'DA RÖLE1 ÇEKECEK
IF ACIK=1 THEN RETURN
ROLE1=1  
ROLE2=0                    
ACIK=1   
RETURN 
      

ACTIR2:     
      IF ACIK=1 THEN RETURN
      ROLE1=0  
      ROLE2=1                    
      ACIK=1   
      RETURN   
      
ROLEL2:   'ÇARŞAMBA GÜNÜ  VE PAZAR GÜNÜ ROLE2 ÇEKECEK
      
       
      IF SIMDI=KAPTEMP1 THEN  ROLE1=0
      IF SIMDI=TEMP2 THEN GOSUB ACTIR2 ' 
      IF SIMDI=KAPTEMP2 THEN  ROLE2=0  '
      ACIK=1 
      RETURN

 
ZAMANOKU:
        I2CRead SDA,SCL,$D0,$00,[SECOND,MINUTE,HOUR,WEEK,DAY,MONTH,YEAR]',TEMP]                  
        sn =((SECOND>>4) & $0F)*10+(SECOND & $0F)
        IF SN=ESKISN THEN RETURN
        dak=((MINUTE>>4) & $0F)*10+(MINUTE & $0F)
        SAAT=((HOUR>>4) & $03)*10+(HOUR & $0F) 
'        HAFGUN=((WEEK>>4) & $03)*10+(WEEK & $0F) 
        HAFGUN=WEEK & %111:IF HAFGUN=0 THEN HAFGUN=1:GOSUB ZAMANYAZ
        AYGUN=((DAY>>4) & $03)*10+(DAY & $0F)
        AY= ((MONTH>>4) & $01)*10+(MONTH & $0F)
        YIL= ((YEAR>>4) & $0F)*10+(YEAR & $0F)          
        ESKISN=SN    
        RETURN 
             
ZAMANYAZ: 
        SECOND =(SN DIG 1)<<4+SN DIG 0       'SN=
        MINUTE=(DAK DIG 1)<<4+DAK DIG 0      ' DAK=
        HOUR=(SAAT DIG 1)<<4+SAAT DIG 0      ' SAAT=
        WEEK=HAFGUN&%111    
        DAY=(AYGUN DIG 1)<<4+AYgun DIG 0     ' AYGUN=
        MONTH = (AY DIG 1)<<4 + AY DIG 0     ' MONTH=
        YEAR =(YIL DIG 1)<<4+YIL DIG 0       ' YIL=
        I2CWrite SDA,SCL,$D0,$00,[SECOND,MINUTE,HOUR,WEEK,DAY,MONTH,YEAR,0]
        PAUSE 10
        RETURN 

blueboard

Ete hocam, farkındayım,sizi çok fazla uğraştırdım. Hakkınız ödenmez. Acemiliğimi mazur görün. Derlemeye çalıştığımda hata mesajları alıyorum. " WARNING Line 9 : Bad Token "". şeklinde 5  adet hata mesajı geliyor. Ne yapmam gerekir?

elektro77

Evet kodlardaki sorun ne ise bendeki mcs yi direk kilitliyor. Msc yanıt vermiyor.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Versiyon farklılığından olsa gerek zira bende hiç hata vermeden derleniyor.
Sen en iyisi direk verdiğim hex dosyasını kullan.
İlişiktedir.
Ete

blueboard

Ete hocam, dosyayı yükledim,test ediyorum.Şu ana kadar sorunsuz çalıştı. Şimdiden teşekkür ediyorum. Programın 1 haftalık döngüyü tamamlamasını bekliyorum.

Powered by EzPortal