Entprellen / Alternativen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo!
    Ich hab ein wenig mit ICs rumgespielt (BCD-Counter / 7-Segment-Treiber und sowas) und wegen Problemen mit den Tastern das Hardware-Entprellen ausprobiert.
    Mit den Teilen, die ich hier von alten Platinen ablöten konnte, hab ich letztlich eine einwandfrei funktionierende Entprellung hinbekommen - sehr schlicht nach dem linken Muster mit einem Kondensator E 222P (2,2 nF) und einem Widerstand (wobei es mit 590 Ohm genauso gut funktioniert wie mit 100 kOhm). Beim Drücken der Taste bekomme ich ein High-Signal. Wenn ich Vdd und GND vertausche gibts ein Low. Alles prima.

    Kann mir jemand erklären, wie man C und R passend bemisst? (Der Taster sollte sowohl 3,3 V Eingänge am Pi prellfrei schalten, als auch µC oder IC-Schaltungen mit 5 V.)

    Nun hab ich aber auch Schaltpläne mit zwei Widerständen gefunden - wobei dann R2 deutlich größer ist als R1.
    Welchen Vorteil hat diese Schaltung? Ist das notwendig/sinnvoll? Wie bemisst man hier die Bauteile?

    Oft wird noch ein Schmitt-Trigger nachgeschaltet. Auch hier die Frage: Wann braucht man das wirklich?

  • Zitat

    und wegen Problemen mit den Tastern das Hardware-Entprellen ausprobiert.


    Taster sind unterschiedlich, aber das entprellen der Hardware würde ich immer vorne anstellen, hinterher kann man softwareseitig entprellen, wenn es dann noch nötig ist.

    Zitat

    Oft wird noch ein Schmitt-Trigger nachgeschaltet. Auch hier die Frage: Wann braucht man das wirklich?

    Na ja, ein Schmitt-Trigger ist in dem Fall ja auch nur ein A/D-Wandler, der Prellcharakter ein analoges Signal, welches in ein digitales mündet, also wenn was durchkommt kann man das Signal noch softwaremäßig entprellen, oder ?

  • Danke erstmal. Wenn auch wenig konkretes zu meinen Fragen leider...
    Beim Rumprobieren ist mir aufgefallen, dass sich die Schaltung beim Drücken des Tasters anders verhält als beim Loslassen. Wenn ein High-Signal sauber kommt, prellt das Low-Signal beim Loslassen der Taste trotzdem noch - oder umgekehrt.
    Die Lösung mit einem Widerstand geht nach erster Einschätzung besser als mit zweien.
    Mit einem Mikrotaster krieg ich es weitgehend prellfrei. Wenn ich mit einem Draht direkt einen Kontakt schließe, klappt es mehr oder minder schlecht. Längere Prellzeiten abzufangen ist offenbar nicht so einfach.

    Ich hab noch einen Schmitt-Trigger hier - den probier ich auch noch aus.

    Wenn ich das richtig sehe werden die Flanken durch den Kondensator nur flacher - trotzdem können sie beim Prellen nach oben und unten schwanken, so dass sie von einem definierten Pegel in einen undefinierten Bereich und zurück wanken können... nur eben nicht mehr schlagartig von High auf low.
    Mit dem Schmitt-Trigger fängt man dann noch diese Schwankungen ab (weil der quasi eine Sicherheitsschwelle zwischen high und low bildet).
    Die Schaltung ist nicht symmetrisch. Beim Schließen des Kontaktes sind die Ströme anders als beim Öffnen - und somit auch die Entprellung unterschiedlich.
    Letztlich ist die Wahl der Widerstände und des Kondensators wohl eine ziemliche Gratwanderung in Abhängigkeit von der Qualität des Tasters.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Zitat von "Gnom" pid='299148' dateline='1504994332'


    Danke erstmal. Wenn auch wenig konkretes zu meinen Fragen leider...


    Schade, du beschwerst dich dass deine Fragen nicht beantwortet werden.... Dann hast du den von mir hochgeladenen Artikel entweder nicht gelesen oder nicht verstanden. Auf Seite 12 wird er beschrieben, ab Seite 14 berechnet.

    Zitat von "Gnom" pid='299148' dateline='1504994332'


    Die Lösung mit einem Widerstand geht nach erster Einschätzung besser als mit zweien.


    Da kannst du sogar recht haben. Wenn der Schalter schliesst, entlädt sich der Kondensator sehr schnell über seinen eigenen Innenwiderstand und den Widerstand des Schalters. Zusammen einige Ohm, abhängig vom Kondensatortyp und seiner Qualität. Wenn nun ein Prellen auftritt, wird der Schalter sozusagen für kurze Zeit geoeffnet. Dann lädt sich der Kondensator langsam über den Widerstand R1 wieder auf. Die Kunst besteht nun darin, R1*C so zu berechnen dass die Spannung während der Ladezeit die High-Schwelle nicht überschreitet. Der Artikel beschreibt dass Prellvorgänge selten länger als 10ms dauern, zur Sicherheit soll man 2* t = 20ms = R*C nehmen. Die Zeitkonstante t besagt, dass wenn man den Kondensator C über Widerstand R entlädt, die Spannung nach der Zeit t = R*C auf U* 1/e gefallen ist (e = 2.71828...).
    Wenn du so willst, entspricht die linke Schaltung in deiner Abbildung genau der rechten. Nur dass du im ersten Fall den Wert des Widerstandes R2 nicht genau kennst. Ein Ingenieur würde immer einen "Angstwiderstand" R2 verwenden, weil du ja nicht weisst inwieweit der verwendete Kondensator kurzschlussfest ist, und auch weil du die Stroeme begrenzen willst die bei dem Kurzschluss fliessen.

    Zitat von "Gnom" pid='299148' dateline='1504994332'


    Wenn ich das richtig sehe werden die Flanken durch den Kondensator nur flacher - trotzdem können sie beim Prellen nach oben und unten schwanken, so dass sie von einem definierten Pegel in einen undefinierten Bereich und zurück wanken können... nur eben nicht mehr schlagartig von High auf low.


    richtig. Betrachte die Kombination aus R und C als einen Tiefpass. Langsame Signale passieren, schnelle Vorgänge werden unterdrückt.

    Zitat von "Gnom" pid='299148' dateline='1504994332'


    Letztlich ist die Wahl der Widerstände und des Kondensators wohl eine ziemliche Gratwanderung in Abhängigkeit von der Qualität des Tasters.


    sehe ich auch so.

  • Hab ich schon gelesen - bringt mich nur nicht wirklich weiter.
    Hab Dutzende Links im Web verfolgt - jeder macht es anders. 1 µF, 100 µF, 1 nF, 100 nF, 10 kOhm, 1 kOhm, gleiche Widerstände, R2 zehn mal größer als R1...
    Einen BCD-Counter konnte ich gut ansteuern. Die gleiche Entprellung funktioniert bei einem Schieberegister aber nicht.
    Außerdem soll das Ding ja beim Schließen und Öffnen gleichermaßen nicht prellen... das funktioniert aber noch nicht so.
    Ich nehme an, wenn die Flanken zu steil sind, prellt es noch zu sehr. Wenn sie zu flach sind, ist das Signal zu lange undefiniert. Ich werd wohl mal den Schmitt-Trigger ausprobieren. (Hab leider doch keinen hier - muss ich erst besorgen.)

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Zitat von "Gnom" pid='299234' dateline='1505049593'


    Hab ich schon gelesen - bringt mich nur nicht wirklich weiter.
    Hab Dutzende Links im Web verfolgt - jeder macht es anders. 1 µF, 100 µF, 1 nF, 100 nF, 10 kOhm, 1 kOhm, gleiche Widerstände, R2 zehn mal größer als R1...


    Das kannst du machen wie die Dachdecker (droben bleiben oder runter fallen) ;)

    Aber ich kann dir sagen wie ich vorgehen würde:
    1. Besorg dir ein Oszilloskop und schau dir den Prellvorgang an.
    2. Messe die Zeit zwischen den High->Low Uebergängen.
    3. sagen wir mal, es sind 10ms.
    4. Rechne: 2*t = R1*C, wobei t=10ms
    5. R1 liegt typisch bei 10 - 100kOhm, sagen wir mal ca. 50kOhm, weil dann kannst du u.U den internen Pull-up des Pi als R1 verwenden.
    6. Gleichung umstellen: C = 2*t / R1 = 2 * 10 ms / 50 kOhm = 20/50 µF = 400nF. Nimm 470nF und du bist auf der sicheren Seite. Ich wuerde einen Keramikkondensator nehmen, aber das spielt hier keine Rolle.
    7. R2 dient dazu den Kondensator beim HIGH->LOW Uebergang moeglichst schnell zu entladen. R2=0 schliesst den Kondensator kurz, das geht evtl. auf die Lebensdauer des Kondensators oder koennte andere "Dreckeffekte" verursachen. Ich wuerde mit 100 Ohm anfangen.
    8. Wenn es jetzt immer noch prellt, vergroessere C.
    9. Wenn zwischen 2 Tasten drücken eine sehr kurze Zeit vergeht die in der Groessenordnung der RC Zeitkonstante ist, dann hast du nur mit einem Schmitt Trigger eine Chance. Ich habe frueher gerne auch Monoflops benutzt.

    Im Internet liest man viel Schrott, manchmal auch sachlich falsche oder gefährliche (für Bauteile oder den Pi) Tutorials (Beispiel), also lieber messen, Datenblätter lesen und sich KEINESFALLS auf das Internet verlassen. Aber darum bist du ja hier im Forum, oder?

  • Hallo!
    Danke, das ist ja mal ausführlich. Da hab ich nun was zum Ausprobieren.
    Bin gespannt, wie es funktioniert. Ich probiers mal und melde mich zurück...

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • entprellen,

    wenn eh schon ein µC oder Minicompi im Spiel ist würde ich es rein in Software machen,
    http://www.mikrocontroller.net/topic/tasten-e…len-bulletproof

    mache ich schon seit Jahren, AVR, Arduino und funktioniert sicher und gut, in einer IRQ Timer entgeht mir kein Tastendruck!

    sonst in Hardware würde ich es mit einem retrigerbaren Monoflop machen, alle Kondensatorlösungen sind eh unzuverlässig oder stressen die Taster.
    https://www.mikrocontroller.net/articles/Entprellung

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (14. September 2017 um 11:23)

  • Es geht hier um Anwendungen ohne µC bei denen die Taster erstmal direkt an Schaltkreisen gehen, die erst dahinter an einem Pi oder Arduino hängen...

    Wie sieht denn so ne Monoflop-Entprellung aus. Die ist mir nirgends übern Weg gelaufen bei meinen Suchen im Internet. Nur die Flip Flop mit Umschaltkontakt.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Einmal editiert, zuletzt von Gnom (14. September 2017 um 11:26)

  • http://elektroniktutor.de/analogverstaer…pict/timer8.png

    https://www.google.de/search?q=retri…iw=1173&bih=825

    https://www.elektronik-kompendium.de/public/schaerer/monoff.htm

    wenns mit 5V sein soll würde ich ein TL7705 resetcontroller nehmen, dort kann der Taster auf ext. Reset angeschlossen werden und am Ausgang gibt es einen definierten Puls
    http://www.ti.com/lit/an/slvae04/slvae04.pdf

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (14. September 2017 um 11:46)

  • Ein Schmitt Trigger zur Erhöhung der Flankensteilheit ist sicher eine gute Idee (... auch wenn viele Eingänge von Haus aus eine gewisse Hysterese aufweisenund Schmitt Trigger integriert sind). Alternativ zur Lötkolben-Oszi Lösung wäre noch eine SPICE-Simulation überlegbar. Das geht erheblich schneller und man erkennt Probleme, an die man in erster Instanz vielleicht gar nicht gedacht hätte...

  • Uninteressant, der PI hat ebenso wie der im Arduino verwendete ATmega Controller bereits Schmitt-Trigger an den Eingängen.

    Leute, es ist doch ganz einfach, da muss man nicht jedesmal eine neue nicht funktionierende Schaltung erfinden:

    R1 / R3 zwischen 1kohm bei langen Leitungen oder "kräftigen" Schaltern, die etwas mehr Strom benötigen und 33kohm bei kurz angebundenen Mikrotastern.

    R2 / R4 schützt den GPIO vor über die Leitung eingekoppelten Störungen oder Kurzschlüssen bei aus Versehen auf Ausgang gesetztem GPIO und bildet einen Tiefpass mit C1 / C2.

    C1 / C2 von 10nF bei kurz angebundenen Schaltern bis 100nF bei längeren Leitungen. Größer als 100nF braucht eigentlich keiner, wenn 100nF nicht reichen, sollte man sein Konzept überdenken => verdrillte Leitungen, geschirmte Leitungen, Stromschleife mit Optokoppler.

    Einmal editiert, zuletzt von Timm Thaler (14. September 2017 um 22:21)

  • Zitat von "Timm Thaler" pid='299798' dateline='1505420282'


    Uninteressant, der PI hat ebenso wie der im Arduino verwendete ATmega Controller bereits Schmitt-Trigger an den Eingängen.

    Hier geht es aber weder um den Pi noch um Arduinos oder ATmegas. ;) Der TE wollte etwas lernen beim Spielen mit Countern...

  • Zitat von "schnasseldag" pid='299814' dateline='1505423431'

    Hier geht es aber weder um den Pi noch um Arduinos oder ATmegas.

    Soso.

    Zitat von "Gnom" pid='299078' dateline='1504970755'

    Kann mir jemand erklären, wie man C und R passend bemisst? (Der Taster sollte sowohl 3,3 V Eingänge am Pi prellfrei schalten, als auch µC oder IC-Schaltungen mit 5 V.)

    "IC-Schaltungen" ist zu weit gefasst. Es gibt zahlreiche Logik-IC mit Schmitt-Trigger Eingang, da funktioniert das genau so. Andere kann man mit Flip-Flops am Eingang entprellen, aber das hat man vor 30 Jahren so gemacht, hab ich schon lange nicht mehr gesehen, und wäre für einen Atmega oder Raspi totaler Overkill.

    Zähler-ICs haben eher selten Schmitt-Trigger und erwarten definierte Pegel. Normalerweise geht den Zählern eine Schaltung voraus, zum Beispiel eine Torschaltung, die diese Pegel liefert. Oder bei Tastern ein Tiefpass+Schmitt-Trigger. Allerdings sollte für Versuche der Tiefpass allein auch ausreichen. So er denn richtig aufgebaut ist.

  • Hi alle!

    Mal ne kleine Rückmeldung. Ich hab die Tasten mit RC-Glied und Schmitt-Trigger entprellt und diese Schaltung verwendet:

    Und zwar mit C1 = 100 nF und R1 = 91 KOhm, das gibt eine ausgedehnte Entprellzeit von gut 9 ms. (Für einen Taster ok - für andere Zwecke darfs ggf. weniger sein - 1 KOhm - entsprechend 0,1 ms fand ich aber ziemlich wenig. Das Web sagt, dass Prellzeiten bei vielen einfachen Tastern im einstelligen ms-Bereich liegen.) R2 hab ich auf 2,7 KOhm gesetzt - damit ist der Strom nach GND nur gut 1 mA und R2 hat kaum Einfluss auf die Zeitkonstante. (Wenn R2 nicht deutlich kleiner ist als R1, ist die Zeitkonstante bei steigender Flanke kürzer als bei fallender.)

    Das Entprellen klappt damit prima. Das Schieberegister, das mit Tastern und RC-Glied ohne Schmitt-Trigger nicht in den Griff zu bekommen war, lässt sich nun einwandfrei schalten.

    Ich hab ein kleines Bastelboard gelötet. Vorne sieht man die 6 Taster mit den RC-Gliedern. Hinter jeden Taster sind zwei Schmitt-Trigger geschaltet, so dass man an 12 Pins (je 6 neben den Schmitt-Triggern) für jeden Taster wahlweise ein active-high oder -low Signal abgreifen kann (die beiden Hex-Schmitt-Trigger-ICs sind rechts und links zu sehen - es sind TI CD40106B CMOS high voltage ICs für 3-18 V). Stromversorgung kommt von den Pins ganz unten rechts oder links - beide ICs sind zur Sicherheit mit je einem 100 nF Kondensator gepuffert.

    Auf dem Board sind außerdem noch 8 LEDs mit 330 Ohm Vorwiderstand - die man also an Spannungen von 3,3 V bis gerade so 9 V anschließen kann (~ 4 bis 21 mA). Über die Pinleisten kann man mit Jumpern gemeinsamen GND oder gemeinsame Vcc an beliebig viele LEDs legen und dann die einzelnen LEDs entsprechend über positive Spannung oder gegen GND schalten. Vcc und GND können vom rechten oder linken Ende der LED-Zeile eingespeist und mit den Jumpern von LED zu LED weitergereicht werden. Auf dem Foto sind alle LEDs mit den Jumpern auf Common Ground verbunden. Die Stromversorgung ist unabhängig von den Tastern.

    Außerdem ist noch ein DIP drauf, dessen 8 Schalter einerseits mit einem 15 KOhm Widerstandsarray wahlweise als Pullup oder -down gegen Vcc oder GND gezogen werden können. Auf der Eingangsseite kann man dann andererseits GND oder Vcc anlegen, wobei hier ein Widerstandsarray mit 1 KOhm als Schutz (z. B. für die GPIOs des Pi) dient. Über die Pins kann man diesen Schutzwiderstand aber auch übergehen. Die Stromversorgung ist auch hier unabhängig von den anderen beiden Teilen des Boards.

    Ich hab das Ganze auf eine Streifenplatine (50x90 mm) gelötet. Die Rückseite zeig ich euch besser mal nicht... Bis ich die höheren Weihen eines Altmeisters am Lötkolben empfangen darf, wirds noch ein paar Jahrzehnte brauchen... :blush: (Hey, wo ist der Smiley, der immer so nett schamvoll errötet ist?) Übrigens ist die gelötete Version zuverlässiger als der Testaufbau auf dem Breadboard - da gabs doch noch einige Fehlsignale von den Tastern.

    Danke für die netten Tipps. Am Ende hats also so ganz gut funktioniert.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!