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.
Xmega Timer 32 bit
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
- tomaszdko
- Posty: 78
- Rejestracja: 06 gru 2018, 19:58
Re: Xmega Timer 32 bit
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)
- Pikczu
- Posty: 392
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: Xmega Timer 32 bit
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
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
- tomaszdko
- Posty: 78
- Rejestracja: 06 gru 2018, 19:58
Re: Xmega Timer 32 bit
Zrobiłeś ?
Znalazłem swój stary kod , pokombinuj scalajac wyniki dwóch timerów w zmienną dword.
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
Znalazłem swój stary kod , pokombinuj scalajac wyniki dwóch timerów w zmienną dword.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- 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
- tomaszdko
- Posty: 78
- Rejestracja: 06 gru 2018, 19:58
Re: Xmega Timer 32 bit
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ł.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- 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
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Xmega Timer 32 bit
Bartek przerwał pisanie jednego programu o północy a o piątej wstał i znowu pisze ahahahaha
Pozerkam i pomyślę później.
Pozerkam i pomyślę później.
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: Xmega Timer 32 bit
Witam - dziękuje za pomoc, program po testuje w sobotę niedzielę ostatni praca zawodowa absorbuje dużo czasu.
pozdrawiam Jacek.
pozdrawiam Jacek.