Forum: Mikrocontroller und Digitale Elektronik Taster löst Interrupt aus - nicht ein Timer


von Tobias E. (doenges2)


Lesenswert?

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

von hubert (Gast)


Lesenswert?

-interrupt auf pinchange stellen
-gute hardwaremäßige entprellung
- zeit messen zwischen pnchange interrupts

-hub

von Tobias E. (doenges2)


Lesenswert?

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"??

von Peter D. (peda)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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

von Tobias E. (doenges2)


Lesenswert?

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ß

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> 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.

von Falk B. (falk)


Lesenswert?

@ 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

von Tobias E. (doenges2)


Lesenswert?

noch mal für mich.....


die idee mit der while schleife die die Taster überprüft in der isr ist 
blödsinn?

von Falk B. (falk)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.