[AVR] Update von OCR0A bei FastPWM ausgetrickst

OP Persönliche Seite #4905937
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

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