CTC und DutyCycle einstellen?

Gast #2392923
Lesenswert?

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?
Gast #2392968
Lesenswert?

Ja Toggle-Pin ist mir schon klar.
Wahrscheinlich steckt dann auch hier irgendwo der Fehler, wenn ich immer 
nur bei der halben Frequenz toggle.

@Peter: könntest Du mir einen Tipp geben, wie ich das dann richtig 
einstellen muss.
Gast #2393095
Lesenswert?

Beim togglen muß zwangsläufig ein 50% Duty-cycle rauskommen, das ist nun 
mal so. Ich glaube du hast das mit der Phasenverschiebung nicht 
verstanden. Phasenverschiebung hat nichts mit Duty-Cycle zu tun. Der 
Code ist Richtig deine Definition des Problems ist falsch.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren