Raspberry Pi Pico: Grundlagen zu Programmable Input/Output (PIO)

PIO ist im Prinzip eine Assembler-Programmiersprache auf der niedrigsten Hardware-Ebene. Näher kommt man als Programmierer der Hardware nicht. Aus höheren Programmiersprachen bekannte Kommandos oder Befehle gibt es hier aber nicht. Um in Assembler programmieren zu können muss man die Funktionsweise der Hardware kennen und darin denken können. Der Einstieg ist deshalb schwierig, wenn man es gewohnt ist mit C/C++ oder MicroPython zu programmieren.

Wenn man beim Raspberry Pi Pico von PIO spricht, dann meint man damit die integrierten State Machines oder Zustandsmaschinen. Das ist im Prinzip ein Steuerungskonzept in dem Zustände, der Übergang zwischen den Zuständen und Abhängigkeiten bestimmter Aktionen definiert ist. Das kann man natürlich auch mit C/C++ oder MicroPython programmieren. Allerdings ist eine mit PIO geschriebene State Machine viel effizienter und schneller. Ein weiterer Vorteil ist die parallele Ausführung unabhängig vom Hauptprogramm.

Der Raspberry Pi Pico enthält zwei PIO-Blöcke mit jeweils 4 Zustandsmaschinen. Jeder PIO-Block enthält einen eigenen Speicher, der 32 Befehle aufnehmen kann. Für die meisten Protokolle ist dies mehr als genug für die Implementierung. Für kompliziertere Szenarien ermöglichen in PIO verfügbare Funktionen wie Side-Set oder Befehlsverzögerung kompliziertere Szenarien.

Die PIO-Programme sind so effizient und schnell, dass sogar eine VGA- oder DVI-Ausgabe vom Pico möglich ist.

Programmcode: Onboard-LED einschalten und ausschalten

Dieses Programm nimmt die Eingaben von GPIO 15 entgegen und gibt den Zustand am GPIO 25 (Onboard-LED) aus. Das heißt, die Onboard-LED leuchtet, wenn der GPIO 15 (Pin 20) mit VCC verbunden wird.

# Bibliotheken laden
import rp2
from machine import Pin

# Initialisierung: Onboard-LED
onboard_led = Pin(25, value=0)

# Initialisierung: Button an GPIO15
btn = Pin(15, Pin.IN, Pin.PULL_DOWN)

# PIO-Programm
@rp2.asm_pio(out_init=(rp2.PIO.OUT_LOW,))
def value():
    in_(pins, 1)
    mov(osr, isr)
    out(pins, 1)

# PIO-Programm aufrufen und aktivieren
sm = rp2.StateMachine(0, value, in_base=btn, out_base=onboard_led)
sm.active(1)

Programmcode: Blinkende Onboard-LED

Dieses Programm nimmt lässt die Onboard-LED blinken bzw. flackern.

# Bibliotheken laden
import rp2
from machine import Pin

# Initialisierung: Onboard-LED
onboard_led = Pin(25, value=0)

# PIO-Programm
@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink():
    wrap_target()
    set(pins, 1)   [31]
    nop()          [31]
    set(pins, 0)   [31]
    nop()          [31]
    wrap()

# PIO-Programm aufrufen und aktivieren
sm = rp2.StateMachine(0, blink, freq=2000, set_base=onboard_led)
sm.active(1)

Wie kann man die PIO State Machines sinnvoll nutzen?

PIO State Machines können verwendet werden, um die Steuerung und den Zustand von Geräten, Prozessen oder Anwendungen zu automatisieren. Sie können verwendet werden, um die Ausführung von Code basierend auf bestimmten Ereignissen oder Zuständen zu steuern oder zur Steuerung von Peripheriegeräten, Datenübertragung und Überwachung von Eingangssignalen. Einige Beispiele für ihre Verwendung sind:

  • Datenübertragung zwischen Peripheriegeräten und dem Hauptprozessor
  • Überwachung von Eingangssignalen und Übertragung einer Reaktion auf Änderungen
  • Implementierung von Protokollen für die Kommunikation mit Peripheriegeräten
  • Verarbeitung paralleler Datenströme
  • Erhöhung der Leistung und Effizienz bei der Datenverarbeitung

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

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

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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.

Online-Workshop buchen

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

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren