Jelgenerátor AVR-el
Timer0-n nincs COUNTER! Ez a külső órajelet/impulzust számlálna.
Órajel: Clock (quartz)
Prescale: 4-16-256 stb.
A Timer számlálja a Clock/Prescale-t. Azaz 16 MHz Clock és Prescale=4 esetén 4 MHz órajelet.
Timer0 számol startérték(0)-tól 256-ig. Ekkor van INT/túlcsordulás!
A túlcsordulási rutinban a kezdőérték beállítható. Innen számol (a háttérben!) a Timer... és ha eléri a 256 értéket, akkor újra Interruptot okoz....
Timer 1 esetén 0...65536-ig van a számolás...
Órajel: Clock (quartz)
Prescale: 4-16-256 stb.
A Timer számlálja a Clock/Prescale-t. Azaz 16 MHz Clock és Prescale=4 esetén 4 MHz órajelet.
Timer0 számol startérték(0)-tól 256-ig. Ekkor van INT/túlcsordulás!
A túlcsordulási rutinban a kezdőérték beállítható. Innen számol (a háttérben!) a Timer... és ha eléri a 256 értéket, akkor újra Interruptot okoz....
Timer 1 esetén 0...65536-ig van a számolás...
Robert:
Mostmár kezdem érteni, hogy halvány lila gőzöm mi történik.
Megkérhetlek, hogy leírd hogyan számolom ki a prescale meg a timer értékét egy példán keresztül, hogy ne magam húzzam ki a képleteket mert úgy gondolom jól úton járom de mégse müködik...
Mondjuk rá:
ATtiny2313 Timer1 ha jól értettem neki van counter-e Timer0 meg Time1-en is.
Crystal 8Mhz
és a portb.1 lábon szeretném villogtatni a LED-em minden 1s-be.
Előre is köszi.
itt a kódom amivel játszmm de nemigen haladok előre és a ledem villog de nem tudom sehogy se előre meghatározni, hogy olyan időközökbe villogjon ahogy én akarom.
Mostmár kezdem érteni, hogy halvány lila gőzöm mi történik.
Megkérhetlek, hogy leírd hogyan számolom ki a prescale meg a timer értékét egy példán keresztül, hogy ne magam húzzam ki a képleteket mert úgy gondolom jól úton járom de mégse müködik...
Mondjuk rá:
ATtiny2313 Timer1 ha jól értettem neki van counter-e Timer0 meg Time1-en is.
Crystal 8Mhz
és a portb.1 lábon szeretném villogtatni a LED-em minden 1s-be.
Előre is köszi.
itt a kódom amivel játszmm de nemigen haladok előre és a ledem villog de nem tudom sehogy se előre meghatározni, hogy olyan időközökbe villogjon ahogy én akarom.
Kód: Egész kijelölése
$regfile = "ATtiny2313.DAT"
$crystal = 1000000
$hwstack = 32
$swstack = 10
$framesize = 32
Config Portb.2 = Output
Config Timer1 = Timer , Prescale = 256
On Timer1 Letelt
Enable Timer1
Enable Interrupts
Timer1 = 49911
Start TIMER1
Do
!NOP
Loop
Letelt:
Toggle Portb.2
Stop Timer1
Return
Kód: Egész kijelölése
$regfile = "ATtiny2313.DAT"
$crystal = 1000000
$hwstack = 32
$swstack = 10
$framesize = 32
Config Portb.2 = Output
Config Timer1 = Timer , Prescale = 256
On Timer1 Letelt
Enable Timer1
Enable Interrupts
'Timer1 = 49911
Start TIMER1
Do
'!NOP <ilyen utasitan NINCS
Nop
Loop
Letelt:
Timer1 = 49911
'tulcsordulas utan adsz erteket neki. Igy 49911->65536-ig szamol
Toggle Portb.2
'Stop Timer1
'ha megallitod a timert, akkor mitol menne tovabb????
Return
1 MHz / 256 / (65536-49911) / 2 = ~0.1 Hz 'lassu!
A 49911 helyett 54000 körülit adj.
Kód: Egész kijelölése
'Timer Idözités számitás
'Szimulátorban futatható
$regfile = "ATtiny2313.DAT"
'$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 24
$swstack = 24
$framesize = 24
$sim
'(
Igy a menete:
1 MHz / 256 / (65536-49911) / 2 = ~0.1
')
'Er_sec = Qvarc / Prescales /(tword - Kivon) / Togle
'Változók:
Const Qvarc = 8000000
Const Prescales = 256 ' Prescale = 1|8|64|256|1024
Const Kivon = 54000
'Állandók:
Const Togle = 2
Const Tword = 65536
'Számítás:
Const T = Qvarc / Prescales
Const Tt = Tword - Kivon
Dim Er_sec As Word
Er_sec = T / Tt
Er_sec = Er_sec / Togle
Print " Timer1 = " ; Tt
Print "Eredmeny Sec= " ; Er_sec
End 'end program
Itt a kép az AVRcalc-ról és nem tudom mit nem allítottam jól be de nem kapom a ti értekeketeket:
TCNT1L = 0xee
TCNT1H = 0x85
Crystal = 8MHz
Prescale = 256
Képlet kapu48 alapján:
Timer1 = TCNTH *256 + TCNTL
---------------------------------------
Needed timer = 1000ms = 1s
Units = ms
Timer1 = 133*256+238
Timer1 = 34286
Na mmost, 65536 - 34286 = 31250
Tehat a Timer1 = 31250 és innen számol 65536-ig.
Ez a számláló minden kb. 9s kapcsolja ki és be a ledet...
Bocsi de nem értem miért...
TCNT1L = 0xee
TCNT1H = 0x85
Crystal = 8MHz
Prescale = 256
Képlet kapu48 alapján:
Timer1 = TCNTH *256 + TCNTL
---------------------------------------
Needed timer = 1000ms = 1s
Units = ms
Timer1 = 133*256+238
Timer1 = 34286
Na mmost, 65536 - 34286 = 31250
Tehat a Timer1 = 31250 és innen számol 65536-ig.
Ez a számláló minden kb. 9s kapcsolja ki és be a ledet...
Bocsi de nem értem miért...
Ezzel kezdődnek a fordítónak szánt utasítások!
Help: http://avrhelp.mcselec.com/index.html
Help: http://avrhelp.mcselec.com/index.html
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2011. március 28. hétfő, 14:24-kor.