Forum: Mikrocontroller und Digitale Elektronik Taster enprellen notwendig bei 100ms?


von PrellProll (Gast)


Lesenswert?

Folientastatur:
Angenommen, ich lese eine Tastaturmatrix in einer 100ms Task ein. 100ms 
reicht ja, um kurze Tastendrücke zu erkennen.
Dann braucht man ja keine Entprellung, oder?
Denn das Prellen ist ja <<100ms.

von 6a66 (Gast)


Lesenswert?

PrellProll schrieb:
> Dann braucht man ja keine Entprellung, oder?
> Denn das Prellen ist ja <<100ms.

Was ist wenn das Prellen genau am Abtastzeitpunkt passiert :)
Taste häufiger ab, mach die Entprellung in SW.

rgds

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

PrellProll schrieb:
> Dann braucht man ja keine Entprellung, oder?
Nein, wenn du eh' nicht schneller reagieren kannst.

6a66 schrieb:
> Was ist wenn das Prellen genau am Abtastzeitpunkt passiert :)
Man erkennt (und reagiert auf) die Tasterbetätigung entweder gleich oder 
erst 100ms später.

: Bearbeitet durch Moderator
von Nop (Gast)


Lesenswert?

PrellProll schrieb:

> Angenommen, ich lese eine Tastaturmatrix in einer 100ms Task ein. 100ms
> reicht ja, um kurze Tastendrücke zu erkennen.

Ein kurzer Tastendruck ist in dieser Größenordnung, daher reichen 100ms 
nicht. Schon gar nicht ohne Entprellung.

Also funktionieren würde es, allerdings darf der Benutzer die Tasten 
nicht nur antippen, sondern muß sie immer kurz richtig drücken und kurz 
halten. Auf gut deutsch, es bedient sich dann eben zäh.

Ich würd eher die Tastenerkennung in den Timer-Interrupt verlegen. Mit 
10ms geht's, besonders wenn Deine Entprellung nicht stur auf "3 mal 
nacheinander high" ist, sondern mit hoch/runterzählen arbeitet. Dann den 
ausgewerteten Tastendruck in eine Queue schieben.

Ach ja, wenn einmal "high" erkannt, dann sollte man den Entprellcounter 
gleich so hochsetzen, daß er für 100ms runterzählen muß, bevor wieder 
Eingaben angenommen werden. Sonst kriegt man zwei, wenn der Benutzer 
etwas zittrige Finger hat. Auch schlecht.

Oder man schert sich nicht weiter drum und lebt mit einer klebrigen 
Bedienung.

von PrellProll (Gast)


Lesenswert?

>Ein kurzer Tastendruck ist in dieser Größenordnung, daher reichen 100ms
>nicht. Schon gar nicht ohne Entprellung.
Gut. Dann sag ich halt nicht 100ms, sondern wähle eine Zeit, die kleiner 
ist, als ein kurzer Druck, aber größer als die maximale Prellzeit. Die 
sollte sich ja finden lassen. Zum Beispiel 40ms.


Bei 40ms Task brauche ich keine Entprellung!
Behaupte ich mal. Oder kann jemand ein Grund nennen?


>Man erkennt (und reagiert auf) die Tasterbetätigung entweder gleich oder
>erst 100ms später.
So sehe ich das auch. Das wäre ja aber kein Problem. Eine Entprellung 
wäre ja auch langsamer.

von Stephan (Gast)


Lesenswert?

ich denke auch es reicht wenn er alle 100ms abtastet und bei 2 
erfolgreichen Abtastungen reagiert. Prellen von Tastern liegt ja meist 
bei 20....40ms. Wenn er aber innerhalb vom 100ms reagieren muss, dann 
bleibt nichts anderes als schneller abzutasten und zu kummulieren.

von Stefan K. (stefan64)


Lesenswert?

PrellProll schrieb:
> Bei 40ms Task brauche ich keine Entprellung!

Das funktioniert so prima.

Gruß, Stefan

von Horst (Gast)


Lesenswert?

Stephan schrieb:
> ich denke auch es reicht wenn er alle 100ms abtastet und bei 2
> erfolgreichen Abtastungen reagiert.

Probier das mal aus und überlegt Dir, ob Du so ein Gerät bedienen 
möchtest.
Eine fünftel Sekunde pro Tastendruck, da schläft man bei ein.

von Stephan (Gast)


Lesenswert?

Horst schrieb:
> Stephan schrieb:
>> ich denke auch es reicht wenn er alle 100ms abtastet und bei 2
>> erfolgreichen Abtastungen reagiert.
>
> Probier das mal aus und überlegt Dir, ob Du so ein Gerät bedienen
> möchtest.
> Eine fünftel Sekunde pro Tastendruck, da schläft man bei ein.

dan probiere mal zB. eine Folientastatur schnell zu bedienen !
Wir reden immer noch von 5 Widerholungen/s. Es ist ja auch nicht gesagt, 
wo die 100ms her kommen.

von m.n. (Gast)


Lesenswert?

Stephan schrieb:
> Prellen von Tastern liegt ja meist
> bei 20....40ms.

Hast Du Dir das mal eben schnell ausgedacht oder bloß nachgeplappert? 
Einen Nachweis für diese Aussage kannst Du sicherlich nicht liefern.

PrellProll schrieb:
> Bei 40ms Task brauche ich keine Entprellung!
> Behaupte ich mal. Oder kann jemand ein Grund nennen?

Dann lasse die Entprellung doch einfach weg. Wunder Dich aber nicht, 
wenn ein Tastendruck mehrfach bewertet wird.
In hochwertiger Feinelektronik gehört eine Entprellung einfach dazu!

von Nop (Gast)


Lesenswert?

Stephan schrieb:

> Wir reden immer noch von 5 Widerholungen/s.

Das Problem ist nicht die Wiederholrate, sondern erstens die Verzögerung 
und zweitens, daß man die Tasten nicht nur antippen kann.

"Kann man schon machen - ist dann halt k*cke"(tm).

von Pandur S. (jetztnicht)


Lesenswert?

Was ist das Problem die Tasten mit einer Zustandsmaschine zu entprellen 
? Ein paar Zeilen Code ? Machs doch einfach. Kostet ja nichts.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

m.n. schrieb:
> Dann lasse die Entprellung doch einfach weg. Wunder Dich aber nicht,
> wenn ein Tastendruck mehrfach bewertet wird.
Das ist aber ein anderes Problem.

> In hochwertiger Feinelektronik gehört eine Entprellung einfach dazu!
Mitnichten. Man muss nur wissen oder einschätzen können, ob man eine 
braucht.

von Peter D. (peda)


Lesenswert?

m.n. schrieb:
> Dann lasse die Entprellung doch einfach weg. Wunder Dich aber nicht,
> wenn ein Tastendruck mehrfach bewertet wird.

Ja, so hat wohl jeder mal angefangen und Lehrgeld bezahlt.

2 Abtastungen auf Gleichheit zu testen, erhöht schonmal die 
Zuverlässigkeit deutlich. Und ab Vergleich von 4 Abtastungen habe ich 
keine Mehrfachdrücke mehr gehabt. Da der Programmieraufwand dafür 
lächerlich gering ist, nutze ich nur noch den 4-fach Vergleich. Man muß 
ja die Lib dafür nur ein einziges Mal erstellen.

von Nop (Gast)


Lesenswert?

Peter D. schrieb:

> 2 Abtastungen auf Gleichheit zu testen, erhöht schonmal die
> Zuverlässigkeit deutlich. Und ab Vergleich von 4 Abtastungen habe ich
> keine Mehrfachdrücke mehr gehabt.

Ich nehm nen rauf/runter-Zähler mit Hysterese. Das ist bei geeigneter 
Dimensionierung genauso zuverlässig, aber man hat nicht die komplette 
Prellzeit als worst-case-Start für den Gleichheitstest abzuwarten.

Tatsächlich spricht das dermaßen flüssig an, daß man bei erkanntem 
Tastendruck den Zähler auf ~100ms zum Runterzählen raufknallen muß, weil 
bei zittrigen Händen und schneller Sensorik sonst zwei Tastendrücke 
kommen. Also real, kein Prellfehler. Das Problem fällt allerdings 
naturgemäß im Sommer nicht so auf. ;-)

von Peter D. (peda)


Lesenswert?

Nop schrieb:
> weil
> bei zittrigen Händen und schneller Sensorik sonst zwei Tastendrücke
> kommen.

Ja, es können nicht nur die Tasten prellen, sondern man muß auch die 
motorischen Fähigkeiten der unterschiedlichen Menschen berücksichtigen. 
Eine sinnvolle Entprellroutine entprellt eben auch das.
Auch sollte die Entprellroutine Störungen filtern, z.B. wenn sich jemand 
elektrostatisch auflädt und sich dann dem Gerät nähert.

von Nop (Gast)


Lesenswert?

Peter D. schrieb:

> Auch sollte die Entprellroutine Störungen filtern, z.B. wenn sich jemand
> elektrostatisch auflädt und sich dann dem Gerät nähert.

Wie äußern sich solche Störungen denn, bzw. was ist das 
Unterscheidungsmerkmal zu realen Tastendrücken?

Also ich gehe mal davon aus, daß HW-seitig die Matrixtastatur "wie 
üblich" angeschlossen ist. Eingänge werden SW-seitig mit Pullup 
konfiguriert, Ausgänge auf GND gesetzt, und bei Tastendruck zieht dann 
ein Ausgang einen Eingang auf low-Pegel. Dann vertauscht man Zeilen und 
Spalten mit Ein- und Ausgängen im nächsten Durchlauf.

Störungen heißen dann, daß man an einem Eingang low sieht, obwohl man 
high sehen müßte, weil keine Taste gedrückt wurde.

von Peter D. (peda)


Lesenswert?

Nop schrieb:
> Störungen heißen dann, daß man an einem Eingang low sieht, obwohl man
> high sehen müßte, weil keine Taste gedrückt wurde.

So ist es. Aber wenn das auftritt, dann nur bei einer Abtastung, d.h. 
der Vergleich mehrerer Abtastungen filtert es zuverlässig heraus.
Und deshalb sollte man zum Einlesen auch keinen externen Interrupt 
verwenden, weil der quasi auf die Störung lauert.

von Teo D. (teoderix)


Lesenswert?

Tasten entprellen, ein wahres Hexenwerk!
Externe Interrupts, ein absolutes NoGo! Die werden dann ja immer 1Mio. 
mal völlig UNKONTROLLIERT ausgelöst.
Spannungsspitzen o. sonstige externe Störgrößen MÜSSEN mit Voodoo-SW in 
den Subraum abgeleitet werden. Darf aber nur von GESCHULTEN 
FACH-Personal geschrieben werden. Sonst entstehen Zombie-Positronen!

Nicht umsonst, wurden schon tausende dicke Wälzer, über dieses 
exorbitant komplizierte Thema geschrieben!



Ääääää...., ich geh wieder ins Bett....

von A. S. (Gast)


Lesenswert?

PrellProll, Du sagst nicht, was Du hast, willst, kannst, brauchst.

Wenn mit dem Taster z.B. ein Rollo verfahren wird, dann ist es völlig 
ok, alle 100ms abzufragen und nicht zu entprellen

Wenn Menüeingaben notwendig sind ist es eine Frechheit dem Benutzer 
gegenüber.

von PrellProll (Gast)


Lesenswert?

Für die Eingabe eines Zugangscodes. Spielt aber keine Rolle.

Meine Frage war:
Bei 1ms Abtastung brauche ich eine Entprellung. Reaktion: perfekt.
Bei 1s Abtastung brauche ich keine Entprellung. Reaktion: zu langsam.

Gibt es zwischendrin einen Bereich, wo ich keine Entprellung mehr 
brauche, aber die Reaktion ausreichen ist?

Die Antwort (so lese ich das hier): Man braucht für das eigentliche 
Tastenprellen keine Entprellung bei ca. 20-100ms

Aber die Entprellung wirkt auch als EMV Filter. Dort macht sie wieder 
Sinn.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

PrellProll schrieb:
> Für die Eingabe eines Zugangscodes. Spielt aber keine Rolle.
Doch, denn wenn du da die Tasten im 100ms Zyklus abfragst, dann musst du 
ja im dümmsten Fall die Tasten auch im 100ms Takt drücken. Sonst 
bekommst du bei einer Eingabe von 1234 sowas eingelesen: 111222223344444
Und du wirst kaum sinnvoll den Code eingeben können.

> Gibt es zwischendrin einen Bereich, wo ich keine Entprellung mehr
> brauche, aber die Reaktion ausreichen ist?
Ja, das musst du jetzt einfach so hinbasteln/hinmurksen. Und jeder 
Bediener macht sich dann bei der wiederholten Eingabe des Codes seine 
Gedanken zum Können des Programmierers. Und das sind keine schönen 
Gedanken...

: Bearbeitet durch Moderator
von PrellProll (Gast)


Lesenswert?

>bekommst du bei einer Eingabe von 1234 sowas eingelesen: 111222223344444
Na also Flankenerkennung mach ich schon.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

PrellProll schrieb:
> Na also Flankenerkennung mach ich schon.
Über wie viele Abtastungen?

Eine Flankenerkennung über eine einzigen Zyklus (0-1) reicht theoretisch 
nur dann aus, wenn du irgendwelche EMV-Störungen ausschließen kannst. 
Soll es robuster sein, dann empfehlen sich die von PeDa angesprochenen 4 
Abtastungen, denn dann muss das Signal schon recht stabil sein, um eine 
Flanke zu erkennen: 0-1-1-1.
Ein einzelner ESD-Spike mit 0-1-0-0 würde dann ignoriert.

Ich würde also zugunsten der Reaktionszeit und der 4-fach Abtastung und 
angesichts einer möglichen Prellerei auf ein 10ms Intervall gehen...

: Bearbeitet durch Moderator
von Clemens W. (daxmus)


Lesenswert?

Nimmt man die Zeit zusammen, die Du für das Schreiben der Beiträge 
aufgewandt hast, wäre die Entprellung schon implementiert.
Geht es um einmalige Aktionen, mit großem Zeitabstand ist die 
Entprellung evtl. nicht notwendig. Aber bei Benutzereingaben, die sich 
auch wiederholen können, finde ich es falsch den Benutzer in ein 
"Eingaberaster" zu drücken.

Meiner Meinung nach tut die Entprellung nicht weh, die 
Performanceeinbusen sind vernachlässigbar und schließt eine mögliche 
Fehlerquelle aus.

von PrellProll (Gast)


Lesenswert?

>die Du für das Schreiben der Beiträge aufgewandt hast, wäre die Entprellung 
>schon implementiert
Ich habe in jedem Projekt eine Entprellung drin und auch schon mehrere 
Algorithmen verwendet und gesehen. Und auch beim Kunden schonmal Fehler 
gesucht, weil sie einen Zählen von 0 bis 10 zählen ließen, beim 
Loslassen dann aber sofort auf 0 zurückgesprungen sind.

Ich habe die Frage gestellt, weil ich den Zusammenhang genauer verstehen 
will. Und bei geschickt gewählter Abtastzeit scheinen es nur noch 
Störungen zu sein, die nachteilig sind.

>Meiner Meinung nach tut die Entprellung nicht weh, die
>Performanceeinbusen sind vernachlässigbar und schließt eine mögliche
>Fehlerquelle aus.
Genau wie der 10nF und 1nF keramische Kondensator, der parallel zum 
100nF geschaltet wird, weil der ja "die höherefrequenten Anteile" besser 
filtert. Es sich aber zeigt, dass solche Kombinationen 
Resonanzfrequenzen aufgrund der Leiterbahnführung haben. Von den Kosten 
bei Stückzahlen >1000k ganz zu schweigen.

Oder die Sicherung, die Hobbybastler immer noch vor ihre "automotive" 
Spannungsregler schalten. Wegen den gefählichen ISO Impulse.

Wichtig ist, dass man es nicht einfacht macht, sondern versteht.

von Michael B. (laberkopp)


Lesenswert?

PrellProll schrieb:
> Dann braucht man ja keine Entprellung

Richtig.

Schon bei einem einzelnen Taster reicht ein Sampling (abfragen) welches 
weniger schnell als die Prellzeit ist, um den Effekt des Prellens 
kompletzt zu unterdrücken.

Denn es ist egal, ob man im Abfragezeitpunkt den noch offenen oder schon 
geschlossenen oder Taster inmitten des Prellvorgangs erwischt.

100ms finde ich bei Tasten aber langsam, die angesprochenen 40ms besser 
und Prellen erreicht selten 10ms.

von A. S. (Gast)


Lesenswert?

Schnelle Tastendrücke erfolgen etwa im 100ms-Raster
d.h. im Mittel 50ms gedrückt, 50ms nicht gedrückt.

--> für eine gute Bedienung musst du mindestens alle 50ms abfragen oder 
Flanken erkennen

Wenn die gleiche Zahl nacheinander erlaubt ist (also z.B. 1,2,2,2),
--> dann musst für eine gute Bedienung entprellen.

Von der Größenordnung her reicht es, alle 10ms zu samplen und 3 gleiche 
Pegel nacheinander als gültig anzusehen. Also wenn der Ausgang des 
Filters jetzt null ist, und es kommt 0,1,0,1,1,1#1,1,1,1 rein, dann ist 
das Ausgangssignal bis zum # noch 0 und danach 1.

Das kann man jetzt je nach Resource ein wenig optimieren oder streiten, 
z.B. nur alle 20ms und nur 2 gleiche Zustände, der Aufwand ändert sich 
damit aber kaum noch.

Alternativ kannst du auch die maximale Prellzeit und minimale 
Kontaktzeit abschätzen und die Abtastzeit darauf optimieren:
Beispiel: max. 11ms prellen, mindestens 21ms Kontakt
--> Abtastinterval > 11ms und < 21ms.

von Teo D. (teoderix)


Lesenswert?

Endprellen, Störeinstrahlungen, Reaktionszeit, Tastenwiederholung etc,
gehört alles sehr eng zusammen, sollten aber getrennt betrachtet werden.

Eine perfekt funktionierende "Eierlegendewollmilchsau" kann es nicht 
geben.
 Das reine (Software) Endprellen, bei der Polling-Methode, ergibt sich 
von selbst (Prellzeiten beachten). Um Störungen abzufangen reicht das 
natürlich nicht.
zB. wie Peda das vorschlägt, mit mehrfach Verifizierung (kann noch 
innerhalb der Prellzeit erfolgen. (Achtung, anfällig für äußere 
Störeinflüsse!)), kann man sehr sicher, sehr nah an die Prellzeit der 
Taster gehen, ohne Störungen befürchten zu müssen. Es spricht auch 
nichts dagegen sofort zu reagieren (zB. Stoppuhr) und dieses bei 
Erkennung eines Fehlers wieder zu Verwerfen...
Bei länger gedrückter Taste, für zB. Automatischer-Tastenwiederholung, 
spielt das Endprellen nach dem betätigen keine Rolle mehr. Ein 
immer-noch-gedrückt kann man so schnell abfragen/reagieren wie einem 
beliebt, bzw. sinnvoll ist.

Teo D. schrieb:
> Nicht umsonst, wurden schon tausende dicke Wälzer, über dieses
> exorbitant komplizierte Thema geschrieben!

OK, können täte man schon, ist ja nicht Trivial aber KEIN Hexenwerk.



PS: Sorry für das Kauderwelsch, 40° Fieber. Ich sollt wirklich im Bett 
bleiben.....

von Stefan K. (stefan64)


Lesenswert?

Teo D. schrieb:
> Endprellen, Störeinstrahlungen, Reaktionszeit, Tastenwiederholung etc,
> gehört alles sehr eng zusammen, sollten aber getrennt betrachtet werden.

Full ack!

> PS: Sorry für das Kauderwelsch, 40° Fieber. Ich sollt wirklich im Bett
> bleiben.....

Gute Besserung!

Viele Grüße, Stefan

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.