Timersimulation mit WinAVR

Mit der Entwicklungsumgebung WinAVR wird ein einfaches Timerbeispiel simuliert.
Der Timer soll alle 50us einen Interrupt auslösen.

Die interne Taktfrequenz beträgt 4 MHz. ->> 1 Takt = 1/4000000 = 0,25us. Der 8-Bit-Timer würde ohne prescaling also (256 x 0,25us = 64us) alle 64us überlaufen.
Um eine Zeit von 50us zu generieren, muss der Timer vorgeladen werden. Da ein Takt 0,25us entspricht, werden für 50us also 200 Takte benötigt.

Daraus wird die Vorladezeit des Timers ermittelt: 256 - 200 = 56

Wie man aber mit dem Simulator erkennen wird, werden für die Ausführung der Interrupt-Service-Routine bis zum erneuten Vorladen des Timers weitere 14 Taktzyklen vergehen.
14 x 0,25us = 3,5us. Möchte man ganz exakte Zeiten generieren, muss diese Zeit in die Berechnung einfließen.

 

Beispielcode für die Timersimulation

Timer WinAVR