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 0Pin.IRQ_RISING: steigende Flanke, Übergang von 0 nach 1Pin.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.
Infos
- Mu-Editor Homepage: https://codewith.mu
- Workshop MicroPython (Teil 1): Martin Mohr, “Kleine Schlange, Langversion”, RPG 03/2024, S. 10, https://www.raspi-geek.de/48868
- ESP32 Development Board: https://www.az-delivery.de/products/esp32-developmentboard
- Breadboard: https://www.az-delivery.de/products/breadboard
- RGB-LED: https://www.amazon.de/Multicolor-LED-Dioden-Gemeinsame-Elektronikkomponenten-Leuchtdioden/dp/B01CI6EWQ6/
- MicroPython für ESP32: https://micropython.org/download/ESP32_GENERIC/
- Raspberry Pi Pico: https://buyzero.de/products/raspberry-pi-pico-w-h-konfigurator-pico-pico-w-pico-h-pico-wh
- MicroPython für Pico: https://micropython.org/download/RPI_PICO/
- LED-Balkenanzeige: https://www.amazon.de/Lon0167-Segment-LED-Balkenanzeige-Digital-10x20mm/dp/B09FGY5JNP/





