Forum: Mikrocontroller und Digitale Elektronik Xmega Timer sind untereinander nicht synchron


von Senna Hoj (Gast)


Lesenswert?

Hi zusammen.

Ich programmiere mit dem Entwicklungsboard XMEGA-A1 Xplained.

Dabei will ich 2 verschiedene Timer mit unterschiedlicher Frequenz 
(vielfaches voneinander) laufen lassen. Das Funktioniert eigentlich 
alles wunderbar.

Der eine TC (TCD0 OC0A) soll eine PWM mit 320kHz ausgeben, der andere TC 
(TCC0 OC0A) ein 50-50-Recheck Signal.

Programmiert sind beide so:
1
// PWM mit 320kHz
2
3
// Vorteiler
4
TCD0.CTRLA = TC_CLKSEL_DIV2_gc;
5
  
6
TCD0.CTRLB = 0x33;
7
  
8
// PWM Periode
9
TCD0.PER = 50; // entspricht 320kHz
10
  
11
// Pulsbreite (wird später variiert)
12
TCD0.CCA = 25;
13
14
PORTD.DIRSET = PIN0_bm;
und
1
// Timer mit 160kHz
2
3
// Vorteiler:
4
TCC0.CTRLA = TC_CLKSEL_DIV4_gc;
5
6
TCC0.CTRLB = 0x33;
7
8
// Timer Periode
9
TCC0.PER = 50; // entspricht 160kHz
10
11
// Timer Pulsbreist
12
TCC0.CCA = 25;

Mein Problem an der Stelle ist jetzt, dass die PWM feiner als 50 
Schritte sein soll. Mein Lösungsansatz wäre dann in dem Fall den 
Clockvorteiler halbieren (TC_CLKSEL_DIV1_gc) und das Periodenregister 
verdoppeln.

Das funktioniert in dem Fall zwar schon, nur laufen dann meine beiden 
Timer nicht mehr synchron.

Kann mir jemand in diesem Fall weiterhelfen?

Vielen Dank im Vorraus!

von spess53 (Gast)


Lesenswert?

Hi

>Das funktioniert in dem Fall zwar schon, nur laufen dann meine beiden
>Timer nicht mehr synchron.

OC-Register falsch berechnet. Rechne mal

PERneu = (PERalt+1)*2-1

MfG Spess

von Senna Hoj (Gast)


Lesenswert?

Oh, wie trivial, daran hätte ich ja im leben nicht gedacht^^

Danke :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.