Timer

Sve vezano za mikrokontrolere

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
Maki
Odlično uznapredovao
Odlično uznapredovao
Posts: 766
Joined: 02-07-2012, 12:54

Timer

Post by Maki »

Pozdrav forumaši !
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 ! :D
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 :lol:
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
Maki
Odlično uznapredovao
Odlično uznapredovao
Posts: 766
Joined: 02-07-2012, 12:54

Re: Timer

Post by Maki »

Kao što sam rekao, još dvije fotke: fotka 3, fotka 4
Maki
Odlično uznapredovao
Odlično uznapredovao
Posts: 766
Joined: 02-07-2012, 12:54

Re: Timer

Post by Maki »

Evo dvije malo bolje fotke, u prilogu vam je dostupna shema i hex. Kod je na prvom postu.
Softver pisan u MicroCode studio-u.
Fotka1
Fotka2
Attachments
Timer.rar
Shema, hex
(45.82 KiB) Downloaded 363 times
Post Reply