Ein oder zwei Timer nehmen?

OP #872358
Ich lese mit einem ATmega 6 Drehgeber (Gray-Code) aus. Das Auslesen 
dieser 12 Bits muss absolut zuverlässig funktionieren, es darf kein 
count ausgelassen werden. Soll ich das besser mit einem oder mit zwei 
Timer realiseren?

Ein Timer wäre natürlich einfacher zu realisieren, aber dieser Interrupt 
steuert ja noch das übrige "Housekeeping" wie RS-232 und 
Display-Ausgabe. Deshalb könnte es passieren, dass ein Interrupt 
verloren geht, wenn der Handler noch mit der Abarbeitung beschäftigt 
ist, oder irre ich mich da?

Wenn ich zwei Timer nehme, und einen Timer nur mit Auslesen und Zählen 
beaufschlage, habe ich dann die Garantie, dass dieser immer ausgelöst 
wird, auch wenn der andere Timer-Handler noch beschäftigt ist?

Ich tendiere zu zwei Timern, aber ich habe hier jetzt schon oft gelesen, 
dass man nur einen Timer verwenden soll. Deshalb frage ich, wie würdet 
Ihr das realisieren?

Gruß,
Michael
Gast #872393
Nimm zwei Timer.
Ein Timer bearbeitet in seiner Interruptroutine die encoder und der 
andere arbeitet ohne Interrupts und du frögst das Overflow bzw 
comparematch flag in deiner main ab. Dann sind die Prioritäten klar 
verteilt und kein "Klick" kann dir verloren gehen.
OP #872679
Ulrich, das ist ne gute Idee, den zweiten Timer garnicht über den 
Interrupt-Handler laufen zu lassen. <andiestirnklatsch> Mensch, da hätt 
ich auch selbst draufkommen können. ;) Danke für den nötigen 
Denkanstoss.

Jens, das Problem ist dabei aber doch, dass der ATmega32 nur zwei 
Interrupt-Leitungen hat, ich aber 12 benötigen würde. Oder hab ich da 
was falsch verstanden? (Ist mein erste AVR Projekt...)

Micha
Gast #872688
mann könnte die signale zusammenfasse,
zb könnte man alle signale über jeweils einen c an ein r legen und über 
dem r messen, gib es dort eine positive flanke, so muss man jetzt nur 
noch schauen welcher pin sich geändert hat. vieleicht geht das auch mit 
einem ic, mir fällter aber spontan keins ein


Dennis
Gast #872701
@ Michael R. (miras)

>Jens, das Problem ist dabei aber doch, dass der ATmega32 nur zwei
>Interrupt-Leitungen hat, ich aber 12 benötigen würde. Oder hab ich da
>was falsch verstanden? (Ist mein erste AVR Projekt...)

Da hast Du leider recht ;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.