Mmh, die Frage verstehe ich nicht ganz.
Meinst du, ob es möglich ist, einen Interrupt exakt aller 20ms auszulösen?

Bei nem 12MHz AVR mit 8Bit Timer, würdest du bspw. einfach Prescaler 1024 einstellen und beim Start und jedem Interrupt immer 22 vorladen.
Damit wird der IRQ aller 19.968ms aufgerufen. Mit einer Zählvariablen in der InterruptServiceRoutine kannst du dir ja dann dein PWM softwareseitig basteln.

Oder reden wir von Hardware-PWM?
Da sollte sich das ähnlich lösen lassen. Hab ich bloss noch nie ausprobiert. Einfach immer etwas entsprechend im Zähler vorladen, damit man die Periodenlänge exakt einstellen kann. Beim Hardware-PWM muss man vor dem vorladen jedoch noch die Interrupts sperren ( cli(); )und den Wert in High-Byte und Low-Byte teilen. Danach wieder enablen ( sei(); )