@binaer Natürlich gibt es Spezialfunktionen, und sogar speziell auf PWM-Ausgabe optimierte AVRs, z. B. die mit "8" als Zusatz in der Bezeichnung z. B. ATmega48 oder ATmega88 oder die mit "PWM" z. B. AT90PWM3. Hier die Übersicht: http://www.atmel.com/dyn/products/pa...&Direction=ASC

Ich finde es überhaupt keine Gute Idee, einen Pin in gewissen Zeitabständen zu setzen, es sei denn der Chip hat keine Hardware-PWM, denn dabei muss man
1. entweder pollen -> performancefressend und einfach unsauber oder
2. bei Timerinterrupt umschalten-> auch performacefressend und man hat nicht so viele zur Verfügung, so dass es schade ist dafür einen zu opfern.

Weitere Nachteile von manueller PWM sind:
1. Die maximale Frequenz ist dann eingeschränkt. Vor allem bei low power-µC, die sagen wir mit 1,6MHz laufen (z. B. ATtiny15L) ist das ein Problem, wenn man die PWM manuell macht. Meist wird bei solchen Controllern für die Hardware-PWM eine größere Frequenz zur Verfügung gestellt. Sehr comfortabel.
2. Eine manuelle PWM hat meistens glitches.
3. Die Präzision ist eingeschränkt. Da für das Erkennen des Zeitpunkts und für die Umschaltung des Portpins an sich Befehle benötigt werden, also Zeit verstreicht, verhält sich eine manuelle PWM vor allem in Grenzbereichen mit einen duty cycle nahe 0% oder 100% sehr sehr unlinear.

Aufgrund dieser Tatsachen rate ich die Hardware-PWM zu benutzen. Dazu müsste man allerdings konkret wissen welcher AVR verwendet wird, um helfen zu können.