Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Polling und Interrupts im Vergleich

Nach dieser Lektion: Ich kann erklären, wie Polling und Interrupts arbeiten und wie man prellende Messwerte entprellt.

Lektion, 55 Min.2 BefehleEmbedded-Systems-Lab: Register, Pins, PWM und Interrupts an einem simulierten Chip

Wie ein Chip auf eine Taste wartet

Polling heißt, dass ein Programm einen Eingang immer wieder abfragt. Ein Interrupt heißt, dass der Chip das Programm unterbricht, sobald etwas geschieht.

Beides braucht eine Taste, ein Türkontakt oder ein Sensor. Eine echte Taste prellt, sie wechselt beim Drücken mehrmals hin und her. Wer das nicht beachtet, zählt einen Druck doppelt.

Am Ende dieser Lektion

Notiz

Ich kann erklären, wie Polling und Interrupts arbeiten und wie man prellende Messwerte entprellt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Pollingein Eingang wird in jedem Durchlauf abgefragt
Interruptein Signal, das den Chip unterbricht
Handlereine Funktion, die der Chip bei einem Interrupt aufruft
Flankeder Wechsel eines Pegels von 0 auf 10, 1
Prellenein Kontakt wechselt kurz mehrmals hin und her
Entprellenein prellendes Signal auf einen Wechsel zurückführen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Beim Polling fragt das Programm in jedem Tick

Ein Programm im Chip läuft in einer Schleife. Bei jedem Durchlauf liest es den Pin und prüft, ob sich etwas geändert hat.

Dazu merkt es sich den Zustand vom letzten Tick. Eine Taste gilt als gedrückt, wenn der Pin jetzt 1 und beim letzten Tick 0 war. Das ist eine steigende Flanke.

Beispiel: Flanken in acht Messwerten

TickMesswertLetzter ZustandFlanke
000nein
110ja
201nein
310ja
411nein
501nein
600nein
710ja

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Flanken mit einem Zustand zählen

Code: python
# Eine Taste, die jeden Tick gelesen wird (Polling)
messwerte = [0, 1, 0, 1, 1, 0, 0, 1]
letzter = 0      # der Zustand beim letzten Tick
anzahl = 0
for tick in range(len(messwerte)):
    jetzt = messwerte[tick]
    if jetzt == 1 and letzter == 0:
        anzahl = anzahl + 1
        print("Steigende Flanke bei Tick", tick)
    letzter = jetzt
print("Flanken:", anzahl)
# Ändern Sie die Messwerte so, dass nur eine Flanke bleibt.

Das Lab-Skript fragt eine echte Taste ab

Das Skript poll.py gibt einer Taste zwölf Messwerte. Es ist ein einziger Druck, aber die Taste prellt. Sie springt bei Tick 2 auf 1, bei Tick 3 zurück und bei Tick 4 wieder hoch.

Jede Zeile zeigt Tick, Pin und, ob eine Flanke gesehen wurde: yes heißt ja. Die Wörter sind englisch. Am Ende steht die Zahl der gezählten Drücke.

Eine prellende Taste per Polling zählen

Befehl
docker exec jupyter python3 steps/poll.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Interrupt ruft einen Handler auf

Bei einem Interrupt fragt das Programm nicht dauernd. Der Chip setzt bei einer Flanke ein Flag im Register IFR und ruft den Handler auf, eine Funktion, die Sie vorher festgelegt haben.

Im Lab muss dazu das Bit IE im Register TCCR gesetzt sein. Das Programm kann in der Zwischenzeit etwas anderes tun, zum Beispiel schlafen und Strom sparen.

Das zweite Lab-Skript nutzt einen Handler

Das Skript interrupt.py gibt der Taste dieselben zwölf Messwerte. Der Chip ruft den Handler bei jeder steigenden Flanke auf, also bei Tick 2 und bei Tick 4.

Danach wartet es eine Sperrzeit von drei Ticks ab und behält nur den ersten Aufruf. Die Ausgabe nennt die Zahl der Aufrufe und die Zahl der behaltenen.

Dieselbe Taste mit einem Interrupt zählen

Befehl
docker exec jupyter python3 steps/interrupt.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Entprellen lässt nur einen Wechsel gelten

Es gibt zwei übliche Wege. Beim ersten gilt nach einem Wechsel eine Sperrzeit: Weitere Wechsel in den nächsten Ticks werden ignoriert.

Beim zweiten gilt ein neuer Pegel erst, wenn die letzten n Messwerte alle gleich waren. Beide Wege sind nur eine Regel auf den Messwerten und lassen sich in Python prüfen.

Ein häufiger Fehler

Warnung

Viele denken, ein Interrupt beseitige das Prellen. Das stimmt nicht: Der Handler lief bei jeder Flanke, hier zweimal für einen Druck. Ein Interrupt spart nur das ständige Fragen. Das Prellen steckt weiter im Signal, und Ihr Code muss es entprellen.

Über dieses Lab und seinen Quellcode: Embedded-Systems-Lab: Register, Pins, PWM und Interrupts an einem simulierten Chip

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.