Saatin kurulması için: SET tuşuna basın. Köşeli parantez içini 00 da bırakıp MOD tuşu ile saat ayarına atlayın.Saati ayarladıktan sonra MOD tuşu ile dakika ve sırası ile Ay-Gün ve Yıl ayarlarını yapın. Sonunda SET tuşuna basıp ayar modundan çıkın.
Dikkat: [00] modu saat ayarı içindir. [01] ile [10] arası modlar alarmların SET edilmesi içindir.
Açma Alarmlarının Kululması: SET Tuşuna basın. Parantez içini 1. alarm için 1, 10. alarm için 10`a ayarlayın. MOD tuşu ile Saat, Dakika, Gün, Ay, Yıl ayarlarını yapıp SET tuşu ile Kayıt edin.
Kapatma Alamlarının Ayarlanması: SET Tuşuna basın. Parantez içini 1. alarmın kapatılması için 11`e 10. alarmın kapatılması için 20`ye getirin. MOD tuşu ile Saat, Dakika, Gün, Ay, Yıl ayarlarını yapıp SET tuşu ile kayıt edin
Alarmların Tek Tuşla İptal Edilmesi: Açılmış alarm var ise normal saat ekranında, Arttır ya da azalt tuşlarından birine basılması açık olan alarmları kapatır.
Alarm Saat isis devre şeması
ALRM-SAAT.bas yazılım içeriği
'**************************************************************** '* Name : ALARM-SAAT.BAS * '* Author : [ETE] * '* Notice : Copyright (c) 2005 [ETE] * '* : All Rights Reserved * '* Date : 11.05.2005 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** 'INCLUDE "modedefs.bas" @ DEVICE pic16F877 'işlemci 16F877 @ DEVICE pic16F877, WDT_on 'Watch Dog timer AÇIK @ DEVICE pic16F877, PWRT_ON 'Power on timer açık @ DEVICE pic16F877, PROTECT_OFF 'Kod KORUMA kapalı @ DEVICE pic16F877, HS_OSC 'HS osilatör kullanılacak '------------------------------------------------------------------------------ DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı? DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor? DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı? DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ? DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ? DEFINE LCD_RSBIT 2 'LCD RS bacağı Hangi Bite bağlı ? DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı? DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor '------------------------------------------------------------------------------ Define osc 10 ADCON1=7 'ADC GİRİŞLERİ DİGİTAL OPTION_REG.7=1 'Dahili pull-up lar iptal edildi PortA=0 TrisA=%00101111 PortB=0 TrisB=%00000010 PORTD=0 TRISD=0 PORTC=0 TRISC=0 '------------------------------------------------------------------------------ SYMBOL SET=PORTA.0 SYMBOL MODE=PORTA.1 SYMBOL DOWN=PORTA.2 SYMBOL UP=PORTA.3 Symbol SCL=PORTB.0 SYMBOL SDA=PORTB.1 SYMBOL ISIK=PORTC.0 symbol BUZER=PORTC.1 SIMDI VAR WORD ZAMAN VAR WORD SN var byte Y_SN VAR BYTE DAK var byte Y_DAK VAR BYTE ESKIDAK VAR BYTE SAAT var byte Y_SAAT VAR BYTE GUN VAR BYTE Y_GUN VAR BYTE HGUN VAR BYTE 'HAFTANIN GÜNÜ Y_HGUN var byte AY var byte Y_AY VAR BYTE YIL var BYTE Y_YIL VAR BYTE ESKYIL VAR BYTE TAMYIL var BYTE TEMP VAR BYTE ARA VAR BYTE ONLAR VAR BYTE BIRLER VAR BYTE SURE VAR BYTE SIRA VAR BYTE YER VAR BYTE AKTIFA VAR BYTE AKTIFB VAR BYTE LED var byte '------------------------------------------------------------------------------ LCDOUT $FE,$68,$0E,$11,$10,$10,$10,$15,$0E,$4 'Ç dataları Numarası 5 LCDOUT $FE,$70,$00,$0E,$10,$0E,$02,$1C,$0C,$00 'ş dataları NUMARSI 6 DİR LCDOUT $FE,$78,$0,$0,$0C,$4,$4,$4,$e,$0 'ı dataları NUMARSI 7 DİR clear lcdout $FE,1 PAUSE 200 SURE=180 'WRITE 0,255 READ 0,TAMYIL IF TAMYIL=255 THEN TAMYIL=8 WRITE 0,TAMYIL ENDIF READ 2,SIRA IF SIRA=255 THEN SIRA=1:WRITE 2,SIRA ENDIF Y_SN=0 rEAD 5,AKTIFA READ 6,AKTIFB IF AKTIFA=255 THEN AKTIFA=0:WRITE 5,AKTIFA:PAUSE 10 ENDIF IF AKTIFB=255 THEN AKTIFB=0:WRITE 6,AKTIFB:PAUSE 10 ENDIF '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ BASLA: 'PAUSE 100 GOSUB SAAT_OKU GOSUB EKRAN PAUSE 200 IF PORTD>0 or (PORTC & %11000000)>63 then IF UP=0 or DOWN=0 then PORTC=0:PORTD=0 ENDIF endif IF SET=0 THEN AYAR IF (ESKIDAK=DAK) THEN TEKRAR ESKIDAK=DAK GOSUB ALARM_KONTROL PORTD=AKTIFA:PORTC=AKTIFB TEKRAR: GOTO BASLA '-------------------------ALT PROGRAMLAR--------------------------------------- AYAR: YER=0:ISIK=0 lcdout $FE,$0E GOSUB SAAT_OKU Y_DAK=DAK Y_SAAT=SAAT Y_GUN =GUN Y_HGUN=HGUN Y_AY =AY Y_YIL =YIL GOSUB EKRAN1 WHILE SET=0 WEND PAUSE SURE SIRA_BELIRLE: IF MODE=0 THEN HOURA IF SET=0 THEN SONA IF UP=0 THEN YER=YER+1 IF YER=21 THEN YER=20 ENDIF IF DOWN=0 THEN YER=YER-1 IF YER=255 THEN YER=0 'SIRA=0 İSE GERÇEK ZAMAN SAATİ 8583'E KAYIT EDİLECEK ENDIF IF YER>0 THEN GOSUB ALARM_OKU GOSUB EKRAN1:LCDOUT $FE,$82 'SIRA>0 İSE ALARM EEPROME KAYIT EDİLECEK. PAUSE SURE GOTO SIRA_BELIRLE HOURA: WHILE MODE=0 WEND HOUR: IF MODE=0 THEN MINA IF SET=0 THEN SONA IF UP=0 THEN Y_SAAT=Y_SAAT+1 IF Y_SAAT=24 THEN Y_SAAT=0 ENDIF IF DOWN=0 THEN Y_SAAT=Y_SAAT-1 IF Y_SAAT=255 THEN Y_SAAT=23 ENDIF GOSUB EKRAN1:LCDOUT $FE,$86 PAUSE SURE GOTO HOUR MINA: WHILE MODE=0 WEND MINUTE:IF MODE=0 THEN TAKA IF SET=0 THEN SONA IF UP=0 THEN Y_DAK=Y_DAK+1 IF Y_DAK=60 THEN Y_DAK=0 ENDIF IF DOWN=0 THEN Y_DAK=Y_DAK-1 IF Y_DAK=255 THEN Y_DAK=59 ENDIF GOSUB EKRAN1:LCDOUT $FE,$89 PAUSE SURE GOTO MINUTE TAKA: WHILE MODE=0 WEND TAKVIM: IF MODE=0 THEN AYA IF SET=0 THEN SONA IF UP=0 THEN Y_GUN=Y_GUN+1 IF Y_GUN=32 THEN Y_GUN=1 ENDIF IF DOWN=0 THEN Y_GUN=Y_GUN-1 IF Y_GUN=0 THEN Y_GUN=31 ENDIF GOSUB EKRAN1:LCDOUT $FE,$C1 PAUSE SURE GOTO TAKVIM AYA: WHILE MODE=0 WEND MONTH: IF MODE=0 THEN YILA IF SET=0 THEN SONA IF UP=0 THEN Y_AY=Y_AY+1 IF Y_AY=13 THEN Y_AY=1 ENDIF IF DOWN=0 THEN Y_AY=Y_AY-1 IF Y_AY=0 THEN Y_AY=12 ENDIF GOSUB EKRAN1:LCDOUT $FE,$C4 PAUSE SURE GOTO MONTH YILA: WHILE MODE=0 WEND YEAR: IF MODE=0 THEN GUNA IF SET=0 THEN SONA IF UP=0 THEN Y_YIL=Y_YIL+1 IF Y_YIL=100 THEN Y_YIL=0 ENDIF IF DOWN=0 THEN Y_YIL=Y_YIL-1 IF Y_YIL=0 THEN Y_YIL=99 ENDIF GOSUB EKRAN1:LCDOUT $FE,$C7 PAUSE SURE GOTO YEAR GUNA: WHILE MODE=0 WEND HAFGUN:IF MODE=0 THEN SONA IF SET=0 THEN SONA IF UP=0 THEN Y_HGUN=Y_HGUN+1 IF Y_HGUN=8 THEN Y_HGUN=1 ENDIF IF DOWN=0 THEN Y_HGUN=Y_HGUN-1 IF Y_HGUN=255 THEN Y_HGUN=7 ENDIF GOSUB EKRAN1:LCDOUT $FE,$CA PAUSE SURE GOTO HAFGUN SONA:IF YER=0 THEN KAYIT GOSUB ALARM_KAYIT GOTO BASLA '------------------------------------------------------------------------------- EKRAN: LCDOUT $FE,2," " LCDOUT DEC2(SAAT),":",DEC2(DAK),":", dec2(SN)," " ' LCDOUT DEC2 (SAAT),":",DEC2 (DAK)," S=",DEC2 SIMDI,"Z=",DEC2 ZAMAN LCDOUT $FE,192,dec2(GUN),"-",dec2(AY),"-",dec2(YIL+TAMYIL) ARA=HGUN DORT: select case ARA case 1 lcdout $fe,$c9,"Pazar " case 2 lcdout $fe,$c9,"Pazrtsi" case 3 lcdout $fe,$c9,"Sal",7," " case 4 lcdout $fe,$c9,5,"ar",6,"amb" case 5 lcdout $fe,$c9,"Per",6,"emb" case 6 lcdout $fe,$c9,"Cuma " case 7 lcdout $fe,$c9,"Cumarts" end select RETURN EKRAN1: 'BU EKRAN SAAT AYARINDA KULLANILAN İLK EKRAN LCDOUT $FE,2,"[",dec2 YER,"]" LCDOUT $FE,$0C," " LCDOUT DEC2(Y_SAAT),":",DEC2(Y_DAK),":", DEC2(SN) LCDOUT $FE,192,dec2(Y_GUN),"-",dec2(Y_AY),"-",dec2(Y_YIL+TAMYIL) ,$FE,$0E ARA=Y_HGUN GOTO DORT '------------------------------------------------------------------------------- KAYIT:WHILE set=0 wend LCDOUT $FE,$0C 'REG_2 'SANIYE <0:5> TEMP=Y_YIL+TAMYIL 'REG_3 'DAKİKA <0:5> TAMYIL=4*(TEMP/4 ) 'REG_4 'SAAT <0:5> Y_YIL=TEMP-TAMYIL 'REG_5 'GUN <0:5> ; YIL <6:7> WRITE 0,TAMYIL 'REG_6 'AY <0:4> ; HAFTANIN GUNU <5:7> DAKHESAP: TEMP=Y_DAK:GOSUB HESAP Y_DAK=ONLAR+BIRLER SAATHESAP: TEMP=Y_SAAT:GOSUB HESAP Y_SAAT=ONLAR+BIRLER IF TEMP>12 THEN Y_SAAT.6=1 GUNHESAP: TEMP=Y_GUN:GOSUB HESAP Y_YIL=Y_YIL<<6 Y_GUN=Y_YIL+ONLAR+BIRLER AYHESAP: TEMP=Y_AY:GOSUB HESAP Y_HGUN=Y_HGUN<<5 Y_AY=Y_HGUN + ONLAR + BIRLER I2CWRITE SDA,SCL,160,2,[Y_SN,Y_DAK,Y_SAAT,Y_GUN,Y_AY] GOSUB SAAT_OKU lcdout $fe,1 GOTO BASLA HESAP: ARA=(TEMP/10) ONLAR=ARA<<4 BIRLER=TEMP-(ara*10) RETURN '------------------------------------------------------------------------------- SAAT_OKU:ESKYIL=YIL I2CREAD SDA,SCL,161,2,[SN,DAK,SAAT,GUN,AY] YIL.1=GUN.7 YIL.0=GUN.6 IF ESKYIL=3 AND YIL=0 THEN TAMYIL=TAMYIL+4 WRITE 0,TAMYIL ENDIF TEMP=AY HGUN=TEMP>>5 SN=SN&%00111111 TEMP=DAK:gosub BUL:DAK=TEMP TEMP=SAAT&%00111111:GOSUB BUL:SAAT=TEMP TEMP=GUN&%00111111:GOSUB CEVIR:GUN=TEMP TEMP=AY&%00011111:GOSUB IKI:AY=TEMP RETURN CEVIR: ONLAR=TEMP & 48 UC: ONLAR=(onlar>>4)*10 BIR: BIRLER=TEMP & %1111 TEMP=ONLAR+BIRLER RETURN BUL:ONLAR=(TEMP>>4)*10 GOTO BIR IKI: ONLAR=ay & 16 GOTO UC '------------------------------------------------------------------------------- ALARM_KONTROL: '------------------Alarm açma kontrolu-------------------------- SIMDI=YIL+AY+GUN+SAAT+DAK YER=1 GOSUB ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD | %00000001 YER=2 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD | %00000010 YER=3 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD | %00000100 YER=4 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD | %00001000 YER=5 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD | %00010000 YER=6 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD | %00100000 YER=7 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD | %01000000 YER=8 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD | %10000000 YER=9 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTC | %01000000 YER=10 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTC | %10000000 '--------------------ALARM KAPATMA KONTROLU ---------------------------------- YER=11 GOSUB ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD & %11111110 YER=12 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD & %11111101 YER=13 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD & %11111011 YER=14 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD & %11110111 YER=15 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD & %11101111 YER=16 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD & %11011111 YER=17 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD & %10111111 YER=18 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTD & %01111111 YER=19 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTC & %10111111 YER=20 gosub ALARM_OKU IF SIMDI=ZAMAN THEN PORTD=PORTC & %01111111 IF (PORTD=AKTIFA) AND (PORTC=AKTIFB) THEN CIK AKTIFA=PORTD:AKTIFB=PORTC WRITE 5,AKTIFA:PAUSE 10:WRITE 6,AKTIFB:PAUSE 10 CIK: RETURN ALARM_KAYIT: IF YER>SIRA THEN WRITE 2,YER:PAUSE 10 ENDIF temp=yer*8 WRITE TEMP,Y_SAAT:PAUSE 10 WRITE TEMP+1,Y_DAK:PAUSE 10 WRITE TEMP+2,Y_GUN:PAUSE 10 WRITE TEMP+3,Y_AY :PAUSE 10 WRITE TEMP+4,Y_YIL:PAUSE 10 RETURN ALARM_OKU: temp=yer*8 READ TEMP,Y_SAAT:IF Y_SAAT>23 THEN Y_sAAT=0 READ TEMP+1,Y_DAK:IF Y_DAK>59 THEN Y_DAK=0 READ TEMP+2,Y_GUN:IF Y_GUN>31 THEN y_GUN=1 READ TEMP+3,Y_AY :IF Y_AY>12 THEN Y_AY=1 READ TEMP+4,Y_YIL:IF Y_YIL>99 THEN Y_YIL=0 ZAMAN=Y_YIL+Y_AY+Y_GUN+Y_SAAT+Y_DAK RETURN end
Alarm Saat Uygulamasına ait picbasic pro ve proteus dosyası;
Şifre-Pass: 320volt.com
Yayım tarihi: 2010/08/06 Etiketler: alarm saat devresi, microchip pic projeleri, pcf8583 saat, picbasic pro alarm
saat saniyesi neden 10’ncu saniyeden sonra 16 saniye’ye zıplıyor?
Bir sürü saat projesi tasarladım ama hiç birisini fiziki olarak yapmadım.
Buda onlardan bir tanesi idi. Gerçi bu projeyi istek üzerine yapmıştım ve yanlış hatırlamıyorsam birileri bunu yaptı ve sorun yok idi.
Bu zıplama olayı gerçek devredemi yoksa simulasyondamı oluyor?.
Gerçi fark etmez ama simulasyonda oluyor ise normaldir.
Gerçek devrede oluyor ise muhtemelen saat kristalinden yada saat entegresinden oluyordur.
Başka da bir diyeceğim yok maalesef.
Program bayağı eski neredeyse 5 yıldan fazla oldu bunu yapalı. Biraz daha acemilik yıllarımda yapılmış bir proje diyebilirim. O yüzden programa şöytle bir baktım. Her bir program çevrimi 1 sn (1000 ms) içinde yapılmalı. Baktım o kadar vakit alacak bir komut yok programda.
Başlarda bir ;
PAUSE 200 koymuşum gerekirse bunu kaldırabilirsin.
Kolay Gelsin
Ete