Raspberry Pi Pico: GPIO-Eingang beschalten
Grundsätzlich kann man einen GPIO-Pin wahlweise als Eingang oder als Ausgang betreiben. Als Eingang kann er die Zustände "High" und "Low" einnehmen. Zum Beispiel von einem Schalter oder Taster, die den Eingang gegen Ground (GND) oder +VCC schalten.
Damit ein Eingang einen definierten Zustand hat, und nicht hin- und herschwingt, wird ein GPIO mit einem Widerstand mit +VCC oder GND verbunden. Ein Widerstand deshalb, um zusätzlich den Strom zu begrenzen und Kurzschlüsse zu verhindern.
GPIO-Eingang mit Taster und Widerstand gegen +VCC (Pullup-Prinzip)
Beim Pullup-Prinzip wird der GPIO-Eingang mit einem Pullup-Widerstand auf den Pegel von +VCC gezogen. Der Grundzustand des Eingangs wäre dann "High" bzw. "logisch 1". Mit einem Schalter oder Taster wird der GPIO-Eingang gegen Ground (GND) gezogen bzw. geschaltet. Das heißt, im geschalteten Zustand hätte der Eingang den Zustand "Low" bzw. "logisch 0".
GPIO-Eingang mit Taster und Widerstand gegen GND (Pulldown-Prinzip)
Beim Pulldown-Prinzip wird der GPIO-Eingang mit einem Pulldown-Widerstand gegen Ground (GND) gezogen. Der Grundzustand des Eingangs wäre dann "Low" bzw. "logisch 0". Mit einem Schalter oder Taster wurd der GPIO-Eingang auf den Pegel von +VCC gezogen bzw. geschaltet. Das heißt, im geschalteten Zustand hätte der Eingang den Zustand "High" bzw. "logisch 1".
Doch welches Prinzip sollte man dabei anwenden? Pullup oder Pulldown?
Verzichtet man auf die Feinheiten der praktischen Elektronik ist es eine Frage, welchen Grundzustand ein GPIO-Eingang haben soll. Wenn er eine „0“ als Grundzustand haben und der Wechsel zu „1“ ausgewertet werden soll, dann verbindet man den GPIO mit einem Widerstand gegen Ground (Pulldown) und schaltet mit dem Taster gegen +VCC.
Soll der Grundzustand „1“ sein und der Wechsel zu „0“ ausgewertet werden, dann verbindet man den GPIO-Eingang mit einem Widerstand gegen +VCC (Pullup) und schaltet mit dem Taster gegen Ground.
Und welche Größe sollten diese Widerstände haben? Im allgemeinen ist ein Widerstandswert von 10 kOhm sinnvoll. In der Praxis kann es Gründe geben einen höheren oder auch niedrigeren Wert zu wählen.
Wenn man die Wahl hat zwischen Pullup-Widerstand und Pulldown-Widerstand, was wäre dann zu empfehlen? Da ergeben sich zwei Fragen:
- Welche Logik weist die äußere Beschaltung auf?
- Welches Prinzip wendet der Mikrocontroller RP2040 im Reset-Zustand und damit im unkonfigurierten GPIO-Zustand an?
Im Optimalfall passen die Prinzipien von 1. und 2. zusammen. Doch was steht dazu im Datenblatt des Mikrocontrollers?
- Unter 5.2.2.2 (Pin List) steht in der Tabelle, dass an den GPIOs von 0 bis 29 im Reset-Zustand (Reset State) ein Pulldown-Widerstand wirkt. Also auch an den ADC-Eingängen.
- Unter 5.2.3.4 (IO Electrical Characteristics) steht, dass der Widerstandswert zwischen 50 und 80 kOhm liegt. Sowohl für den Pullup- wie auch den Pulldown-Widerstand. Dieser Zustand bleibt solange, bis ein GPIO konfiguriert wird.
Was bedeutet das jetzt? Es ist sinnvoll, wenn die äußere Beschaltung sich daran orientiert, dass ein GPIO per Pulldown-Widerstand auf Ground (GND) gezogen wird und ein Schalter oder Taster gegen VCC schaltet. Das heißt, man sollte bei der äußeren Beschaltung das Pulldown-Prinzip bevorzugen. Auf diese Weise vermeidet man ungewollte Eingangszustände.
Taster entprellen
Taster weisen ein seltsames Eigenleben auf. Nur einmal gedrückt und trotzdem lösen sie eine Funktion mehrfach aus. Das liegt daran, dass sie bei Betätigung prellen. Das Prellen bezeichnet einen mechanischen Vorgang, bei dem ein metallischer Kontakt durch Zurückfedern zwei oder sogar mehrfach öffnet und wieder schließt, bis er seine Endstellung erreicht hat. Beispielsweise geschlossen oder offen. Mehrfach mechanisch Öffnen und Schließen bedeutet aber auch, elektrisch Öffnen und Schließen. Wird das ausgewertet, dann wird eine Funktion mehrfach ausgeführt, was meistens nicht Sinn der Sache ist. Eine wichtige Maßnahme ist, den Taster oder Schalter zu entprellen. Das kann man softwareseitig realisieren.
Weitere verwandte Themen:
- Raspberry Pi Pico: GPIO-Grundlagen
- Raspberry Pi Pico: GPIO-Belegung
- Raspberry Pi Pico: GPIO-Eingang mit 5 Volt beschalten
- Raspberry Pi Pico: GPIO-Ausgang beschalten
- Elektronik mit dem 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.