Hallo allerseits, ich beschäftige mich gerade mit der Entprellung der Tasten am AVR. Nun bin ich auf den Link http://www.mikrocontroller.net/articles/Entprellung hier auf der Seite gestoßen. Nun möchte ich den Code verstehen, bevor ich ihn für mein Projekt einsetze. Kann mir jemand deshalb ein Flowchart o.Ä. für die Assembler-Datei von Peter Dannegger aufzeigen? Es geht hier nur um den Teil mit dem Label get8key: Desweiteren wollte ich fragen was die Register iwr0 und iwr1 bedeuten sollen. Ich verstehe wie gesagt die Entprellroutine nicht, die im Timer-Interrupt passiert. Für hilfreiche Antworten wäre ich sehr dankbar. Gruß Jan Purrucker
Hallo Ernst, den Artikel habe ich freilich schon durchgelesen, auch die beschriebene Funktionsweise schon. Aber trotzdem verstehe ich den Ablauf in den 10 Zeilen nicht ganz, warum hier mehrmals abgetastet wird? Gruß Jan
Ernst Bachmann wrote: > Den hier durchgelesen? > Beitrag "Tasten entprellen - Bulletproof" Ich hab's nur überflogen, doch bitte zu beachten der Code richtet sich an einen 8051 und keinen AVR. Im Algorithmus muss kein Unterschied sein, doch Register können womöglich nicht zusammenpassen.
Jan Purrucker wrote: > get8key: > > Desweiteren wollte ich fragen was die Register iwr0 und iwr1 bedeuten > sollen. Ich verstehe wie gesagt die Entprellroutine nicht, die im > Timer-Interrupt passiert. > Für hilfreiche Antworten wäre ich sehr dankbar. Die Funktion ist extrem tricky. Im Grunde hat er für jede Taste einen 2 Bit Zähler. Allerdings sind die beiden Bits nicht in einem Byte beisammen, sondern auf 2 Bytes aufgeteilt +---+---+---+---+---+---+---+---+ iwr0 | | | | | | | | | +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ iwr1 | | | | | | | | | +---+---+---+---+---+---+---+---+ ^ | Diese beiden Bits (Bit 0 in iwr0 und Bit 0 in iwr1) bilden zusammen einen 2 Bit Zähler. Dasselbe für Bit 1, Bit 2 usw. Der Rest ist im Grunde nur ein Addierer der jeweils 1 zu jedem Zähler dazuzählen kann. Und zwar für alle 8 Bits gleichzeitig und abhängig vom Zustand des Port Pins an der jeweilige Bit- Position. Wie gesagt: Das Ganze ist extrem tricky. Es macht aber nicht wirklich etwas, wenn du nicht verstehst, wie das funktioniert. Die Funkionalität ist so wunderbar, daß man das einfach als Baustein in sein Programm übernehmen sollte und sich daran erfreut, daß es funktioniert.
Die Funktionsweise in Kürze: Die zwei/drei Variablen implementieren acht Zähler, die jeweils bis 4 oder 8 Zählen können. Dadurch können mit einem Befehl alle acht Zähler gleichzeitig bearbeitet werden (SIMD)... Erfordert etwas Umdenken, weil die Zählbits nicht "längs" in den Bytes stehen, sondern "quer" über mehrere Bytes verteilt sind. Edit: da war kbuchegg wohl schneller und ausführlicher...
Hallo Karl-Heinz, vielen Dank für deine Ausführung. Ok das mit dem Zähler habe ich verstanden, aber wo ist jetzt der Trick, dass 4 mal abgetastet wird. Bei den par Code-Zeilen sollte es doch nicht so schwierig sein die genaue Funktion zu verstehen. Für weitere hilfreiche Antworten bin ich natürlich sehr dankbar. Gruß Jan
Jan Purrucker wrote: > aber wo ist jetzt der Trick, dass 4 mal abgetastet wird. Du hast Dir auch diesen Beitrag durchgelesen? Beitrag "Re: Bitte um Erklärung der Entprellroutine" ...
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.