Raspberry Pi Pico: Taster entprellen

Wenn Du einen Taster betätigst, dann führt das in der Regel zur Mehrfachausführung der damit verbundenen Funktion. Doch warum ist das so? Funktioniert das Programm nicht richtig? Nein. Das Problem sind die Taster. Die neigen zum Prellen.

In einem Versuch wollen wir hier aufzeigen, wie das Prellen eines Tasters sichtbar wird und wie man einen Taster wirkungsvoll entprellen kann.

Was ist Prellen und warum tun Taster das?

Mit Prellen ist gemeint, dass ein Taster bei Betätigung nicht zwangsläufig einen dauerhaften Kontakt herstellt, sondern durch den mechanischen Aufschlag zurückfedert und teilweise mehrfach und in kurzer Folge schließt und wieder öffnet, bevor er tatsächlich schließt. Das heißt, das Drücken eines Tasters kann zu einer mehrmaligen Kontaktauslösung führen. Je nach Taster tritt das Problem mehr oder weniger stark auf.

In der Praxis muss man sich zwangsläufig mit dem Prellen von Tastern beschäftigen und eine Lösung parat haben. Das ist hardwarenahes Programmieren live und in Farbe.

Aufbau und Bauteile

Raspberry Pi Pico: Taster gegen VCC schalten

Der Taster wird auf dem Steckbrett auf der einen Seite mit +3,3V (VCC) und auf der anderen Seite mit dem GPIO verbunden.

Programmcode ohne Funktion zum Entprellen des Tasters

Das folgende Programm schaltet die LED immer dann ein und wieder aus, wenn der Taster gedrückt wird. Das Programm wird nicht automatisch beendet.

# Bibliotheken laden
from machine import Pin

# Initialisierung von GPIO25 als Ausgang
led_onboard = Pin(25, Pin.OUT, value=0)

# Initialisierung von GPIO14 als Eingang
btn = Pin(14, Pin.IN, Pin.PULL_DOWN)

# Taster-Funktion
def on_pressed(timer):
    led_onboard.toggle()
    print('pressed')

# Taster-Auslösung
btn.irq(trigger=Pin.IRQ_RISING, handler=on_pressed)

Wenn man den Taster mehrmals betätigt, wird man feststellen, dass die LED manchmal mehrfach an- und ausgeht. Würde sich eine Funktion dahinter befinden, würde diese mehrfach ausgeführt werden. Das ist in der Regel nicht gewollt.

Programmcode zum Taster entprellen

Das folgende Programm schaltet die LED immer dann ein und wieder aus, wenn der Taster gedrückt wird. Das Programm wird nicht automatisch beendet.

# Bibliotheken laden
from machine import Pin, Timer

# Initialisierung von GPIO25 als Ausgang
led_onboard = Pin(25, Pin.OUT, value=0)

# Initialisierung von GPIO14 als Eingang
btn = Pin(14, Pin.IN, Pin.PULL_DOWN)

# Taster-Funktion
def on_pressed(timer):
    led_onboard.toggle()
    print('pressed')

# Entprell-Funktion
def btn_debounce(pin):
    # Timer setzen (period in Millisekunden)
    Timer().init(mode=Timer.ONE_SHOT, period=200, callback=on_pressed)

# Taster-Auslösung
btn.irq(handler=btn_debounce, trigger=Pin.IRQ_RISING)

Das besondere an diesem Programm ist eine Entprell-Funktion, die einen Timer mit einer Verzögerung von 200 ms setzt und erst danach die Funktion zur Ansteuerung der LED ausführt..

Diese Konstruktion im Programmcode führt dazu, dass wenn der Taster innerhalb der 200 ms prellt, also zwischen High und Low hin- und herschwingt, die Funktion nicht erneut ausgeführt wird.

Die Prellzeit (bounce time)

Die Prellzeit, auch Bounce Time genannt, ist die Dauer, in der der Taster prellt, also mehrfach schließt und wieder öffnet, bis er dauerhaft den Zustand geschlossen oder geöffnet einnimmt.
Diese Zeit muss man sozusagen abzuwarten, um eine versehentliche Mehrfachauslösung zu verhindern. Dann kann auch der Bediener nicht mehrfach auslösen, auch wenn der Bediener mehrmals schnell hintereinander den Taster drückt.

Die Dauer der Prellzeit ist von verschiedenen Faktoren abhängig. Zum Beispiel von Material, Bauform und Kraft bei der Betätigung.
Eine sinnvolle Prellzeit hängt auch davon ab, wie schnell ein Taster hintereinander gedrückt werden kann oder darf. Da niemand einen Einschalt-Taster im Stakkato benutzt, ist eine Prellzeit von einer halben Sekunde bzw. 500 Millisekunden kein Problem. Bei anderen Anwendungen, wie Benutzereingaben, sollte der Wert tiefer liegen. Etwa bei 100 bis 300 Millisekunden. Die Zeit muss hoch genug liegen, damit das Prellen nicht zur Mehrfachauslösung führt.

Ich habe das Problem mit dem prellenden Taster noch nicht so ganz verstanden!

Folgender Programmcode zählt in einer Endlosschleife dar, wie oft ein Taster als gedrückt gewertet wird, obwohl er tatsächlich nur ein einziges Mal gedrückt wurde.
Führe das Programm aus und drücke den Taster.

# Bibliotheken laden
from machine import Pin

# Taster initialisieren
btn = Pin(14, Pin.IN, Pin.PULL_DOWN)

# Zähler auf 0 stellen
bounced = 0

# Taster drücken
print ('Bitte Taster drücken.')
print ()

# Endlos-Schleife
while True:
    if btn.value():
        # Hochzählen
        bounced += 1
        # Anzahl ausgeben
        print(bounced, 'mal Taster gedrückt')

Wichtiger Hinweis

Schaut man sich verschiedene andere Lösung zum Entprellen an, dann sind die meisten sehr viel umfangreicher. Das liegt am vergleichsweise großen Funktionsumfang, um maximale Flexibilität zu ermöglichen. Die hier dargestellt Lösung ist vergleichsweise einfach, aber auch nicht in jedem Fall die beste Lösung. Damit kann man zumindest die meisten prellenden Taster entprellen.

Experimente mit Taster

Weitere verwandte Themen:

Teilen:

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das "Elektronik-Set Pico Edition" ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Online-Workshop Mehr Informationen Elektronik-Set jetzt bestellen

Programmieren mit dem Raspberry Pi Pico
Online-Workshop

Programmieren mit dem Raspberry Pi Pico

Online-Workshop mit einer Einführung ins Physical Computing mit Leuchtdioden, Taster und Temperatursensor.

  • Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython ohne Vorkenntnisse
  • Optimaler Einstieg, um eigene Ideen zu verwirklichen und Steuerungen zu programmieren
  • Inklusive Elektronik-Set mit einem Raspberry Pi Pico, Zubehör und elektronischen Bauteilen

Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)

Zum PicoTalk Mehr Informationen Am Online-Workshop teilnehmen

Elektronik-Set Pico Edition
Elektronik-Set Pico Edition

Hardware-nahes Programmieren mit dem Raspberry Pi Pico

Das "Elektronik-Set Pico Edition" ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Online-Workshop Mehr Informationen Elektronik-Set jetzt bestellen