Wo genau liegen die Probleme? Generelles Verständnis der Timer-Funktion?
Also:
Das Timer-Zählregister wird in jeder Periode des Taktsignals um eins
erhöht. Der Prescaler kann genutzt werden, um den CPU-Takt in bestimmten
Stufen herunterzuteilen. Bei 16 MHz kannst Du den Timer also auf diese
Weise mit 16 MHz, 16 MHz/2, 16 MHz/8, 16 MHz/64, 16 MHz/256 und 16
MHz/1024 versorgen. Wenn z.B. der Vorteiler 256 genutzt wird, dann wird
der Timer mit 62,5 kHz getaktet (eben 16 MHz/256).
Zwischen zwei Erhöhungen vergeht also eine Zeit von 1/62500 s, also 16
µs. Und jetzt musst Du noch überlegen, wie viele dieser Zählvorgänge Du
brauchst, um die gewünschte Zeit zu erreichen.
Wenn Du möchtest, dass ein Compare-Ereignis pro Sekunde auftritt, musst
Du schauen, wie oft z.B. o.g. 16 µs in eine Sekunde hineinpassen. In
diesem Fall ist es ganz einfach, denn die Rechnung steht umgekehrt schon
da. Es sind also 62500 Zählereignisse, nach denen das Compare-Ereignis
auftreten soll.
Wann tritt das Compare-Ereignis auf? Der Komparator vergleicht ständig
den Wert im Zählregister mit dem Compare-Wert. Wenn er Übereinstimmung
(Gleichheit) feststellt, dann wird beim nächsten Takt das Compare-Flag
gesetzt. Im Compare-Register muss also die gewünschte Zykluszahl minus 1
stehen, damit das Compare-Ereignis präzise kommt.