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.
Im folgenden Aufbau wird der Mikrocontroller Raspberry Pi Pico verwendet. Zum Einstieg und erste Versuche empfehlen sich Erste Schritte mit dem Raspberry Pi Pico und Programmieren mit MicroPython.
Aufbau und Bauteile
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.
Taster entprellen mit picozero
picozero ist eine MicroPython-Bibliothek mit der die Steuerung und das Programmieren von elektronischen Bauteilen und Sensoren Einsteiger-freundlich realisiert wird. Von picozero wird auch die Taster-Auswertung unterstützt, die das Entprellen übernimmt.
Bevor man eine eigene Entprell-Lösung programmiert, sollte man die Taster-Auswertung von picozero ausprobieren. Nicht nur Einsteiger, auch Fortgeschrittene profitieren von vielen Vereinfachungen, die bei jedem Programmierprojekt nützlich sind.
Im folgenden Programmcode wird die Onboard-LED und ein Button zwischen GPIO 15 und GND initialisiert. Die Funktion „when_pressed“ reagiert auf das Betätigen des Tasters. Die Funktion „when_released“ reagiert auf das Loslassen des Tasters. In diesem Beispiel geht die Onboard-LED an und aus. Man kann aber auch ein eigene Funktion auslösen.
Hinweis: Beim Aufbau den Taster vom GPIO15 (Pin 20) auf GND (z. B. Pin 18) schalten.
from picozero import pico_led, Button button = Button(15) button.when_pressed = pico_led.on button.when_released = pico_led.off
Experimente mit Taster
- Raspberry Pi Pico: Taster-Zustand auswerten und mit einer LED anzeigen
- Raspberry Pi Pico: Taster-Zustand invertieren (Inverter-NICHT-Funktion)
- Raspberry Pi Pico: LED mit Taster ein- und ausschalten
- Raspberry Pi Pico: Alarmkontakt (Alarmanlage)
Weitere verwandte Themen:
- Raspberry Pi Pico: GPIO-Eingang beschalten
- Raspberry Pi Pico: GPIO-Grundlagen
- Raspberry Pi Pico: GPIO-Belegung
- Elektronik mit dem Raspberry Pi Pico
- Raspberry Pi Pico
Teilen:
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
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
Hardware-nahes Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)
Elektronik-Set Pico Edition
Raspberry Pi Pico: Hardware-nahes Programmieren mit MicroPython
Leichter Einstieg mit All-in-one-Set zum sofort Loslegen, um eigene Steuerungen programmieren.
Elektronik-Set Pico WLAN Edition
Raspberry Pi Pico W: IoT und Smart Home mit WLAN und MQTT
Betreibe Deinen Raspberry Pi Pico W als drahtloser Sensor in Deinem WLAN, versende E-Mails mit Daten und kommuniziere per MQTT im Internet of Things oder Smart Home.
Elektronik-Set Sensor Edition
Erweiterung zu den Elektronik-Sets Pico Edition und Pico WLAN Edition
Elektronik-Set mit den beliebtesten Sensoren zum Messen von Temperatur, Helligkeit, Bewegung, Lautstärke und Entfernung.
Elektronik-Set Eingabe Ausgabe Edition
Erweiterung zu den Elektronik-Sets Pico Edition und Pico WLAN Edition
Damit kannst Du MP3-Dateien abspielen, eine Stoppuhr bauen, einen Servo-Motor mit Drehschalter oder Joystick steuern, Lichteffekte mit einem WS2812-LED-Lichtstreifen erzeugen, Schalten mit einem Relais und Signalisieren mit einem Vibrationsmotor.