Freut mich, daß der Code geht. Ist nähmlich ungetesteter ad-hoc-Code \/
Viel zu erklären gibt's da nicht, da müsste ich das Handbuch abtippen -- was ich mir und dir ersparen will...
Timer1 kann in verschiedenen Modi betrieben werden.
In Mode 4 zählt er hoch und wird bei TOP wieder auf 0 zurückgesetzt (CTC: Clear Timer on Compare match).
Den TOP-Wert bezieht der Timer1 in Mode 4 aus dem OCR1A-Register (OutputCompare Register A).
Timer1 kann mit verschiedenen Taktquellen (Clock Sources) betrieben werden, die über die CS1x (Clock Select) eingestellt werden. Oben sind sie so eingestellt, daß der Takteingang von Timer1 der Prescaler-Ausgang f_CPU/1024 ist. Sind alle CS1x auf 0, dann hält Timer1 an.
Die Fehlerrechnung ist übrigens inkorrekt, weil sie davon ausgeht, daß der Prescaler auf 0 steht beim Timerstart. Für die Praxis hat der zusätzliche Fehler kaum ne Bedeutung. Falls doch, kann man den Prescaler auch resetten.
Darüber hinaus ist es empfehlenswert so vorzugehen, wie es Zentauro gesagt hat. Dadurch muss man nicht ständig an den Timer-Routinen rumfummeln und Prescaler etc anpassen wenn die Wartezeit sich ändert.
Statt dessen macht man eine Wartefunktion für 1ms oder 10ms oder so und läuft solange in einer Schleife, bis die Zeit um ist.
Lesezeichen