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
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
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.
Geht das nicht einfacher mit einem Port-Interupt. Also einer, der bei jeder Pegeländerung an den involvierten Portpins feuert?
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
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
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.