www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Preprost timer z AT89C2051 in BASCOM8051 DEMO

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3357
Aktiv.: 14.17
Kraj: Dragomer

PrispevekObjavljeno: Sob Mar 18, 2006 5:15 pm    Naslov sporočila:  Preprost timer z AT89C2051 in BASCOM8051 DEMO Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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