Timer probléma
Timer probléma
SZiasztok!
Elképzelhető az, hogy a Start Timer0 parancs nem működik a BASCOM 1.11.8.3-ban??? ATTINY2313-al akartam használni, de nem működött! Ha nem használom a Start Timer0 és Stop Timer0 parancsokat, akkor működik az idősítés, amúgy nem....
Köszi Peti
Elképzelhető az, hogy a Start Timer0 parancs nem működik a BASCOM 1.11.8.3-ban??? ATTINY2313-al akartam használni, de nem működött! Ha nem használom a Start Timer0 és Stop Timer0 parancsokat, akkor működik az idősítés, amúgy nem....
Köszi Peti
Ez az a bizonyos kód:
8.3-ban nem megy, 8.7-ben megy...
Kód: Egész kijelölése
$regfile = "attiny2313.dat"
$crystal = 8000000
Config Timer0 = Timer , Prescale = 1024
On Timer0 Timeout:
Stop Timer0
Led Alias Portd.6
Config Led = Output
Enable Interrupts
Enable Timer0
Start Timer0
Do
Loop
Timeout:
Toggle Led
Return
End
Az után nincs kettőspont. és felesleges utáns a STOP timer0 is. Ugyanis az INTek nincsenek engedélyezve ekkor még.
Kód: Egész kijelölése
On Timer0 Timeout
Nekem más érdekes problémám van a timerekkel.
Már több AVR-en is ugyanazt tapasztaltam, és nem értem, hátha egyszerű a megoldás.
Konkrét példa : Az órajel 7372800 Hz
A timer konfigurálása : Config Timer1 = Counter , Edge = Rising , Prescale = 1024
Vagyis 1024-es előosztó.
A 16 bites timert beállítom 62656-ra, majd indítom a számolást. Ugyebár a túlcsordulásig van 2879 lépés, amit 2879*(1/(7372800/1024)) sec kellene legyen. Vagyis nagyjából 0.4 sec kellene legyen. Viszont ez így mind a Tiny45-ön, és a Mega8-on is 0.1secre jön ki. Mintha az előosztó csak 256-ot osztana, vagy az órajel lenne pont a négyszerese. Ha más értékű előosztást állítok be, az eredmény akkor is mindig ugyenez, ez a négyszeres szorzó megvan. Ez miért van ? Megköszönném ha valaki megmondaná !
Már több AVR-en is ugyanazt tapasztaltam, és nem értem, hátha egyszerű a megoldás.
Konkrét példa : Az órajel 7372800 Hz
A timer konfigurálása : Config Timer1 = Counter , Edge = Rising , Prescale = 1024
Vagyis 1024-es előosztó.
A 16 bites timert beállítom 62656-ra, majd indítom a számolást. Ugyebár a túlcsordulásig van 2879 lépés, amit 2879*(1/(7372800/1024)) sec kellene legyen. Vagyis nagyjából 0.4 sec kellene legyen. Viszont ez így mind a Tiny45-ön, és a Mega8-on is 0.1secre jön ki. Mintha az előosztó csak 256-ot osztana, vagy az órajel lenne pont a négyszerese. Ha más értékű előosztást állítok be, az eredmény akkor is mindig ugyenez, ez a négyszeres szorzó megvan. Ez miért van ? Megköszönném ha valaki megmondaná !
Kicsit foglalkoztam a problémával, és rájöttem.
A BASCOM valamiért nem kezeli jól az előosztó beállításait. Nem tudom miért, érdekes a dolog. De ha a mega8 regisztereit olvasom, akkor egyértelműen látszik, hogy pl. az 1024 helyett 256-ot állít be, a 64 helyett viszont 8-at... Most már csak azt nem tudom hogy miért. Van valakinek ötlete ?
A másik érdekes dolog, hogy a mega8 timer0-t nem tudtam beüzemelni, nem indul. Ennek még nem nézegettem meg a regisztereit, de lehet ennek is ilyen gondja van. HELP ME ! :-))
A BASCOM valamiért nem kezeli jól az előosztó beállításait. Nem tudom miért, érdekes a dolog. De ha a mega8 regisztereit olvasom, akkor egyértelműen látszik, hogy pl. az 1024 helyett 256-ot állít be, a 64 helyett viszont 8-at... Most már csak azt nem tudom hogy miért. Van valakinek ötlete ?
A másik érdekes dolog, hogy a mega8 timer0-t nem tudtam beüzemelni, nem indul. Ennek még nem nézegettem meg a regisztereit, de lehet ennek is ilyen gondja van. HELP ME ! :-))
Üdv!
Lenne néhány kezdő kérdésem az időzítő használatáról:
-mi a különbség a timer0, timer1, timer2 között?
-ha 1/100 sec-os lépésekben szeretném az egyik lábra érkező frekit mérni és persze mellette futna a progi más része (pl.:adc kiértékelés), akkor a megszakítással, hogy oszthanám meg a feladatokat? (ATm16, 16mHz)
Lenne néhány kezdő kérdésem az időzítő használatáról:
-mi a különbség a timer0, timer1, timer2 között?
-ha 1/100 sec-os lépésekben szeretném az egyik lábra érkező frekit mérni és persze mellette futna a progi más része (pl.:adc kiértékelés), akkor a megszakítással, hogy oszthanám meg a feladatokat? (ATm16, 16mHz)
Timer 012:
Külön időzítők. T0 : 8bites, T1 8 v. 16bites, T2 jellmzően 8 bites v. hiányzik. lsd AVR adatlapjában...
Feladatmegosztás:
Az ilyen mérés az HWből megy,nem csak a kiértékelése visz időt....
16Mill utasításba belefér...
1/100sec alatt 16M/100 utasítás fut le....
Szóval Ne fél attól, hogy lassú a chip...
1-2 usec feldolgozási késés sztem belefér....
Külön időzítők. T0 : 8bites, T1 8 v. 16bites, T2 jellmzően 8 bites v. hiányzik. lsd AVR adatlapjában...
Feladatmegosztás:
Az ilyen mérés az HWből megy,nem csak a kiértékelése visz időt....
16Mill utasításba belefér...
1/100sec alatt 16M/100 utasítás fut le....
Szóval Ne fél attól, hogy lassú a chip...
1-2 usec feldolgozási késés sztem belefér....
Az űr hidege legyen veletek!
Tanácsot szeretnék kérni! Mivel nem tisza a TIMER/COUNTER működése, az alábbi progi sem úgy táncol, ahogy én piszkálom a PORTB0-t.
Nem akar frekit számolni
:
.
.
.
Config Timer0 = Counter , Edge = Falling , Prescale = 1024
Dim Fordulat As Byte
On Counter0 Freki
Enable Counter0
Start Counter0
.
.
.
Freki:
Fordulat = Counter0
Locate 1 , 1
Lcd "For:" ; Fordulat
Waitms 100
Return
.
.
.
Tanácsot szeretnék kérni! Mivel nem tisza a TIMER/COUNTER működése, az alábbi progi sem úgy táncol, ahogy én piszkálom a PORTB0-t.
Nem akar frekit számolni
:
.
.
.
Config Timer0 = Counter , Edge = Falling , Prescale = 1024
Dim Fordulat As Byte
On Counter0 Freki
Enable Counter0
Start Counter0
.
.
.
Freki:
Fordulat = Counter0
Locate 1 , 1
Lcd "For:" ; Fordulat
Waitms 100
Return
.
.
.