www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kurze und lange Tasterdrücke regestrieren ATMEGA8


Autor: Thomes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Ich habe da ein Probelem und ich das mir vieleicht hier jemand helfen 
kann. Ich habe leider keine passenden Artikel im Internet oder in diesem 
Forum gefunden. Wenn dieses Thema schon einmal diskutiert wurde dann 
bitte ich um nachsicht und vieleicht einen Link zur alten dikusion.


Ich habe folgendes Probelm:

Ich möchte mit dem ATMEGA8 kurze und lange Tasterdrücke erkenne und 
darauf dementsprechend reagieren. Bei einem kurzen Druck soll eine 
andere Aktion ausgeführt werden als bei dem langen Druck.

Ich hatte bisher die Idee das mit Hilfe eines Timers zu machen. Wenn ein 
Taster gedrückt wird, soll der Timer anfangen zu zählen. So lange der 
Taster gedrückt bleibt soll ein Register incrementiert werden. Nach dem 
eine bestimmte Zeit abgelaufen ist(etwa eine sekunde) soll das 
hochgezählte register ausgewertet werden und daran erkannt werden ob der 
Taster kurz oder lang gedrückt war.

Ich habe da auch ein Programm geschrieben das aber leider nich so gut 
funktionierte. Mal ging die Led direkt nach dem Tastendruck an, mal mit 
langer verzögerung mal garnicht. Leider habe ich das Programm auch 
soweit vermurkst das garnichts mehr ging und alles nur durcheinander 
war. Darauf hin habe ich das Programm gelöscht. Deswegen kann ich leider 
auch mein Programm nicht online stellen. Ich glaube irgendwie das dies 
damit zu tun hatte das der Timer nicht bei jedem Tastendruck mit dem 
selben wert angefangen hat.

Mein Problem ist nur wie bekomme ich das hin das der Timer erst genau 
dann anfängt zu zählen wenn ich eine Taste gedrückt habe und nach dem 
Tastendruck der Timer zurückgesetzt und deaktivert wird? Wenn ich die 
Interupts Global ausstelle dann hört doch der Timer nicht auf zu zählen 
oder?

Oder gibt es da noch eine bessere möglichkeit das zu realisieren? 
Vieleicht hat ja jemand einen Assembler code für mich?

Ich vielen dank für die Hilfe
Gruß Thomes

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde in der Timmer ISR Abfragen ob die Taste gedrückt ist, wenn ja 
> Variable hochzählen, wenn nein --> Wert für die Mainloop sicher und 
Counter auf 0.
In der Mainloop kannst du dann die gesicherte Variable abfragen und je 
nachdem entscheiden:
> 50 --> kurzer druck
> 150 --> langer druck
oder so in der Art (hast dann auch gleichzeitig ne Entprellung)

Alles etwas theoretisch da ich nicht weiß welche Progsprache du 
verwendest

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da verweise ich dich doch glatt mal auf eines der Arbeitspferde
in diesem Forum

http://www.mikrocontroller.net/articles/Entprellun...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Vorgehensweise müsste doch eigentlich klar sein: Für jeden Taster 
gibt es eine Zählvariable. Die Taster werden jetzt zyklisch abgefragt 
(z.B. Timer-Interrupt). Wenn an einem Taster ein Flanke "Taster 
gedrückt" erfasst wird, dann wird ein Flag gesetzt und solange dieses 
Flag gesetzt ist, wird bei jeder Tasterabfrage die zu dem Taster 
gehörende Zählvariable erhöht. Das ganze so lange, bis der Taster wieder 
losgelassen wird. In dem Fall wird das Flag gelöscht, die Zählvariable 
ausgewertet (kurz oder lang gedrückt, also kleiner oder größer als ein 
Schwellwert) und wieder auf Null gesetzt.

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.