Strona 1 z 1
Xmega Timer 32 bit
: 20 lis 2020, 22:03
autor: Jacek
Witam - ma ktoś może przykład jak połączyć kaskadowo 2 timery 16 bit aby uzyskać licznik 32bity.
W podprogramie który używam do obrotomierza przy enkoderze 720imp/obr powyżej 1350 obrotów timer przeskakuje ( jest 16 bit i liczy do 65535 ) i zaczyna liczyć od zera, w helpie jest napisane że zamiast NORMAL należy ustawić SPLIT ale nie wiem jak to zapisać dalej żeby licznik miał większą pojemność.
pozdrawiam Jacek.
Re: Xmega Timer 32 bit
: 24 lis 2020, 10:37
autor: tomaszdko
Nie wiem po co enkoder robisz na timer , mi lepiej na przerwaniach. Kiedyś się bawiłem z timer 32bit i musisz użyć Event System aaa i działa to podobno tylko z timer klasy 0 czyli z pierwszymi na porcie . Link
https://www.avrfreaks.net/forum/timer-32-bit-xmegado przykładu gdzie możesz się sugerować (ostatni post)
Re: Xmega Timer 32 bit
: 24 lis 2020, 20:40
autor: Pikczu
Jacek,
Tak na szybko bo niestety nie mam czasu.
Wszytko jest w PDF-ie podane jak na tacy.
Wystarczy przeczytać (wklej sobie w google translate)
http://ww1.microchip.com/downloads/en/A ... oc8045.pdf
Re: Xmega Timer 32 bit
: 07 gru 2020, 21:54
autor: tomaszdko
Zrobiłeś ?
Znalazłem swój stary kod , pokombinuj scalajac wyniki dwóch timerów w zmienną dword.
Config Event_system = Dummy , Mux0 = TCf0_OVF ,Mux1 = portf.0 , Digflt0 = 1 ' ,Mux1 = portf.0
Enable Interrupts
config portf.0=input : Config Xpin = Portf.0 , Outpull = PULLUP , Sense = FALLING
Portf_int0mask = &B0000_0001 'przerwanie dla pinu 0
Enable Portf_int0 , Lo
Config Tcf0 = Normal, Prescale = E1 , Event_source = E1 , Event_action = Capture'
Tcf0_per =65535'32MHz/1024 = 31250 --> One Second Tick
On Tcf0_ovf Tf0_isr 'Setup overflow interrupt of Timer/Counter C0 and name ISR
Enable Tcf0_ovf , Lo 'Enable overflow interrupt in LOW Priority
start tcf0
Config Tcf1 = Normal , Prescale = E0 , Event_source = E0 , Event_action = Capture'
Tcf1_per =65535'32MHz/1024 = 31250 --> One Second Tick
On Tcf1_ovf Tf1_isr 'Setup overflow interrupt of Timer/Counter C0 and name ISR
Enable Tcf1_ovf , Lo 'Enable overflow interrupt in LOW Priority
start tcf1
Pinf.0 wyzwalasz impuls , zliczany w Tcf0 a po przepełnieniu Tcf0 wzrasta licznik Tcf1 . Wyniki liczników scalasz w dword i masz wynik dla enkodera
Re: Xmega Timer 32 bit
: 08 gru 2020, 7:50
autor: tomaszdko
Trochę uporządkowałem ten testowy kod na bardziej wyraźny (skoki do pod programów nie potrzebne), dodałem scalanie word na dword. Nie wiem jak zliczać w przód i w tył (z tego co czytałem to jest taka opcja ale nigdy jej nie używałem . Wystarczył mi enkoder na przerwaniach i zmienna integer). Bartek pewnie będzie wiedział.
Dim x as dword at &H2100
Dim B1 As word at x Overlay
Dim B2 As word at x +2 Overlay
Config Event_system = Dummy , Mux0 = TCf0_OVF ,Mux1 = portf.0 , Digflt0 = 1
config portf.0=input : Config Xpin = Portf.0 , Outpull = PULLUP , Sense = FALLING
Config Tcf0 = Normal, Prescale = E1 , Event_source = E1 , Event_action = Capture
Tcf0_per =65535
Enable Tcf0_ovf , Lo
start tcf0
Config Tcf1 = Normal , Prescale = E0 , Event_source = E0 , Event_action = Capture
Tcf1_per =65535
Enable Tcf1_ovf , Lo
start tcf1
do
b1=TCf0_CNT
b2=TCf1_CNT
locate 1,1
lcd x
loop
end
Re: Xmega Timer 32 bit
: 08 gru 2020, 7:56
autor: niveasoft
Bartek przerwał pisanie jednego programu o północy a o piątej wstał i znowu pisze ahahahaha
Pozerkam i pomyślę później.
Re: Xmega Timer 32 bit
: 08 gru 2020, 20:41
autor: Jacek
Witam - dziękuje za pomoc, program po testuje w sobotę niedzielę ostatni praca zawodowa absorbuje dużo czasu.
pozdrawiam Jacek.