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 

Timer od 1 do 255 sekund z AT90(L)S2343

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Zbirka projektov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
tomzi007
Član
Član



Pridružen-a: Sob 12 Feb 2005 18:29
Prispevkov: 94
Aktiv.: 0.40
Kraj: Hoče

PrispevekObjavljeno: Čet Maj 31, 2007 11:09 pm    Naslov sporočila:  Timer od 1 do 255 sekund z AT90(L)S2343 Odgovori s citatom

Timer od 1 do 255 sekund z AT90(L)S2343

Če sem kdaj potreboval kakšen enostaven timer, sem v zel v roke 555 in si ga izdelal. Dokler se nisem začel ukvarjati s programiranjem mikrokontrolerjev. Pri 555 je njegov zakasnilni čas določala predvsem konstanta RC, kjer sta tudi velikost teh dveh elementov določala fizično velikost vezja. Poleg tega, če sem izdelal sekundni timer in sem kdaj kasneje potreboval recimo minutnega sem moral zamenjat ta dva elementa. Z timerjem ki ga predstavljam lahko nastavimo čas od 1 do 255 sekund z pogreškom +/- 0.5 % v celotnem območju.


Slika0:
Timer na testni ploscici. Mikrokontroler je skrit pod mocnostnim tranzistorjem (namesto bd 137 je uporabljen mosfet BUZ 11)

Slika 0a:
Timer na dlani

Ker sem raketni modelar in sem ponavadi timer potreboval za zakasnitev izmeta padala v raketi, je bila velikost vezja zelo pomembna. Pri timerjih z 555 je bila ta velikost določena predvsem z velikostjo elektrolitskega kondenzatorja, ki je bil tem večji čim večji zakasnilni čas smo potrebovali. Tako mi je prišlo na misel da bi si timer izdelal z mikrokontrolerjem. Uporabil sem Atmelov AVR mikrokontroler AT90(L)S2343, ki je osem pinski in ima 2k bajta programskega Flash pomnilnika, 128 bajtov RAM a, 128 bajtov EEPROM pomnilnika, 8 bitni timer, ima vgrajen RC oscilator in ima možnost programiranja v vezju (ISP- In System Programming). Priključke Mikrokontrolerja prikazuje slika 2.


Slika 2: Priključki mikrokontrolerja



Električno shemo prikazuje slika 1.Vezje za delovanje uporablja notranji RC oscilator, zato je uporabljeno malo elementov, tako, da lahko naredimo vezje zelo majhno, še posebej če uporabimo smd komponente.

Slika 1: Električna shema

Delovanje
Timerju najprej nastavimo čas od katerega bo odšteval. To storimo tako da vstavimo jumper in priklopimo napajanje. Led dioda bo začela utripat v sekundnem ritmu. Vsak utrip diode pomeni sekundo več. Ko imamo dovolj sekund izvlečemo jumper in takrat led dioda štirikrat na hitro utripne. To pomeni da je kontroler shranil nastavljene sekunde v eeprom. Čez tri sekunde nam kontroler z utripanjem led diode pokaže koliko sekund je shranil in tako lahko še enkrat preverimo če smo pravilno nastavili sekunde. Potem gre vezje v pripravljenost za merjenje in led dioda konstantno sveti. Jumper uporabljamo samo pri programiranju sekund, ko je vezje enkrat sprogramirano jumper ne sme biti več v vezju! Sedaj lahko tudi odklopimo napajanje in ko ga bomo spet prižgali bo šel timer v pripravljenost za merjenje. Odštevanje sprožimo z prekinitvijo tipke S1. Da smo smo uspešno začeli z odštevanjem nam kontroler pokaže tako, da ugasne led diodo. Po preteku nastavljenega časa se bo odprl tranzistor in nam vklopil naš porabnik med priključkoma A in B.

Še nekaj o programu
Program je napisan v Bascom-avr programskem jeziku. Poleg tega so k programu dodani komentarji, zato tu nebi posebej opisoval samega programa. Notranja ura RC oscilatorja teče s frekvenco 1MHz. Takšen podatek podaja proizvajalec. Zato moramo v bascomu uro nastavit na 1MHz.

Oznaka za ta mikrokontroler je AT(L)S2343-X

L- kontroler dela že pri napetosti 2.7V

X- pomeni frekvenca ure (v MHz) s katero dela procesor in lahko zavzame vrednosti 1,4 ali 10.

Da bi mikrokontroler za svojo uro uprabljal frekvenco internega RC oscilatorja mu je treba prej nastavit fuse bit RCEN. Kadar je ta bit na logični 0 je omogočen notranji RC oscilator. Kontroler z oznako AT90S2343-1 ima ta bit že tovarniško nastavljen na 0 pri ostalih dveh ga morate nastavit sami. Kako se to naredi je odvisno od programatorja, ki ga uporabljate.

Ko sem vezje testiral sem dobil vedno za približno 10% manjši čas od pričakovanega, zato sem v rutini Odstevanje dodal tri vrstice kjer sem nadomestil izgubljeni čas. Zato tudi prekinitvena rutina Tim0_isr šteje desetinke in ne sekunde. Tako je sedaj točnost vezja +/- 0.5 % kar pomeni +/- 0.05 sekunde pri desetih sekundah oz. +/- 1.27 sekunde pri 255 sekundah. Vezje sem testiral tudi temperaturno saj je znano, da je frekvenca notranjega RC oscilatorja odvisna tudi od temperature. Čas sem nastavil na 15 sekund, nato sem dal vezje za nekaj časa v hladilnik (cca 8 C) in izmerjen čas je bil 14.5 sekunde. Nato sem dal vezje še za nekaj časa v pečico (cca 80 C) in izmerjen čas je bil 15.5 sekunde. Tudi temperaturno je vezje zelo stabilno. Izvorno kodo programa si lahko naložite: timer.zip (4 kB, timer.bas, timer.hex, timer.bin).

Vezje je namenjeno štetju sekund, z malo predelave programa ga lahko uporabimo tudi za štetje minut. Poleg tega imamo še prost portb.0. Lahko bi na ta port dodali še en jumper in če bi bil ob priklopu napajanja vstavljen še ta jumper bi utripanje led diode pomenilo štetje minut... Takšna možnost predelave je prepuščena vam.



Program:

'************************************************************
' TIMER Z AT90(L)S2343
' Avtor: Tomaž Kogej, Marec 2002
'************************************************************

Dim I As Word , Clock As Byte , K As Word , T As Byte 'deklaracija spremenljivk

Config Pinb.1 = Input 'konfiguracija i/o pinov
Config Pinb.2 = Output
Config Pinb.3 = Input
Config Pinb.4 = Output
Config Timer0 = Timer , Prescale = 64 'timer je uporabljen kot časovnik, za takt
'uporablja urino frekvenco
'deljeno s 64

Stop Timer0 'timerja še ne potrebujemo
On Ovf0 Tim0_isr 'ob prelivu se izvede prekinitvena rutina tim0_isr
Enable Timer0 'omogoci timer
Enable Interrupts 'omogoci prekinitve

Clock = 0 'začetne vrednosti spremenljivk
T = 0
I = 0
K = 0

Set Portb.2 'ugasni led diodo

If Pinb.1 = 1 Then 'če je jumper vstavljen potem
Gosub Nastcas 'pojdi v rutino Nastcas
End If

Wait 1 'drugače počakaj sekundo
Reset Portb.2 'prižgi led diodo

Readeeprom T , 10 'preberi vrednost eeproma na lokaciji 10 in jo priredi spremenljivki T

'**********************************************
' glavna zanka; tu čakamo na proženje timerja
'**********************************************
Do
If Pinb.3 = 0 Then 'če je S1 razklenjen potem
Set Portb.2 'ugasni led dioido
Gosub Odstevanje 'in pojdi v rutino Odstevanje
End If 'če ne,
Loop 'ponovi vajo
End

'***********************************************
' Rutina Nastcas; tu nastavimo čas od katerega
' bo timer odšteval
'**********************************************

Nastcas:
Wait 1 'počakaj sekundo
Do
Set Portb.2 'ugasni led diodo
Wait 1 'počakaj sekundo
If Pinb.1 = 1 Then 'če je jumper vstavljen potem
Reset Portb.2 'prižgi led diodo
Waitms 100 'počakaj 0,1 sekunde
Set Portb.2 'ugasni led diodo

Incr T 'povečaj spremelnjivko T

Else 'če jumper ni več vstavljen
Exit Do 'pojdi ven iz do-loop zanke
End If
Loop

Writeeeprom T , 10 'zapiši vrednost spremenljivke T na lokacijo 10 v eepromu

Reset Portb.2 'štirikrat na hitro prižgi in ugasni led diodo
Waitms 100
Set Portb.2
Waitms 100
Reset Portb.2
Waitms 100
Set Portb.2
Waitms 100
Reset Portb.2
Waitms 100
Set Portb.2
Waitms 100
Reset Portb.2
Waitms 100
Set Portb.2
Waitms 100

Wait 3 'počakaj tri sekunde

'**********************************************
' v tej zanki timer pokaže nastavljeno vrednost
'**********************************************

Do
Set Portb.2 'ugasni led diodo
Wait 1 'počakaj sekundo
Reset Portb.2 'prižgi led diodo
Waitms 100 'počakaj 0,1 sekunde
Set Portb.2 'ugasni led diodo
Decr T 'zmanjšaj T
If T = 0 Then 'če je T enak 0 potem

Wait 1

Reset Portb.2 'štirikrat na hitro prižgi in ugasni led diodo
Waitms 100
Set Portb.2
Waitms 100
Reset Portb.2
Waitms 100
Set Portb.2
Waitms 100
Reset Portb.2
Waitms 100
Set Portb.2
Waitms 100
Reset Portb.2
Waitms 100
Set Portb.2
Waitms 100

Exit Do 'zapusti do-loop zanko
End If
Loop

Return 'in se vrni namesto od koder smo klicali rutino

'***********************************************************
' Rutina Odstevanje; tu timer odšteva nastavljeno vrednost
' in ko pride do nule proži tranzistor
'***********************************************************

Odstevanje:

Start Timer0 'poženi timer
I = T 'potrebna matematika za korekcijo časa
K = I * 11
I = I + K

Do

If I = 0 Then 'če je I enak 0 potem
Set Portb.4 'prižgi tranzistor Do 'in se zaciklaj......
Loop
End If 'če ne Loop 'ponovi vajo

'************************************************************
'Prekinitvena rutina tim0_isr; tu dobimo 0,1 sekundne impulze
'in zmanjšujemo spremenljivko I
'************************************************************
Tim0_isr:

Incr Clock 'vsakič ko se izvede rutina, povečaj clock
If Clock > 5 Then 'in ko je clock večji od 5, dobimo 0.1 sekunde
Clock = 0 'damo clock na nulo

Decr I 'in zmanjsamo I (vsake 0,1 sek)
End If
Return
Send mail to tomzi007@yahoo.com with questions or comments about this web site.
Copyright © 2000/2002 tomzi http://www.aplika.si/tomzi/tomzi.html
Last modified: marec 12, 2004



slika2.jpg
 Opis:
Slika 2
 Velikost datoteke:  33.14 KB
 Pogledana:  2 krat

slika2.jpg



uPtimer.jpg
 Opis:
slika 0
 Velikost datoteke:  27.27 KB
 Pogledana:  17 krat

uPtimer.jpg



HPIM0317.JPG
 Opis:
Slika 0a
 Velikost datoteke:  266.35 KB
 Pogledana:  24 krat

HPIM0317.JPG



slika1.jpg
 Opis:
Slika 1

Download
 Ime datoteke:  slika1.jpg
 Velikost datoteke:  13.49 KB
 Downloadano:  50 krat


_________________
Nebo je črno, Zemlja je modra... J.Gagarin
****************
Tomzijev page:
http://tomzi.org
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Zbirka projektov Č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: 482 dni


Powered by phpBB © 2001, 2005 phpBB Group