Taster an uC mit Doppelbelegung

Gast #339060
Lesenswert?

Hallo zusammen,

ich möchte folgendes Realisieren: ein Taster mit Doppelbelegung mit
Hilfe von unterschiedlichen Betätigungsdauern.

D.h. wenn ich kurz drücke soll eine andere Funktion aufgerufen werden,
als wenn ich 5 Sek. drücke. Kann man so etwas realisieren? Als Anfänger
habe ich leider keine Ahnung, wie so etwas gehen könnte.

Wäre super, wenn mir jemand einen Tip geben könnte.

Danke und Gruß
Markus
Gast #339063
Lesenswert?

Hallo Andreas,

finde ich für diesen Zweck zu kompliziert.

Wenn Markus das so macht, wie ich beschrieben habe, wertet er einfach
Zeiten unter, sagen wir, 1/50s (ausprobieren!) gar nicht aus und gut
ist. Ein lebender user wird sicher auf jeden Fall länger drücken,
Prellen ist kürzer.

PseudoCode:

if zeit>1s
{tue dies}
else if zeit<1/50s
{tue das}

Oder habe ich was übersehen?
Gast #339064
Lesenswert?

Den Taster muß man eh entprellen (Interrupt ist dafür eigentlich zu
schade).
Wenn man also den Zustand des Tasters sowieso regelmässig abfregt, kann
man auch feststellen, ob er länger als eine bestimmte Zeit betätigt
wurde.
Wenn man einen Taster alle 10-100ms abfragt reicht es in der Regel
(alles über 100ms würde das System zu sehr verlangsamen).
Gast #339065
Lesenswert?

vielen Dank erstmal für die konstruktiven Vorschläge.

Ich hänge an den uC eine Folientastatur mit ca. 15 Tasten an und habe
vor, das ganze eigentlich über Interrupt zu steuern.

Das Gerät wird ganz einfach: Taste X drücken, Befehl über RX/TX
versenden. Eine Taste soll dabei eine Doppelfunktion beinhalten: d.h.
kurz drücken ein anderer Befehl wie lang drücken. Aber das betrifft nur
eine einzige Taste.
Gast #339069
Lesenswert?

ja. Oben schon beschrieben. Andreas Hesse hat das auch schon
verlinkt...
Tasturen fragt man periodisch ab (Timer-Interrupt). Das belastet den
Controller fast überhaupt nicht und funktioniert mit jedem Port.
Vor allem kann man die Funktion dann aber auch auf andere Tasten im
Bedarfsfall problemlos übertragen.
Übrigens ersparst du dir mit dem periodischen Abfragen auch die
Reaktion auf den Interrupt und damit auf dessen Flanke.
Sonst ist es nämlich die gleiche (wenn nicht sogar die selbe)
Funktion.
Was macht dein Controller denn sonst noch bzw. soll er noch machen?
#339070
Lesenswert?

@Sebastian

"finde ich für diesen Zweck zu kompliziert."


Der Code ansich ist sehr effizient, sowohl im Flash/SRAM-Verbrauch als
auch hinsichtlich CPU-Belastung. Das wird erreicht, indem er alle Bits
(Tasten) parallel behandelt.


Er scheint nur kompliziert, bis man ihn mal für eine Taste
durchgespielt und verstanden hat.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren