Forum: Mikrocontroller und Digitale Elektronik Ein oder zwei Timer nehmen?


von Michael R. (miras)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

Wer dreht an diesem Dreh-Geber?

von Michael R. (miras)


Lesenswert?

Ein Mensch. Die Drehgeber haben 24 Klicks pro Umdrehung, pro Klick 
werden vier Counts gezählt. Ich habe vor, die Ports mit 1 kHz 
einzulesen.

Michael

von Ulrich (Gast)


Lesenswert?

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.

von JensG (Gast)


Lesenswert?

Geht das nicht einfacher mit einem Port-Interupt. Also einer, der bei 
jeder Pegeländerung an den involvierten Portpins feuert?

von Michael R. (miras)


Lesenswert?

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

von w124Dennis (Gast)


Lesenswert?

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

von JensG (Gast)


Lesenswert?

@ 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 ;-)

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.