 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3357 Aktiv.: 14.17 Kraj: Dragomer
|
Objavljeno: Sob Mar 18, 2006 5:15 pm Naslov sporočila: Preprost timer z AT89C2051 in BASCOM8051 DEMO |
|
|
Projekt, ki ga je pripel Silvo pod 'Nekaj preprostih zadev s PIC-em' me je vspodbudil,
da tudi jaz dam mojo paralelo njegovemu 'Stopniščnemu avtomatu'. Tudi jaz pozabljam ugašati
luči, prav zares sem se lotil dela pa takrat, ko je žena, ko smo bili v mestu, rekla,
da je nabrž pozabila izklopiti likalnik, in smo seveda takoj šli domov pogledat, ali ni hiša
že v plamenih, (Ni bila, ampak likalnik je res bil vključen.) in tudi,
ko sem enkrat se vrnil iz nekajdnevnega izleta in našel v kleti pozabljeno prižgano luč.
Z AT89C2051 in BASCOM8051 sem naredil timer, prav za prav sem jih naredil že tri, s katerim
s pritiskom na tipko vklopim ali izklopim neko zadevo, če pa jo pustim vklopljeno,
se sama izklopi po preteku programiranega časa.
Program izgleda tako:
Koda: |
$regfile = "89c2051.dat"
$crystal = 12000000
Rele Alias P3.7 'Rele je priklopljen na ta pin preko tranzistorja
Tipka Alias P3.3 'Tipka vezana na P3.3 na maso in 'poolup' upor na +5V:
' Koncept
'
' Rele indirektno upravlja stevec minut z imenom 'Minute'
' Če je stanje števca 0 je rele izklopljen, sicer je vklopljen.
' Stanje števca se zmanjšuje vsako minuto za 1 vse do 0
' S spreminjanjem vrednosti spremenljivke Minute, indirektno
' vplivamo na rele
'
' Napravo upravljamo s tipko:
' Če pritisnemo na tipko, ko je števec Minute na 0 in rele izklopljen,
' tedaj postavimo števec Minute na 60 in indirektno vkopimo rele za eno uro.
' Če pritisnemo na tipko, ko števec Minute ni na 0 in je rele vklopljen,
' tedaj postavimo števec Minute na 0 in indirektno izklopimo rele.
' Čas merimo s pomočjo časovne prekinitve, timer interrupt:
' Če je frekvenca krislata f je timerenota 12/f
' Do prekinitve pride po
' 1 timerenot krat vrednost load pri mode je 2
' 32 timerenot krat vrednost load pri mode je 0
' 256 timerenot krat vrednost load pri mode je 1
'
' Pri frekvenci kristala 12Mhz je timerenota 1 usec
' 32 (=timer 0) * 250 (load vrednost) * 125 (števec prekinitev) = 1000000 usec = 1 sek
Config Timer0 = Timer , Gate = Internal , Mode = 0
On Timer0 Titi
Load Timer0 , 250
Enable Timer0
Start Timer0
Enable Interrupts
Dim Sekunde As Byte
Dim Minute As Byte 'krmili rele!
Do
' upravljanje s časom
If Sekunde > 59 Then
'Tukaj smo na začetku vsake minute
Sekunde = Sekunde - 60
If Minute <> 0 Then
Decr Minute
End If
End If
' krmiljenje releja v odvisnosti od spremenljivke Minute:
If Minute <> 0 Then
Reset Rele 'vklopi rele
Else
Set Rele 'izklopi rele
End If
' Za odtipavanje tipke uporabi Bascom ukaz Debounce, ki sam ugotavlja
' prehod iz stanja 'tipka ni pritisnjena' v stanje 'tipka je pritisnjena'
' in tudi poskrbi za odksakovanje kontaktov
Config Debounce = 25
' Če je tipka prešla v stanje 'Tipka pritisnjena' tedaj
' skoči na naslov Tipkarut:
Debounce Tipka , 0 , Tipkarut
' sicer preskoči ta del programa:
Goto Izzatipkarut
Tipkarut:
If Minute = 0 Then
Minute = 60 'Tukaj se določi čas avtomatskega izklopa v minutah
Else
Minute = 0
End If
Izzatipkarut:
Loop
Titi:
Dim Tistevec As Byte
Load Timer0 , 250 'Štejemo prekinitve
inc Tistevec
If Tistevec > 124 Then 'Če smo prešteli 125 prekinitev tedaj:
Tistevec = 0
inc sekunde
End If
Return |
_________________ Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|