Forum: Mikrocontroller und Digitale Elektronik Hardware-Tastenentprellung


von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Wahrscheinlich zum 100ten mal. Ich suche jedoch eine gute Moeglichkeit, 
Tasten per HW zu entprellen. Hierzu habe ich eigentlich nur die 
Schaltung in diesem Artikel gefunden: 
http://www.mikrocontroller.net/articles/Entprellung

So. Da steht der Taster darf nicht kurzschliessend sein. Heisst das ich 
kann keine normalen Taster damit verwenden?

Gibt es eine bessere oder eine etablierte Loesung, die ich uebersehen 
habe, eventuell unter Einsatz eines Schmitt-Triggers oder sonst was? War 
da nicht noch irgendwo ein zweiter Beitrag mit etwas mehr Varianten?

Danke fuer die Beantwortung.

Gruss,
Michael

von Whitespace (Gast)


Lesenswert?

Wenn ich mir das recht überlege, sollte ein Monoflop, dessen 
Ausgangsimpuls länger ist als die Prellzeit des Tasters, das auch 
bewerkstelligen. Man braucht dann auch keinen Umschalter mehr.
Mit einem 4528 oder 4538 (aus der CMOS Logik Serie) sollte das recht 
einfach realisierbar sein. (Oder 555, oder was auch immer.)

von Peter D. (peda)


Lesenswert?

Whitespace wrote:
> Wenn ich mir das recht überlege, sollte ein Monoflop, dessen
> Ausgangsimpuls länger ist als die Prellzeit des Tasters, das auch
> bewerkstelligen.

Nein, das tut er nicht.
Tasten prellen auch beim Loslassen, d.h. Du würdest dann einen 2. Implus 
kriegen.

HW-Entprellung hab ich schon ewig nicht mehr benutzt, schon aufm U880 
(Z80) war das in SW viel einfacher.


HW-Entprellung würde ich mitm RC-Glied (100k/100n) und 1/6 74HC14 
dahinter machen (Pullup am Taster nicht vergessen).


Peter

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Wie isses mit Schaltungen?

von Karin (Gast)


Lesenswert?

>Tasten prellen auch beim Loslassen, d.h. Du würdest dann einen 2. Implus
>kriegen.

Ja und? Die Prellzeit des Tasters ergibt sich aus Summe der Prellzeit 
beim Drücken und beim Loslassen. Daher funktioniert ein Monoflop schon 
sehr gut...das Problem ist nur, dass Taster mit zunehmendem Alter 
stärker Prellen und wenn man Pech hat, greift das Monoflop dann nicht 
mehr. Man bräuchte halt ein adaptives Monoflop bzw. ganz einfach eine 
Softwareentprellung :)

von HildeK (Gast)


Lesenswert?

>dass Taster mit zunehmendem Alter stärker Prellen
Ja, und der Mensch, der die Taste drückt, mit zunehmendem Alter immer 
länger drückt. Und wieder ist das Monoflop schon abgelaufen ...

Wenn es unbedingt eine HW-Entprellung sein muss:
Tastenwert in ein Shiftregister eintakten und wenn alle Ausgänge HIGH 
sind, dann ein - wenn alle LOW sind dann aus. Also NOR und NAND - 
Verknüpfen und das Ergebnis auf dieses NAND-RS-FF geben.

Mit zunehmendem Alter des Tasters das Shiftregister adaptiv verlängern 
...
Diese Lösung ist vom Alter des Benutzers unabhängig. ;-)

von Andreas K. (a-k)


Lesenswert?

Ich nehme an, der Artikel will damit ausdrücken, dass der Schalter nicht 
in einen Zustand kommen darf, in dem beide Alternativwege des 
Umschalters miteinander Kontakt haben. Sowas ist bei Kippschaltern auch 
eher unüblich, kann aber bei Schiebeschaltern u.U. vorkommen.

von Andreas K. (a-k)


Lesenswert?

Der Witz an der heutigen Zeit ist, dass viele klassischen Wege zur 
Hardwareentprellung mehr Platz wegnehmen als ein 6/8-Pin 
Microcontroller, der nix anderes tut als nur dies.

von obake (Gast)


Lesenswert?

Hi,

> Wie isses mit Schaltungen?

The good, the bad and the ugly (aber alle von J. Ganssle, dem 
"Prell-Guru"); mit Vorschlägen zur Dimensionierung:

http://www.embedded.com/columns/breakpoint/18902552?_requestid=799066

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

hm... dachte mir ich spar mir halt nen bissel Stress mit der Software. 
Anderseits sollte ich vielleicht einfach per Software entprellen. Wenn 
man den HW-Weg will is vielleicht ein kleiner Mikrocontroller, der die 
entprelleten Signale liefert auch ein guter Weg... hab ich noch garnicht 
daran gedacht ;)

von Whitespace (Gast)


Lesenswert?

@Karin
Peter hat schon recht, da muss man aufpassen. Das funktioniert nämlich 
nur richtig, wenn das Monoflop nachtriggerbar ist (oder die MF-Zeit 
recht lang).
Mit dem 4538 z.B. geht das wirklich nicht gut, weil das zwar 
nachtriggerbar ist, aber nur auf Flanken triggert.

Mit einem nachtriggerbarem Monoflop mit 555er sollte es aber gehen (so 
eins wie das http://www.themt.de/el-0230-time-49.htm), weil wenn der 
Taster gedrück wird, dann geht beim ersten Impuls das Monoflop sofort H 
und bleibt auch dort, wenn man den Taster hält. Beim Loslassen wird das 
MF durch das Prellen dann immer wieder nachgetriggert, sodass der 
Ausgang erst eine MF-Zeit nach dem Letzten Preller L wird.

Ich würde das aber nicht so machen, weil zu aufwendig. Ich wollte bloß 
mal was anderes als das übliche bringen.

Konkret würde ich es machen, wie Peter vorgeschlagen hat (oder einfach 
per SW).

von yalu (Gast)


Lesenswert?

Die Schaltung aus dem verlinkten Artikel hat den Vorteil, dass sie
völlig unabhängig von der Prelldauer arbeitet. Sie ist damit auch
immun gegen die von HildeK genannten langsamen Menschen, die die
Kontakte beim Drücken noch eine halbe Stunde schaben lassen. Umgekehrt
funktioniert sie aber auch bei ganz schnellen Menschen, die den Taster
nur für einen winzigen Bruchteil einer Sekunde antippen.

Einzige Voraussetzung: Die Kontaktzunge des Tasters darf beim
Umschalten nicht zwischen den beiden äußeren Kontakten hin- und
herspringen (passiert bei den üblichen Tastern eigentlich nie).
Außerdem dürfen zu keinem Zeitpunkt alle drei Kontakte miteinander
verbunden sein. Das ist wahrscheinlich das, was mit "nicht
kurzschließend" gemeint ist.

Hardware- und Softwarelösungen mit einem einfachen (nicht
umschaltenden) Taster sind zwar weniger aufwendig, dafür muss immer
eine Zeitkonstante festgelegt werden, die zwischen der längsten
Prelldauer und der kürzesten Betätigung durch den Benutzer liegen
muss. Das ist dann nicht leicht, wenn man weder die potenziellen
Benutzer noch das Langzeitverhalten des Tasters kennt.

In der Praxis — insbesondere bei Billiggeräten — trifft man aber nur
noch diese einfachen Lösungen an. Was zählt, ist der Preis.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Wenn ich 10 Taster mit dem NE555 entprellen will wird das aber zu gross 
und zu energieaufwaendig. Ich hab mich jetzt entschieden das mit einem 
MC zu machen, soll ja auch moeglichst klein werden.

von Helmi (Gast)


Lesenswert?

+5V
     |
     |
     R
     |
   --+--+--+ 74HC14 +--
  \ S   |
   |    C
   |    |
  GND  GND

Hardwareentprellung mit 74HC14

Gruss Helmi

von Peter D. (peda)


Lesenswert?

yalu wrote:

> In der Praxis — insbesondere bei Billiggeräten — trifft man aber nur
> noch diese einfachen Lösungen an. Was zählt, ist der Preis.

Nö.

Mit billig hat das nichts zu tun, sondern mit der Sorgfalt und Erfahrung 
des Programmierers.
Prellende Tasten habe ich schon in Fahrstuhlsteuerungen gesehen und die 
sind bestimmt nicht billig.

Die Ursache des Problems ist allein das mangelnde Verständnis des 
Programmierers.
Da werden einfach irgendwelche for-Schleifen als Delayloop 
zusammengebastelt, ohne deren Laufzeit zu berechnen, bis es zu klappen 
scheint (Trial & Error). Oder schlimmer noch, es wird die ständig 
schwankende Laufzeit der Mainloop genommen.


Einfache Algorithmen mit Mehrfachabtastung kosten kaum Code und CPU-Zeit 
und sind sehr zuverlässig.
Da man sie nach der Entwicklung vergessen kann, sparen sie auch massig 
Entwicklungszeit bei zukünftigen Projekten.

Ich habe gute Erfahrungen mit 4-fach Abtastung und 10ms Abtastinterval 
gemacht.
Da die typische Reaktionszeit eines Menschen etwa 300ms beträgt, kann 
man für sehr hohe Anforderungen das Abtastintervall bis auf 75ms 
erhöhen. Dagegen kann selbst der schlabrigste Prelltaster nicht an.


Peter

von Igor M. (bastel-wastel)


Lesenswert?

Jetzt wäre halt interessant, welche Punkte für Hardware-Entprellung und 
welche für Software-Entprellung sprechen. Ich fange mal an:

Vorteil Hardware-Entprellung:
- keinerlei Ressourcen vom µC benötigt

Vorteile Software-Entprellung:
- Einmalige Entwicklungskosten/zeit für die Entprellroutine (unabhängig 
von der Stückzahl)
- Einfacher Aufbau der Hardware -> Weniger Fehlerquellen hier

Wäre gut, wenn hier ein erfahrener Entwickler noch ein paar Punkte 
ergänzen/korrigieren könnte.

Von der Stabilität her gesehen, würde ich beide Methoden in der gleichen 
Größenordung sehen. Hardware ist zwar störunanfälliger als 
Hardware+Software, aber wenn die Software-Entprellung ausfällt, ist ja 
meist das ganze µC-Programmbetroffen.


Einen eigenen µC nur für die Entprellung zu benutzen ist eine eher 
schlechte Idee. RC-TP + Schmitt-Trigger-IC sollte störungsunanfälliger 
und günstiger sein. Zudem muss man hier für die BG keine lange 
Software-doku und Sicherheitfeatures in der Software erstellen ;-)

@ Peter Dannegger:
In der Codesammlung habe ich verschiedenen Software-Entprellmethoden 
gesehen, allerdings nur in Assembler. Hast du so eine Routine auch schon 
in C geschrieben? Ich bin des AVR-Assembler leider nicht mächtig, sonst 
hätte ich mir eine solche Routine von dir umgeschrieben.

von Mike J. (Gast)


Lesenswert?

@ Michael G.
Mach das doch mit einem RC-Glied.

Bei mir kommt an jedem Ein/Ausgang generell ein Widerstand, ob da nun 
ein Taster(10k-1M), eine LED(1-10k)  oder ein anderer I/O (0-10R) dran 
ist.

Bei den Tastern(große PullUp's) ist der Widerstand größer (10k-1M) und 
zusätzlich ist da noch ein kleiner Kondensator(100n) dran.

von yalu (Gast)


Lesenswert?

Peter Dannegger schrieb:

> yalu wrote:
>
>> In der Praxis — insbesondere bei Billiggeräten — trifft man aber
>> nur noch diese einfachen Lösungen an. Was zählt, ist der Preis.
>
> Nö.

Was heißt hier Nö? Hast du in einem Billiggerät schon einmal
Umschalttaster mit nachgeschaltetem RS-Flipflop zur Entprellung
gesehen? Wahrscheinlich nicht. Und warum nicht? Weil ein Umschalter
teurer ist als ein Schließer und ein RS-Flipflop bzw. zwei µC-Eingänge
(wenn man das Flipflop in Software realisiert) teurer sind als ein
Kondensator bzw. ein einzelner µC-Eingang. Das wollte ich damit nur
aussagen.

> Da die typische Reaktionszeit eines Menschen etwa 300ms beträgt,
> kann man für sehr hohe Anforderungen das Abtastintervall bis auf
> 75ms erhöhen.

Ich weiß, du bist hier der Entprellexperte. Aber mit den 300ms wäre
ich etwas vorsichtig. Das mag zwar die typische Reaktionszeit sein,
auf die kommt es hier aber gar nicht an. Was zählt, ist die Zeitdauer
zwischen dem Drücken und dem Loslassen des Tasters, und die ist meist
deutlich kürzer.

Miss bspw. mal die Zeit, die du für einen Doppelklick (Drücken —
Loslassen — Drücken — Loslassen) auf der Computermaus benötigst. Die
meisten Mausschubser brauchen dafür weniger als 300ms. Bei mir sind es
200ms (hektisch) bis 250ms (entspannt), d.h. die Taste bleibt gerade
mal 67 bis 83ms gedrückt. Und ich bin kein Gamer ;-). Mit
Vierfachabtastung und 10ms Abtastintervall werden Tastendrücke von
40ms+Prellzeit sicher erkannt. Damit liegst du noch gut im grünen
Bereich. Aber vergößern würde ich die Abtastzeit auf keinen Fall.

Diese Gedanken muss man sich bei der Entprellung mittels RS-Flipflop
nicht machen, weswegen dies die sauberere, aber eben auch teurere
Lösung ist.

@Igor Metwet:

Hier gibt es Peters Routine in Assembler und C:

  http://www.mikrocontroller.net/articles/Entprellung#Interrupt-Verfahren_.28nach_Peter_Dannegger.29

von Peter D. (peda)


Lesenswert?

yalu wrote:

> Was heißt hier Nö?

Ja, das ist wohl etwas mißverständlich gewesen.

Ich meinte eigentlich, daß teure Geräte nicht immer eine bessere 
Entprellung als billige haben.
Und daß SW-Entprellung nicht unbedingt schlechter als RS-FF Entprellung 
sein muß (aber leider viel zu oft deutlich schlechter ist).


> Miss bspw. mal die Zeit, die du für einen Doppelklick (Drücken —
> Loslassen — Drücken — Loslassen) auf der Computermaus benötigst. Die
> meisten Mausschubser brauchen dafür weniger als 300ms. Bei mir sind es
> 200ms (hektisch) bis 250ms (entspannt), d.h. die Taste bleibt gerade
> mal 67 bis 83ms gedrückt.

Ich müßte mal ne Maus aufmachen und messen.
Ich bin ja schon etwas älter, 67ms werde ich da wohl nicht mehr 
schaffen.

Ich vermute aber stark, daß auch ein Gamer die Tasten bei ner 
Kaffemaschine, Fahrstuhl, Fernbedienung usw. wesentlich länger drückt.
Diese Tasten sind in der Regel nicht ergonomisch und liegen nicht fest 
auf dem Tisch, da drückt man dann automatisch länger.

Mit ner normalen Gerätetaste auf dem Tisch ans Oszi geklemmt, mußte ich 
mir schon richtig Mühe geben, um unter 300ms zu kommen.


Peter

von yalu (Gast)


Lesenswert?

Peter Dannegger schrieb:

> Ich meinte eigentlich, daß teure Geräte nicht immer eine bessere
> Entprellung als billige haben.

Da sind wir einer Meinung. Ich muss da nämlich gerade an den Aufzug an
meinem Arbeitsplatz denken :(

> Ich müßte mal ne Maus aufmachen und messen.

Brauchst du nicht unbedingt. Ich habe die Zeiten mit Hilfe eines
Klickibuntiprogramms (Gimp) gemessen. Da gibt es in der
RGB-Farbauswahl diese Regler mit zwei Pfeilen, mit denen der
jeweilige Farbwert durch Anklicken inkrementiert bzw. dekrementiert
wird. Ich habe einfach 10s lang auf den Aufwärtspfeil geklickt, was
einen Zählerstand von 60 bis 75 ergab. Daraus ergibt sich eine
Klickfrequenz von 6 bis 7,5Hz und eine Tastendrückdauer von 67 bis
83ms, wenn man davon ausgeht, dass die Drück- und die Loslassphase
gleich sind.

> Ich vermute aber stark, daß auch ein Gamer die Tasten bei ner
> Kaffemaschine, Fahrstuhl, Fernbedienung usw. wesentlich länger
> drückt.

Klar, das hängt natürlich vom Tastenhub und der Betätigungskraft ab.
Eine länger andauernde Betätigungsfrequenz von 6Hz bei ordentlichen
Industrietastern (wie sie in Schaltschränken verbaut werden) ist
höchstens unter Inkaufnahme einer Sehnenscheidenentzündung machbar.

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.