Hallo,
in meinem Projekt möchte ich mittels des Timer1 zwei Rechtecksignale
erzeugen, welche zueinander Phasenverschoben sind.
Hierzu habe ich einen Mega8 zur Verfügung.
Ich habe mir vorgestellt, dies mit dem CTC(Mode12) zu lösen. Hierzu
hatte ich nach suchen bei Google mal diesen Tipp bekommen.
Hier der Code:
1 | #define F_CPU 16000000
|
2 | #define F_SIGNAL 60000
|
3 | #define DC 60
|
4 |
|
5 | // Timer1 initialisieren
|
6 | TCCR1A |= (1<<COM1A0)|(1<<COM1B0); // Toggle Pin on Compare
|
7 | TCCR1B |= (1<<WGM12)|(1<<WGM13); // CTC / Mode 12
|
8 | ICR1 = ((F_CPU/F_SIGNAL)/2)-1; // Gewünschte Frequenz
|
9 | OCR1A = (ICR1*DC)/100; // Duty-Cycle
|
10 | OCR1B = 0.5*OCR1A; // Phasenverschiebung um 90°
|
Leider funktioniert das bei mir nicht richtig.
Ich bekomme die richtige frequenz an OC1A/OC1B heraus.
Das Tastverhältnis ist jedoch immer 50%
Wenn ich OCR1B ändere passiert nichts, jedoch wenn ich OCR1A ändere,
ändert sich die Phasenverschiebung.
Woran kann es leigen, dass der beschriebene Code nicht richtig läuft.
Oder habe ich doch etwas mit dem CTC Mode nicht verstanden?