PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom: Xmega Timer -> Prescaler im Betrieb ändern?



Willa
09.11.2019, 22:19
Hi,
nach langer Pause benutze ich mal wieder Bascom für meinen xmega32a4. Ich möchte per Code den Prescaler eines Timers umstellen, ist das möglich? Ich finde den passenden Registernamen dafür nicht :-(. Vielleicht kann mir jemand helfen. Ziel ist es ein spezielles PWM "Doppelpuls" Signal zu erzeugen (siehe Oszi Foto)

Beispiel:
Funktionierender Code (in der isr des Timers)


Select Case Toggler
Case 0 :
Config Tcd0 = Normal , Prescale = 1
Tcd0_per = High_count
Case 1 :
Config Tcd0 = Normal , Prescale = 1
Tcd0_per = Low_count
Case 2:
Config Tcd0 = Normal , Prescale = 1
Tcd0_per = High_count
Case 3 :
Config Tcd0 = Normal , Prescale = 8
Tcd0_per = Pause_count
End Select
Ich möchte nun aber den Wert für den Prescale per Variable ändern können. Folgendes funktioniert aber NICHT:


[...]
dim High_prescale as Word
dim low_prescale as Word
dim pause_prescale as Word
[...]
Select Case Toggler
Case 0 :
Config Tcd0 = Normal , Prescale = High_prescale
Tcd0_per = High_count
Case 1 :
Config Tcd0 = Normal , Prescale = Low_prescale
Tcd0_per = Low_count
Case 2:
Config Tcd0 = Normal , Prescale = High_prescale
Tcd0_per = High_count
Case 3 :
Config Tcd0 = Normal , Prescale = Pause_prescale
Tcd0_per = Pause_count
End Select

Gibt es ein Register, in welches ich den Prescale Wert direkt schreiben kann? Danke für eure Tipps!!

34460

Willa
10.11.2019, 08:16
Die Lösung hat vielleicht etwas hiermit zu tun, aber ich finde keine Infos zu den entsprechenden Registern in Bascom :(
34462

- - - Aktualisiert - - -

Super, wenn vor dem Bäcker eine lange Schlange ist, dann kann man noch mehr googeln... Das hier wird hoffentlich die Lösung sein:


'----------COUNTER/TIMER----Subroutines-----------------------------------------
'TC0_ConfigClockSource
'Configures clock source for the Timer/Counter 0
'Clockselection [0 = OFF, 1 = DIV1, 2 = DIV2, 3 = DIV4, 4= DIV8, 5 = DIV64, 6 = DIV256, 7 = DIV1024, 8 = EventChannel 0 ....15 = Event Channel 7
Sub Tc0_configclocksource(byval Port As String , Byval Clockselection As Byte)
Select Case Port
Case "C": 'Port C
Select Case Clockselection
Case 0 : Tcc0_ctrla = &B0000_0000 'OFF
Case 1 : Tcc0_ctrla = &B0000_0001 'DIV1
Case 2 : Tcc0_ctrla = &B0000_0010
Case 3 : Tcc0_ctrla = &B0000_0011
Case 4 : Tcc0_ctrla = &B0000_0100
Case 5 : Tcc0_ctrla = &B0000_0101
Case 6 : Tcc0_ctrla = &B0000_0110
Case 7 : Tcc0_ctrla = &B0000_0111 'DIV1024
Case 8 : Tcc0_ctrla = &B0000_1000 'Event Channel 0
Case 9 : Tcc0_ctrla = &B0000_1001
Case 10 : Tcc0_ctrla = &B0000_1010

Searcher
10.11.2019, 10:39
...
Super, wenn vor dem Bäcker eine lange Schlange ist, dann kann man noch mehr googeln... Das hier wird hoffentlich die Lösung sein: ...


Dürfte richtig sein.
Es gibt das XMEGA A manual: http://ww1.microchip.com/downloads/en/DeviceDoc/doc8077.pdf
Im Kapitel 14.12.1 CTRLA – Control register A werden die CLKSEL Bits beschrieben.

Wie man den richtigen Namen in BASCOM findet steht in der Bascom Hilfe (zumindest in meiner alten Demo Version 2.0.7.9) Kapitel "ATXMEGA" im FAQ. Im Prinzip soll man die entsprechende BASCOM .dat File zum µC finden und dort drin nachsehen.

Gruß
Searcher

(PS Guten Appetit ;) )