Forum: Mikrocontroller und Digitale Elektronik Timer1 Duty Cycle auf 0 setzen


von D. M. (Gast)


Lesenswert?

Hallo zusammen,

ich möchte bei meinem Atmega32 den Duty Cycle von Timer1 auf 0 setzen. 
Wenn ich das jedoch mit
1
OCR1A = 0;
2
OCR1B = 0;

mache, ist das Signal für 260µs low, worauf immer ein Spike auf High 
(ca. 1µs) folgt. Danach ist das Signal wieder für 260µs low.

Die Initialisierung ist wie folgt:
1
TCCR1A |= (1<<WGM10) | (1<<WGM12) | (1<<COM1A1) | (1<<COM1B1);
2
TCCR1B |= (1<<WGM12) | (1<<CS10);

Laut Datenblatt ist das ja Folgendes:
Clear OC1A/OC1B on compare match, set
OC1A/OC1B at BOTTOM

Wenn ich zusätzlich COM1A0 und COM1B0 auf 1 setze, habe ich das genau 
invertierte Verhalten von oben, was ja auch klar ist.

Klar ist für mich nur nicht, wie ich bei OCR1X = 0 das Signal komplett 
auf 0 lassen kann.

Hat jemand hierfür nen Vorschlag?

Vielen Dank im Voraus!

Gruß DM

von STK500-Besitzer (Gast)


Lesenswert?

D. M. schrieb:
> Hat jemand hierfür nen Vorschlag?

Den zugehörigen Ausgang auch noch auf 0 setzen

von Stefan E. (sternst)


Lesenswert?

D. M. schrieb:
> Hat jemand hierfür nen Vorschlag?

Inversen Ausgang + inverser OCR-Logik (OCR1A = 255 - PWM_WERT)

oder

Phase-Correct-PWM-Modus verwenden

: Bearbeitet durch User
von D. M. (Gast)


Lesenswert?

Stefan Ernst schrieb:
> D. M. schrieb:
>> Hat jemand hierfür nen Vorschlag?
>
> Inversen Ausgang + inverser OCR-Logik (OCR1A = 255 - PWM_WERT)
>
> oder
>
> Phase-Correct-PWM-Modus verwenden

Der Phase-Correct-PWM-Modus wars!
Vielen Dank!

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.