Forum: Mikrocontroller und Digitale Elektronik CTC und DutyCycle einstellen?


von Max (Gast)


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?
von Peter D. (peda)


Lesenswert?

Max schrieb:
> TCCR1A |= (1<<COM1A0)|(1<<COM1B0);        // Toggle Pin on Compare

Max schrieb:
> Das Tastverhältnis ist jedoch immer 50%

Du weißt aber was "Toggle" heißt?


Peter
von Max (Gast)


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.
von Max (Gast)


Lesenswert?

Ich habe aktuell mit den einstellungen von COM1x1 und COM1x0 
rumgespielt.
Leider kommt am Ausgang nie etwas brauchbares herum.

Würde mich über weitere Vorschläge freuen.

Grüße
Max
von Uwe (Gast)


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.
von Uwe (Gast)


Lesenswert?

Datenblatt lesen steht alles drin.
von Uwe (Gast)


Lesenswert?

Wir müßten auch im Datenblatt nachlesen warum machst du das nicht ?
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.