Taster löst Interrupt aus - nicht ein Timer

OP #679365
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
OP #679383
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"??
#679392
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
OP #679396
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ß
Moderator Persönliche Seite #679403
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.
#679404
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.