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

Pins und Timer: GPIO und PWM

Nach dieser Lektion: Ich kann einen Pin nach einem Zeitplan ansteuern und das Tastverhältnis eines PWM-Signals berechnen.

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

Was GPIO und PWM tun

Ein GPIO-Pin (General Purpose Input/Output, Allzweck-Anschluss) ist ein Anschluss, den die Software als Eingang oder als Ausgang einstellt. PWM (Pulsweitenmodulation) schaltet einen Pin so schnell an und aus, dass eine Lampe gedimmt wirkt.

So dimmt ein Fahrradlicht und so regelt ein Lüfter seine Drehzahl, ohne dass der Pin je etwas anderes als an oder aus kennt.

Am Ende dieser Lektion

Notiz

Ich kann einen Pin nach einem Zeitplan ansteuern und das Tastverhältnis eines PWM-Signals berechnen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
GPIO-Pinein Anschluss, der Eingang oder Ausgang sein kann
Ausgangein Pin, den der Chip auf hoch oder tief setzt
Tickein Schritt des Taktes im Chip
Periodedie Zahl der Ticks, bis der Zähler von vorn beginnt16
PWMein Pin, der in jeder Periode einen Teil der Zeit an ist
Tastverhältnisder Anteil der Periode, in dem der Pin an ist, in Prozent

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

DDR macht einen Pin zum Ausgang

Jedes Bit des Registers DDR gehört zu einem Pin. Eine 1 macht den Pin zum Ausgang, eine 0 zum Eingang.

Bei einem Ausgang bestimmt das Register PORT den Pegel: 1 heißt hoch, 0 heißt tief. Das Register PIN zeigt, was an den Pins gerade anliegt.

Beispiel: drei Register für einen Pin

RegisterAufgabePin 0 als Ausgang, hoch
DDREingang (0) oder Ausgang (1)0b00000001
PORTPegel, den ein Ausgang treibt0b00000001
PINPegel, der gerade anliegt0b00000001

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

Das Lab-Skript lässt einen Pin blinken

Das Skript pins.py macht Pin 0 zum Ausgang und setzt ihn hoch. Es zeigt DDR, dann PORT und PIN. Danach schaltet es das Bit bei jedem Tick um, acht Ticks lang.

Die letzte Zeile ist ein Muster aus Zeichen: # heißt an, ein Punkt heißt aus. Die Wörter der Ausgabe sind englisch.

Einen Pin zum Ausgang machen und blinken lassen

Befehl
docker exec jupyter python3 steps/pins.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 Blinkmuster berechnen

Code: python
# Ein Pin als Ausgang: bei jedem Tick wird das Bit umgeschaltet
port = 0
zeile = ""
for tick in range(10):
    if port & 1:
        zeile = zeile + "#"
    else:
        zeile = zeile + "."
    port = port ^ 1
print(zeile)
# Ändern Sie range(10) in range(6) und lesen Sie das neue Muster.

PWM schaltet den Pin zeitweise an

Der Timer zählt von 0 bis 15 und beginnt dann von vorn. Diese 16 Ticks sind eine Periode. Im Register OCR steht ein Vergleichswert.

Solange der Zähler kleiner als der Vergleichswert ist, ist Pin 5 hoch. Danach ist er tief. Der Anteil der Zeit, in der er hoch ist, heißt Tastverhältnis.

Beispiel: drei Vergleichswerte

VergleichswertTicks anTicks ausTastverhältnis
441225 Prozent
88850 Prozent
1212475 Prozent

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

Das Tastverhältnis ausrechnen

Code: python
# Eine Periode des Timers hat 16 Ticks. Der Pin ist an, solange der Zähler unter dem Vergleichswert liegt.
PERIODE = 16
vergleich = 6
zeile = ""
an = 0
for zaehler in range(PERIODE):
    if zaehler < vergleich:
        zeile = zeile + "#"
        an = an + 1
    else:
        zeile = zeile + "."
print(zeile)
print("Tastverhältnis:", an * 100 // PERIODE, "Prozent")
# Setzen Sie vergleich auf 12 und starten Sie erneut.

Das Lab-Skript probiert drei Vergleichswerte

Das Skript pwm.py setzt OCR nacheinander auf 4, 8 und 12. Für jeden Wert druckt es eine Periode als Zeichenmuster.

Danach folgen die Wörter on und off mit den Zahlen der Ticks, dann duty mit dem Anteil in Prozent. Die Werte stimmen mit der Tabelle oben überein.

Drei Tastverhältnisse nebeneinander zeigen

Befehl
docker exec jupyter python3 steps/pwm.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 häufiger Fehler

Warnung

Viele denken, PWM senke die Spannung am Pin. Der Pin ist aber immer ganz an oder ganz aus. Nur der Anteil der Zeit ändert sich. Eine Lampe oder ein Motor mittelt darüber, darum wirkt das Ergebnis schwächer.

Ü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.