mikrocontroller.net

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


Autor: Randy N. (huskynet)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.