Hallo, ich löse zur Zeit einen Interrupt über einen Taster aus, insgesamt habe ich drei Taster. Nun möchte ich noch zusätzlich unterscheiden ob es sich um einen kurzen oder langen Tastendruck handelt. Ich möchte nicht einen Timerinterrupt benutzen um dann alle 10ms alle Tasten abfragen und dann eine Entscheidung treffen. Wenn ich richtig verstanden habe dann beriht doch Peter Danneggers darauf, oder? Eine kleine schleife nachdem eine Taste gedrückt worden ist und dann nochmal abfragen gefällt mir auch nicht, da man ja theoretisch in dieser Zeit auch mal die Taste loslassen könnte und dann wieder im richtigen Zeitpunkt drücken muß um die Bedingung von " alnge gedrückt" zu erfüllen. Hat da jemand eine Idee? Gruß Tobias
-interrupt auf pinchange stellen -gute hardwaremäßige entprellung - zeit messen zwischen pnchange interrupts -hub
Im Moment unterscheide ich ja die Tasten durch ein Pinchange, nur wie sol lich am besten die Zeit meßen wenn ich garantieren möchte das die Taste nicht losgelassen werden möchte? Eine while Schleife in der isr die was hochzählt und erst aussteigt wenn die Taste nicht mehr gedrückt ist und dann schaut mal nach ob das hochgezählte hoch genug ist? ISt das eine suabere art? Kann man aus einer isr-Funktion was "returnen"??
Tobias Eckhardt wrote: > Ich möchte nicht einen Timerinterrupt benutzen um dann alle 10ms alle > Tasten abfragen und dann eine Entscheidung treffen. Wenn ich richtig > verstanden habe dann beriht doch Peter Danneggers darauf, oder? Was stört Dich denn daran? Der Algorithmus ist auf hohe Effizienz und wenig Code optimiert. Grob geschätzt braucht er nur 30 Zyklen alle 10ms, macht etwa 0,02% CPU-Last. Peter
@ Tobias Eckhardt (doenges2) >Ich möchte nicht einen Timerinterrupt benutzen um dann alle 10ms alle >Tasten abfragen und dann eine Entscheidung treffen. Warum nicht? MFG Falk
mich persönlich stört der timer nicht, allerdings ist das ganze hier ein Projekt bei dem ich nur meinen kleinen Teil beitragen möchte im Rahmen der Diplomarbeit und da alle anderen Geschichten SPI, I²C, UARt usw noch nciht angebunden sind weiß ich nicht wie toll die das Finden wenn ich meine Tasten mit einem Timer abfrage! Zwecks Unterbechung andere Zeitkritischer Dinge. Es muß doch auch so gehen, oder? Daher nun mein 2. Ansatz einen Interrupt über eine Taste direkt auszulösen. Gibt es da Vorschläge. Gruß
> Es muß doch auch so gehen, oder?
Naja, einen Timer brauchst du ohnehin, da du ja die Länge des
Tastendrucks ermitteln willst. Falls du mit "Taste" einen
mechanischen Kontakt meinst, dann lautet die Antwort auf deine
Frage: ,,Im Prinzip ja, aber eigentlich doch nicht.'' Die Dinger
prellen so sehr, dass du um den Timer bereits zum Entprellen nicht
herum kommst. Da man in der fertigen Applikation in aller Regel
sowieso irgendeinen Basistakt für regelmäßige zeitlich abhängige
Aufgaben braucht (und so 1 ms ... 10 ms sind dafür ein gängiger
Wert), liegt es mehr als nahe, dass die dafür notwendige Timer-ISR
auch gleich noch die Tastenabfrage und -entprellung mit erledigt.
Ein Gesamtsystem aus Teilsystemen zusammensetzen zu wollen, ohne
derartige Ansätze im Gesamtsystem irgendwie mit einplanen zu können,
halte ich für eine Totgeburt.
@ Tobias Eckhardt (doenges2) >nciht angebunden sind weiß ich nicht wie toll die das Finden wenn ich >meine Tasten mit einem Timer abfrage! Zwecks Unterbechung andere >Zeitkritischer Dinge. Deine Bedenken sind unberechtigt. Ein Timer für festes Timing wird in den meisten Programmen sowieso gebraucht. Ausserdem ist eine interruptgesteuerte Tastenabfrage da eher kriischer, weil man zwecks Entprellung dann extra nochmal warten muss. Lass dir einen Rat geben. Mach es mit nem Timer wie hier dutzendfach gezeigt und erprobt. Du wirst es nicht bereuen. MFG Falk
noch mal für mich..... die idee mit der while schleife die die Taster überprüft in der isr ist blödsinn?
@ Tobias Eckhardt (doenges2) >noch mal für mich..... >die idee mit der while schleife die die Taster überprüft in der isr ist >blödsinn? JA!!!
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.