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