Forum: Mikrocontroller und Digitale Elektronik [AVR] Update von OCR0A bei FastPWM ausgetrickst


von Mampf F. (mampf) Benutzerseite


Lesenswert?

Hallo :)

vielleicht interessiert es jemanden ... Hab einen 8Bit Timer mit FastPWM 
konfiguriert (PWM-Frequenz ~200Hz). Aus Ermangelung weiterer Timer 
musste ich den zweiten 8Bit PWM-Kanal in einer Art CTC (Clear Timer on 
Compare) Modus laufen lassen.

PWM hat mich das nicht lassen, da der OCR0A erst wieder bei BOTTOM 
(=0x00) aktualisiert wird, was dazu führte, dass der Compare-Interrupt 
effektiv mit <200Hz aufgerufen wurde.

Ewig rumgespielt und die Lösung gefunden:
1
ISR(TIM0_COMPA_vect)
2
{
3
//    cli();
4
    TCCR0A &= ~0x07;                     // timer auf normal schalten
5
    OCR0A+=5;                            // OCR0A aktualisieren für 10kHz
6
    TCCR0A |= _BV(WGM01) | _BV(WGM00);   // auf FastPWM schalten
7
//    sei();
8
}

Im "normalen" Modus wird das OCR0A sofort aktualisiert (laut Datenblatt) 
und das brachte es :) Die LED, die am PWM hängt, scheint es nicht zu 
stören ;-)

Schönes Wochenende!
Mampf

: Bearbeitet durch User
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.