Da izbacim još jedan staro pečeni projekat. Naime radi se o timeru za osvijetljivač. Koristio sam PIC16F628A, LCD 16x1, nekoliko otpornika, tipkala i naravno relej+tranzić.
Izbacujem ga tek sad jer sam tek ove godine sad u 7 mjesecu napisao kod kako spada. Međutim, izgubio sam PCB i shemu. No mogu bez problema ponovno nacrtati shemu, što vjerovatno i budem
Što se preciznosti tiče, koristi unutarnji timer1 koji svakih 500ms aktivira prekid. Trebao bi biti vrlo točan.
Maks. postavljeno vrijeme može biti 30 min, točnije 29:59 . Ima 3 tipkala. Jedno komjim se podižu sec, a jednim kojim se podižu min. Treće tipkalo služi za start. Odnosno dugim držanjem tipkala oko 1-2 sec. Pokreče se odbrojavanje, aktivira se relej. Nakon što vrijeme prođe relej se jednostavno deaktivira. Nije dodana opcija da se prekine odbrojavanje, no lako se može dodati.
Također pamti zadnje postavljeno vrijeme. Npr. 3min i 30 sec. Prilikom prvog pokretanja vrijeme je postavljeno na 0min i 0sec.
PIC16F628A radi na 4MHz odnosno 1MIPS. Kod vam je dostupan !
Kako bih mogao upravljati timerima, upotrijebio sam darrell taylor interrupts. Vrlo vrlo korisna stvar.
Ukoliko je netko zainteresiran kako program radi, rade volje ću mu pojasnit.
Smjestio sam ga u projekte sa dokumentacijom, reko ima kod, pa znači da ima dokumentaciju
Hahaha, malo se šali, kad nađem vremena, nacrtat ću i shemu.
Ako tko ima kakva pitanja, tu sam.
E da fotke: fotka 1, fotka 2.
Još ću postavit dvije fotke u novi post jer mi izbacuje error ako postaim 4 linka u jedan post.
KOD
Code: Select all
'****************************************************************
'* Name : Timer.BAS *
'* Author : Maki *
'* Notice : Copyright (c) 2013 Maki *
'* : All Rights Reserved *
'* Date : 14.7.2015 *
'* Version : 1.2 *
'* Notes : - *
'* : *
'****************************************************************
'===================
wsave var byte $70 system
INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
INCLUDE "ReEnterPBP.bas" ' Include if using PBP interruptsINCLUDE "DT_INTS-14.bas" ' Base Interrupt System
DEFINE LCD_BITS 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 1
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
DEFINE LCD_LINES 2
pause 100
LCDout $FE,1
Pause 500
'===================
Define osc 4
cmcon = 7
Trisa = 255
Trisb = 0
'Definiranje varijabli
'=======================
brojac var byte
brojac=0
symbol start = porta.1
symbol m = porta.0
symbol s = porta.2
symbol k = portb.1
minu var byte
secu var byte
minu = 4
secu = 30
'=======================
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, _Prekid, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
T1CON = 49 ; Prescaler = 8, TMR1ON
@ INT_ENABLE TMR1_INT ; enable Timer 1 interrupts
LCDOUT $fe,1,"Timer"
pause 1000
PORTB = 0
t1con.0=0
a:
t1con.0=0
k = 0
read 1, minu
read 2, secu
if secu >59 then secu = 0
if minu >29 then minu = 0
LCDOUT $fe,1,"Time:"
lcdout $FE, $C0,dec minu ,":", dec secu
pause 100
if start = 0 then
pause 250
if start = 0 then
t1con.0=1
goto main
enable
endif
endif
if m = 0 then
pause 100
minu = minu + 1
if Minu = 30 then
minu = 0
endif
write 1, minu
lcdout $fe,1,"Min:",dec minu
endif
if s = 0 then
pause 100
secu = secu+1
if secu = 60 then
secu = 0
endif
write 2,secu
lcdout $fe,1,"Sec:",dec secu
endif
goto a
Main:
k = 1
if brojac = 2 then
brojac = 0
if secu = 1 and minu = 0 then
k = 0
lcdout $fe,1,"KRAJ !"
pause 1000
goto a
endif
if secu = 0 then
secu = 60
if minu > 0 then
minu = minu - 1
endif
endif
secu = secu - 1
lcdout $fe,1,"Time:"
lcdout $FE, $C0,dec minu,":",dec secu
endif
goto main
Prekid:
Brojac = brojac+1
@ INT_RETURN