Aus Raspberry Pi Geek 05/2024

MicroPython (Teil 2): Digitale Ein- und Ausgabe (Seite 2)

Taster an digitalen Eingängen neigen erfahrungsgemäß zum Prellen. Das bedeutet, dass ein Übergang von offen zu geschlossen (0 zu 1) und umgekehrt nicht in einem Schritt erfolgt. Der Taster pendelt beim Schalten viel mehr einige Male zwischen den beiden Zuständen hin und her. Diese Tatsache müssen Sie bei den Programmen beachten.

Anhand des Beispielprogramms in Listing 2 lässt sich gut zeigen, wie oft der Taster beim Schalten schwingt. Mithilfe eines Interrupt-Handlers zählt es die einzelnen Schaltvorgänge (Zeile 3). Mehr zum Thema Interrupt erfahren Sie im Kasten “Interrupt-Verarbeitung”. Das Beispielprogramm zeigt zudem, wie Sie die Pull-up- und Pull-down-Widerstände per Software aktivieren (Zeile 7). Das eigentliche Hauptprogramm besteht aus einer Endlosschleife, die nichts tut.

Interrupt-Verarbeitung

Grundsätzlich steckt hinter einem Interrupt eine Unterbrechung des aktuellen Programmablaufs, um auf besondere Ereignisse zu reagieren, beispielsweise sich ändernde Signalpegel an einem Pin (Hardware-Interrupt) oder das Anklicken eines Schalters in einer GUI (Software-Interrupt). Bei den hardwareseitig ausgelösten Interrupts unterscheidet man in MicroPython vier Typen:

  • Pin.IRQ_FALLING: fallende Flanke, Übergang von 1 nach 0
  • Pin.IRQ_RISING: steigende Flanke, Übergang von 0 nach 1
  • Pin.IRQ_LOW_LEVEL: logischer Zustand 0 (selten)
  • Pin.IRQ_HIGH_LEVEL: logischer Zustand 1 (selten)

Sobald ein Interrupt auftritt, stoppt das aktuelle Programm, und ein Interrupt-Handler springt an. Dahinter verbirgt sich oft eine Funktion, die auf das aufgetretene Ereignis reagiert und sich wieder beendet, woraufhin das ursprüngliche Programm weiterläuft. Da Interrupts den normalen Programmablauf stören, versucht man möglichst wenig Code innerhalb des Interrupt-Handlers auszuführen.

Listing 2

Tastaturprellen erkennen

from machine import Pin
count = 0
def handler_button(pin):
  global count
  count=count+1
  print (count)
button = Pin(16, Pin.IN, Pin.PULL_UP)
button.irq(trigger=Pin.IRQ_FALLING,handler=handler_button)
while True:
  pass

Lauflicht

Nach all der Theorie bauen wir als abschließendes Beispiel ein einfaches Lauflicht auf. Es soll aus acht LEDs bestehen, und das Licht soll hin- und herwandern. Dafür empfiehlt sich der ESP32, weil er über acht GPIOs direkt nebeneinander verfügt und Sie das Lauflicht dementsprechend mit einer LED-Balkenanzeige [9] umsetzen können. Als Vorwiderstände für die LED setzen Sie ein Widerstandsnetzwerk ein. Alles zusammen zeigt Abbildung 1.

Listing 3 enthält den passenden Programmcode. Als Erstes definieren Sie wie in der dritten Zeile eine Liste mit den Pin-Nummern der LEDs, die Sie daraufhin als Output festlegen. Die zwei folgenden Schleifen (Zeilen 7 und 11) lassen jeweils eine neue LED aufleuchten und löschen den Vorgänger. Durch geschickt gewählte Parameter für die Funktion range() klappt alles wunschgemäß.

Listing 3

Lauflicht

from machine import Pin
from time import sleep
PINS = [19,18,5,17,16,4,0,2]
LEDS = []
for i in range(8): LEDS.append(Pin(PINS[i],Pin.OUT))
while True:
  for i in range(1,8,1):
    LEDS[i].value(1)
    LEDS[(i-1)].value(0)
    sleep(0.1)
  for i in range(6,-1,-1):
    LEDS[i].value(1)
    LEDS[(i+1)].value(0)
    sleep(0.1)

Fazit und Ausblick

Mit MicroPython führen Sie problemlos Code-identische Programme auf unterschiedlichen Mikrocontrollern aus. Mu als Editor lässt sich kinderleicht bedienen. Im nächsten Teil der Artikelserie beschäftigen wir uns mit analoger Ein- und Ausgabe. (csi)

Der Autor

Martin Mohr hat die komplette Entwicklung der modernen Computertechnik live miterlebt. Nach dem Studium schrieb er überwiegend Java-Applikationen. Mit dem Raspberry Pi erwachte seine alte Liebe zur Elektronik wieder.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben