www.mikrocontroller.net

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


Autor: Tobias Eckhardt (doenges2)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hubert (Gast)
Datum:

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

-hub

Autor: Tobias Eckhardt (doenges2)
Datum:

Bewertung
0 lesenswert
nicht 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"??

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias Eckhardt (doenges2)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias Eckhardt (doenges2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch mal für mich.....


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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.