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!