Raspberry Pi Pico: GPIO als digitaler Eingang

Grundsätzlich kann man einen GPIO wahlweise als Eingang oder als Ausgang betreiben. Als digitaler Eingang kann er die Zustände „High“ und „Low“ bzw. „1“ und „0“ annehmen. 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-Eingang über einen Widerstand mit +VCC oder GND verbunden. Dieser Pull-Up- oder Pull-Down-Widerstand lässt sich bei der Initialisierung eines GPIOs per Software definieren.

Aufbau und Bauteile

Raspberry Pi Pico: GPIO mit offenem Kabel

Programmcode: GPIO-Eingang mit internem Pull-Up-Widerstand

Der Programmcode liest kontinuierlich den Zustand eines GPIO-Eingangs ein und gibt ihn auf der Kommandozeile aus.
Der GPIO ist als Eingang mit internem Pull-Up-Widerstand konfiguriert. Ohne weitere Beschaltung ist der Grundzustand des Eingangs eine logische „1“. Durch eine Verbindung nach GND kann der Eingang den Zustand logisch „0“ annehmen.

# Bibliotheken laden
import machine
import time

# Initialisierung von GPIO16 als Eingang mit internem Pull-Up-Widerstand
gpio_in = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_UP)

# Funktion zur Taster-Auswertung
while True:
    print(gpio_in.value())
    time.sleep(1)

Programmcode: GPIO-Eingang mit internem Pull-Down-Widerstand

Der Programmcode liest kontinuierlich den Zustand eines GPIO-Eingangs ein und gibt ihn auf der Kommandozeile aus.
Der GPIO ist als Eingang mit internem Pull-Down-Widerstand konfiguriert. Ohne weitere Beschaltung ist der Grundzustand des Eingangs eine logische „0“. Durch eine Verbindung nach GND kann der Eingang den Zustand logisch „1“ annehmen.

# Bibliotheken laden
import machine
import time

# Initialisierung von GPIO16 als Eingang mit internem Pull-Down-Widerstand
gpio_in = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN)

# Funktion zur Taster-Auswertung
while True:
    print(gpio_in.value())
    time.sleep(1)

Hinweis: Wegen eines Hardware-Fehlers beim RP2350 Revision A2 wechselt der GPIO nicht in jedem Fall in den Grundzustand „0“ zurück, wenn er mal den Zustand „1“ hatte. Das Problem muss mit einem externen Pull-Down-Widerstand kleiner oder gleich 8 kOhm gelöst werden. Mit dem RP2350 Revision A4 wurde das Problem behoben.

Programmcode: GPIO-Eingang ohne Widerstand

Der Programmcode liest kontinuierlich den Zustand eines GPIO-Eingangs ein und gibt ihn auf der Kommandozeile aus.
Da der GPIO-Eingang in diesem Beispiel ohne internen Pull-Down- oder Pull-Down-Widerstand konfiguriert ist, ist der Grundzustand des Eingangs unbestimmt. Vielleicht wird er eine Weile „0“ sein, wechselt ab und zu nach „1“, bleibt dort und wechselt wieder zurück. Provozieren kann man das, in dem man den Board-Pin mit dem Finger berührt oder ein Steckverbindungskabel einseitig am Pin einsteckt.

# Bibliotheken laden
import machine
import time

# Initialisierung von GPIO16 als Eingang ohne Widerstand
gpio_in = machine.Pin(16, machine.Pin.IN, pull=None)

# Funktion zur Taster-Auswertung
while True:
    print(gpio_in.value())
    time.sleep(1)

In der Regel bevorzugt man stabile Grundzustände, insbesondere bei offenen und unbeschalteten Eingängen. Deshalb empfiehlt es sich einen internen Widerstand zu aktivieren. Standardmäßig ist ein Pull-Down-Widerstand aktiviert, weshalb der Grundzustand dann logisch „0“ ist.

Weitere verwandte Themen:

Elektronik-Sets für das Hardware-nahe Programmieren

Elektronik-Sets für das Hardware-nahe Programmieren

Programmieren mit dem Raspberry Pi Pico
Online-Meeting

Programmieren mit dem Raspberry Pi Pico

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

Frag Elektronik-Kompendium.de