Hallo,

hatte mir schon deinen Code angeschaut aber keine gravierenden Sachen entdeckt.

TCCR2A = (1<<COM1A1) | (1<<WGM20) | (1<<WGM21);
Hier fehlt COM2B1 und du solltest COM2A1 nehmen, auch wenn der Wert der gleiche ist.
TCCR2B = (1<<CS20) | (1<<CS21) | (1);
Mit der letzten 1 änderst du noch einmal den Prescaler.
Das ist aber alles keine Erklärung dafür, das gar nichts funktioniert.
Du probierst das Programm aber schon auf einem Chip aus und nicht nur im Simulator? So wie ich gelesen habe, gibt es da Probleme mit dem Timer2 PWM beim AtMega644.
Was mir mal einen üblen Streich gespielt hat, war das WDTON Fusbit. Am Ausgang konnte ich mit dem Oszi ganz klar ein PWM Signal sehen. Nur das Tastverhältnis passte nicht. Irgendwann ist mir dann mal aufgefallen, dass mir immer ein Reset das Signal versaut.
Ich würde jetzt hergehen, die Ausgängse statisch setzen. Dann über das TCNT Register prüfen, ob der Timer läuft. Mal mit CTC einen Takt ausgeben und hoffen das mich der Fehler irgendwann anspringt

Gruß

Jens