Hallo

Durch das "static" wird count nur einmal mit dem Startwert geladen und behält dann seinen aktuellen Wert bei jedem Aufruf der ISR bei. (In der delay()-Variante mit time ist count global)

In init() wird der Timer mit prescale/8 im CTC-Mode gestartet, d.h. er zählt von 0 bis zum Vergleichswert (9 bei 8MHz, 19 bei 16MHz) und ruft dann die ISR auf. Das sollte 8000000/8/10=100kHz ergeben (oder 16000000/8/20). In der ISR wird dann count auf 1000 gezählt, dass ergibt 100 Herz als Wiederholung. Hier beginnt dann die "Grauzone": Bei 100KHz (1/100000) dauert ein count 0,01ms, meine Servos (verschiedene Hersteller) stehen bei ca. 100 counts, was 1 ms entspricht, in der Mitte, von ca. 50-150 machen sie 180°. Eigentlich sollte Mitte aber bei 1,5ms sein, ich habe keine Ahnung, warum das nicht passt. (Das stört mich nicht wirklich, ich würde nur gerne wissen, wo der Fehler liegt.)

Das ist aber keine echte PWM, es werden lediglich verschieden lange Impulse erzeugt. Und das mit einem "normalen" Timer und nicht mit den PWM-Modi des Timers. Vermutlich decken sich deshalb die von dir verwendeten Register nicht mit meinen.

Gruß

mic