Zitat Zitat von ad°FX Beitrag anzeigen
Hab ich das Datenblatt richtig verstanden, dass ein Update der OCR2x erst bei Bottom stattfindet? Ich kann demzufolge also in der Main die Compare-Register ändern und muss das nicht über ISR machen?
Richtig, die sind gepuffert.

Zu deinem Problem: Ich finde keinen Fehler im Code, im Simulator (AVR Simulator 2, der andere setzt beim Timer keine Pins) funktioniert er problemlos.
Ach ja, ein Systemtakt von 72kHz ist sehr wenig ...

Testcode:
PHP-Code:
#include <avr/io.h>

int main(void) {
    
TCCR2A |= (1<<COM2A0) | (1<<COM2A1);    // Setze OC2A bei Compare, reset@bottom, inverted Mode
    
TCCR2A |= (1<<COM2B1);                 // Lösche OC2B bei Compare, set@bottom
    
TCCR2A |= (1<<WGM20) | (1<<WGM21);        // WaveFormGenerator --> fast PWM Mode
    
OCR2A 128;
    
DDRD   |= (1<<PD6) | (1<<PD7);            // PD6&7 als Ausgang um PWM-Signal sichtbar zu machen
    
TCCR2B |= (1<<CS22);                    // Prescaler auf 64 (PWM-Freq=1,125kHz) und start Counter2

    
char last PIND;
    for(;;) {
        
char in PIND;

        if (
last != in) {
            
last in;
            
GPIOR0 last// set breakpoint here
        
}
    }

mfG
Markus