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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.