-
-
Erfahrener Benutzer
Roboter Experte
Hallo,
es gibt für die Timer den normalen Modus und den CTC-Modus. Alle Werte beziehen sich jetzt mal auf einen 8Bit Timer.
Im normalen Modus fängt der Timer mit der über den Prescaler eingestellten Geschwindigkeit an zu laufen. Da du bestimmt einen Vergleichswert eingestellt hast wird dieser irgendwann erreicht. In diesem Moment wird ein Compareflag gesetzt. Ist der Interrupt für diese Flag aktiv wird in die Routine gesprungen. Der Zähler läuft weiter bis zum Wert 255. Im nächsten Schritt wird der Wert 0 erreicht und es wird ein Overflowflag gesetzt. Ist der Interrupt aktiv wird wieder in die zugehörige Funktion gesprungen.
Im CTC-Modus läuft der Timer genauso bis zum Vergleichswert. Es wird wieder das Flag gesetzt und der Timer wird automatisch auf 0 Gestellt.
Um jetzt eine Zeit zumessen, kannst du den Timer im CTC-Modus so einstellen, dass die Zeit vom Start bis zum Erreichen des Vergleichswertes eine ms dauert. Dazu musst du einen geeigneten Prescaler wählen und den richtigen Vergleichswert einstellen. Die Formeln dazu findest du im Datenblatt. Es gibt dafür auch ein Tool, habe aber gerade keinen Link zur Hand. Du aktiviertst den OCIE (Interrupt beim Vergleich). In die Interruptfunktion schreibst du einfach Zähler++;
Wenn du jetzt wissen willst, wie viel Zeit verstrichen ist, schaust du dir Zähler an. Du musst nur aufpassen, irgend wann läuft auch Zähler über und wird wieder 0.
Gruß
Jens
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen