Benutzer-Werkzeuge

Webseiten-Werkzeuge


pfw:topicofbouncing

Prellen - Studie mittels Forth

Hilfsmittel für die Experimente

PC, LinuxMint. Digital Oscilloscop (XEAST XE-702S). Logic Analyzer (24Mhz 8CH [noname] Saleae Logic compatible) und PulsView (sigrok.org). Texas Instruments MSP430G2553 Launchpad und noForth bedient mit dem e4thcom Terminal.

(Alle folgenden Abbildungen wurden vom Autor selbst erzeugt.)

Prellen erzeugt auch hochfrequente Schwinungen

Hier geht es um sehr kleine Lasten und kurze Leitungen. Wie z.B. ein Taster direkt an einer MCU oder ein Bedienfeld aus mehreren Tastern oder ein Keyboard. Also Spannungen im 5V Bereich und Ströme um die 1mA. Dennoch hat das schon Leitungsinduktivität und -kapazitäten, so etwa bei 1µH und 200pF bei 1m Kabellänge. Das gibt tatsächlich schon Schwingungen an der Umschaltflanke um 10MHz. Sowas zu wissen kann bei der Fehlersuche helfen.

Nach der fallende Flanke ist HF zwischen den Prellpegeln.

Prellen des logischen Pegels

Prellen tritt durch die Elastizität der Kontakte und die Federkraft auf. Typische Prellzeiten liegen im Bereich von 100 µs bis 10 ms (KI). Hier im Test waren zwei kleine Kippschalter, ein blauer und ein silbriger.

Die alten Kippschalter

Schaltung für den Test am Logicanalyser (L)

+VCC ---R---+---S_S---GND
            |
            L

Prellt ca. 200 µs.

Prellt ca. 120 µs.

Die verschiedenen Schaltertypen hatten deutliche Unterschiede beim öffnen und schließen der Schalter. Es waren alte Schalter, lagen seit über zehn Jahren in einer Schachtel.

Folgen für die Software

In digitale Schaltungen und Programmen, die schnell genug sind um die Pegelwechsel zu erkennen, führt das zu unerwünschten Ereignissen.

  • Bei einem Zähler könnte ein einzelner Tastendruck mehrere Zählschritte auslösen.
  • Bei einer Tastatur könnte ein einzelner Tastendruck als mehrere Drücke registriert werden.

Beispiele in Forth

Dieser Forth Quellcode läd einige kleine Routinen in das Launchpad.1) Im Folgenden steht was diese Routinen machen.2)

Pulse machen

pulse ( n – ) erzeugt eine Pulsfolge damit abgschätzt werden kann wie schnell simpel programmiertes noForth ist.

hex
outP16  10 pulse <ret>

Kann man so das Prellen „sehen“? Ja, man kann. noForth kann in der Prellzeit den Pin mehrfach abfragen.

Der Puls dauert nur 7 µs.

Portpin beobachten

tt ( — ) fragt den Schalter kontinuierlich ab. Abbruch durch irgendeinen Tastendruck auf der Tastatur. In der Endlosschleife mittelt t? ( – x ) aus 8 Abfragen den Pegel am Input-Pin. x=0 wäre ein stetiges Low, x=$400 ein stetiges High. Werte im Breich 0<x<$400 bedeuten: Prellen wurde erfasst. Die Abfrage ist schnell genug dafür.

Die Beobachtung zeigte, dass jeder Tastendruck ein Prellen verursacht. Es lag immer ein Wert <$400 vor, wenn die Taste gedrückt wurde, und in der Regel auch beim Loslassen. Probiere selbst …

Versuch, nur die Wechsel zu zeigen

dtt ( — ) entprellt noch weiter und zeigt nur noch „beruhigte“ Pegel an. Also Zonen in denen die gemittelte Portpin-Abfrage komplett H oder L gewesen ist. Eigentlich müsste dabei zwischen jedem Punkt nur 1x ein L und danach 1x ein H erscheinen. Also sowas: L.H.L.H.L.

Doch es kommt das Folgende:

@)dtt 
LHL.H.LHL.H.LHL.H.LHL.H.LHL.H.LHL.H.LHL.H.L.H.LHL.H.LHL.H.LHL.H.L.H.LHL.H OK.0
@)

Man sieht, dass die Pegelwechel auch hierbei immer noch nicht ganz ohne Prellen sttfinden. Insbesondere bei den Wechseln von H → L wird beim Tastendruck immer noch ein zusätzlicher Wechsel erkannt. Die Routine ist also immer noch zu schnell und „erkennt“ das Ende des Prellens nicht wirklich. Ein Tastendruckzähler H→L würde daher meist falsch, d.h. doppelt zählen. Von L → H scheint es schon ohne Prellen zu funktionieren.

Das menschliche Auge kann einem Pegel auch nicht ansehen, ob der schon jenseits vom Prellen liegt. Dazu brauchen wir auch den Vergleich mit der zuvor verstrichenen Prellzeit. Erst wenn wir eine Phase sehen die 2x oder 3x so lang ganz ohne Pegelwechsel ist, wie das, was wir als „prellen“ abschätzen, sind wir bereit anzunehmen, dass das Prellen nun wirklich vorbei ist.

Das gilt es in Software nachzubilden.

Entprellen

Entprellen mittels Hardware, wie RC-Glieder oder ein RS-Flip-Flop will ich hier nicht behandeln. Darüber findest du viel im Internet. Entprellen per Software kennt einige gängigen Methoden.

Flanken-Interrupt

Schmitt-Trigger sind in den I/O-Ports einer MCU schon integriert, zumindest beim MSP430 war es so. CLAVIS? nutzt das ja bereits. Aber auch nach solch einer Abfrage braucht es noch Zeit bis eine erneute Pin-Abfrage erfolgen darf, will man nicht ins prellen hinein abfragen, wie im vorherigen Abschnitt klar geworden ist.

Getaktete Abfrage mit Zeitstempel am Zustand

(folgt)

Pegelwechsel mitzählen bis ein stabiler Zustand ereicht ist.

(folgt)

Methode "Schieberegister"

Beim ablesen des digitalen Inputs am Port wird der Bit-Wert in ein Register geschoben. Macht man 16x die Abfrage, gibt es entweder eine 0000 oder eine FFFF im Register, beides „gültige“ Rückgabewerte. Oder es resultiert was dazwischen und ist dann die Ausnahme.

(folgt)

1)
Du kannst die auch an andere MCUs anpassen.
2)
Ich gehe mal davon aus du weißt schon etwas von Forth und wie man damit interaktiv arbeitet.
pfw/topicofbouncing.txt · Zuletzt geändert: 2025-06-22 02:33 von mka