Forum: Mikrocontroller und Digitale Elektronik 8-bit Timer/Counter mit "Vergleichswert-Überprüfung"


von Randy N. (huskynet)


Lesenswert?

Hallo,

im AVR-GCC-Tutorial steht, dass nur der 16-bit Timer/Counter eine 
Vergleichswert-Überprüfung, die dann einen Interrupt auslösen kann, 
besitzt. Könnte man das aber nicht auch mit einem 8-bit Timer/Counter 
simulieren, indem man immer im Interrupt das Zählregister auf einen Wert 
!= 0 setzt? Man müsste jetzt noch wissen, wie viele Takte genau nötig 
sind, bis die ersten Befehle im Interrupt ausgeführt werden, und diese 
von dem Wert, den man in das Register schreibt, abziehen. Aber ansonsten 
dürfte das doch funktionieren, oder? Den Hinweis könnte man in dem 
Tutorial noch geben.

Grüße,
Randy

von AVRFan (Gast)


Lesenswert?

Antwort von Radio Eriwan: "Im Prinzip ja, aber..." ;-)

Wieviele Takte vom Timerüberlauf (= das den Interrupt auslösende 
Ereignis) bis zum Eintritt in die Interrupt-Routine vergehen, ist im 
allgemeinen nicht bekannt, weil der Überlauf unvorhersehbar irgendwo 
"mittem im normalen Code" audtritt, die Instruktionen aber verschiedene 
Ausführungszeiten haben (z. B. "mov" 1 Takt, "rjmp" 2 Takte, "rcall" 3 
Takte, "ret" 4 Takte).  Tritt der Überlauf gar während einer "critical 
section" auf, d. h. einem interrupt-gesperrten Abschnitt ("cli - Code - 
sei"), kann es sogar noch viel länger dauern.  Das macht die Sache 
unkalkulierbar - günstigstenfalls musss man bei der Methode gewisse 
Ungenauigkeiten aus dem genannten Grund in Kauf nehmen.  Wenn das aber 
kein Problem ist, funktioniert das so mit dem Setzen des Zählregisters, 
wie Du sagst.

von Johannes M. (johnny-m)


Lesenswert?

Wenn Du die Compare-Einheit des Timers (bzw. den Compare Match 
Interrupt) meinst: Da sich das Tutorial auf den ATMega8 bezieht, stimmt 
das für den Fall zumindest teilweise. Timer 0 hat beim Mega8 keine 
Compare-Einheit. Allerdings hat der 8-Bit-Timer 2 eine Compare-Einheit.

Bei den neueren Controllern (auch beim ATMega8-"Nachfolger" ATMega88) 
haben alle Timer eine oder mehrere Compare-Einheiten. Der Mega88 hat 
z.B. für jeden der drei Timer zwei Compare-Einheiten.

Man kann natürlich auch ein Compare per Software machen, was aber bei 
den meisten µCs aufgrund der vorhandenen Hardware wenig Sinn macht 
(außer eben man braucht sehr viele PWM-Kanäle, so dass die Ausgänge der 
Timer nicht mehr ausreichen).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.