Embedded-Systems-Lab: Register, Pins, PWM und Interrupts an einem simulierten Chip
Dieses Lab gibt jeder lernenden Person ein eigenes JupyterLab mit einem kleinen erfundenen 8-Bit-Chip, geschrieben in schlichtem Python, sodass sich jede Zeile lesen lässt. Der Chip hat sieben Register, eine Uhr, die in Takten weiterläuft, einen Timer, der einen PWM-Pin ansteuert, und einen Taster, der einen Interrupt auslöst. Der Arbeitsordner enthält den Chip, mcu.py, ein Start-Notebook und kurze Skripte mit je einer Idee.
Es ist ein Simulator eines Chips, den es nicht gibt, kein echtes Board, und echte Chips unterscheiden sich: Sie haben mehr Register, andere Namen und viel mehr Regeln, für einen echten liest man also das Datenblatt. Es ist auch kein Angriffs-Lab. Jede Kopie hat keine Verbindung zum Internet und keine zu anderen Lernenden.
Was die Lernenden lernen
Dass ein Register ein Byte ist, dessen Bits jeweils etwas bedeuten, ausgegeben binär, hexadezimal und als gewöhnliche Zahl. Dann einzelne Bits mit einer Maske setzen, löschen und umschalten, einen Pin mit dem Datenrichtungsregister zum Ausgang machen, ihn ansteuern und zurücklesen, und ein Blinkmuster über acht Takte. Danach ein Timer und ein Vergleichswert, die ein PWM-Signal erzeugen: Vergleichswerte von 4, 8 und 12 bei einer Periode von 16 Takten ergeben 25, 50 und 75 Prozent. Zuletzt ein Taster, der prellt: Eine Abfrageschleife zählt einen Druck als zwei, und ein Interrupt ruft seinen Handler für dieselben zwei Flanken auf, bis der Handler das Prellen abwartet. Passt zu Einführungen in eingebettete Systeme, Rechnerarchitektur und Elektronik.
Im Browser ausführen
Das Lab startet einen einzigen Dienst, jupyter, der den Chip, das Notebook und die kurzen Skripte in seinen Arbeitsordner schreibt und nach wenigen Sekunden bereit ist, innerhalb der 512 MB, die ein Dienst haben darf. JupyterLab verlangt kein Token, weil die Tür der Plattform bereits weiß, wer es öffnet. Das Terminal neben dem Lab hat kein eigenes Python, es erreicht das des Labs also mit docker exec jupyter, gefolgt vom Befehl, der darin laufen soll. Jedes Skript gibt jedes Mal dasselbe aus.
- Container-Seite öffnen. Öffnen Sie in der Leiste „Entwickeln“ und wählen Sie „Einen Container ausführen“. Die Seite kann jeder öffnen, und das Git-Lab und das SQL-Lab starten ohne Konto. Alle anderen Labs brauchen ein kostenloses Konto: Erstellen Sie eines, melden Sie sich an und klicken Sie dann auf „Starten“.
- Lab suchen. Die Karte „Beispiel-Labs“ listet alle Beispiele auf. Suchen Sie JupyterLab: eingebettete Systeme mit einem simulierten Chip.
- Auf „Starten“ klicken. „Starten“ führt das Lab unverändert mit einem einzigen Klick aus. „Zuerst die Datei bearbeiten“ öffnet die Compose-Datei, damit Sie sie vor dem Start ändern können.
- Öffnen. Auf der Seite des Labs hat die Lab-Leiste einen Link namens JupyterLab: Klicken Sie darauf, um JupyterLab im Browser zu öffnen, und doppelklicken Sie auf start.ipynb. Klicken Sie dann auf „Terminal öffnen“ und tippen Sie docker exec jupyter python3 steps/registers.py, um die sieben Register zu sehen, nach einem Reset alle 0b00000000.
Was die Lernenden abgeben sollen
Ein kurzes eigenes Skript oder Notebook, das mcu.py importiert, etwa ein eigenes Blinkmuster über acht Takte oder ein PWM-Signal mit einem selbst gewählten und berechneten Tastverhältnis, aus JupyterLab mit File, Download heruntergeladen. Dazu ein bis zwei Sätze in eigenen Worten, was die Register gezeigt haben. Nichts wird automatisch bewertet: Der Satz zeigt, ob es verstanden wurde. Für anspruchsvollere Arbeit verlangen Sie einen Taster-Handler, der einen Druck nur einmal zählt, und dass die Person sagt, worin sich der Simulator von einem echten Chip unterscheidet.
Eine Grundlagenlektion zu diesem Lab
Embedded Systems Basics ist eine kleine Lektion, die in diesem Lab abläuft. Darin listen die Lernenden den Arbeitsordner auf, geben die Register aus, setzen, löschen und schalten Bits um, steuern einen Pin an und lassen ihn blinken, erzeugen ein PWM-Signal mit drei Tastverhältnissen und vergleichen Abfrage und Interrupt an einem prellenden Taster, und öffnen dieselbe Arbeit dann im Start-Notebook.
Sie ist bewusst klein: Sie zeigt einer Lehrkraft, was eine in einem Lab ablaufende Lektion ist, und das Lab erledigt den Rest. Kopieren Sie sie in ein eigenes Modul, um sie zu ändern.
Der Code auf GitHub
Die Compose-Datei hat kein Dockerfile: Sie startet ein einziges öffentliches Standard-Image, das scipy-notebook der Jupyter Docker Stacks, auf ein datiertes Tag festgelegt, als eigenes Konto ohne Sonderrechte mit 512 MB Speicher. Das Image steht unter der Lizenz BSD-3-Clause und wird von uns nicht verteilt. Die Datei schreibt beim Start den Chip und die Skripte, jede Kopie gibt also dasselbe aus und nichts wird heruntergeladen. Die Grenzen sind ehrlich: Es ist ein einziger erfundener Chip, es gibt kein echtes Zeitverhalten und keine Elektronik, aus dem Internet lässt sich nichts installieren, und ein echtes Board hat mehr zu lernen. Beim Stoppen des Labs bleibt nichts erhalten, die Lernenden laden ihre Arbeit also vorher herunter.
Als Aufgabe stellen
Schreiben Sie in die Aufgabe, was abzugeben ist.
- Lab erstellen. Fügen Sie in Ihrem Modul eine Aufgabe hinzu und wählen Sie die Karte „Container-Lab“, dann „In einem GitHub-Repository“. Geben Sie https://github.com/mitsurutech/lab-embedded-sim mit dem Branch main an. Die Compose-Datei ist standardmäßig compose.yaml. Forken Sie das Repository zuerst, wenn Sie es ändern möchten, zum Beispiel um dem Chip ein weiteres Register zu geben.
- Veröffentlichen und ausprobieren. „Veröffentlichen“ legt den Commit fest, den Sie gesehen haben. Eine spätere Änderung im Repository verändert also kein Lab, das Sie bereits gestellt haben. Starten Sie zuerst Ihre eigene Kopie.
- Zuweisen. Weisen Sie es wie jede Aufgabe zu, auf Wunsch mit Fälligkeitsdatum, und schreiben Sie in die Aufgabe, was zu tun ist und was abgegeben werden soll.
- Abgaben bewerten. Öffnen Sie die Kopie einer lernenden Person und die abgegebene Arbeit, bewerten Sie sie und geben Sie sie mit einer Begründung zur Überarbeitung zurück, wenn mehr nötig ist.
Dieses Lab ausprobieren, und was es kostet
Mit einem kostenlosen persönlichen Konto können Sie die Grundlagenlektionen in diesem Lab durcharbeiten, mit genug kostenlosem Guthaben pro Monat für die meisten Lektionen und ohne Karte. Für eine Klasse sind die ersten 365 Tage für eine Schule kostenlos, für bis zu 50 Lernende; danach zahlt sie je lernender Person und Jahr, alle Labs inklusive und Lehrkräfte kostenlos.
Häufige Fragen
- Warum muss ich kein Token und kein Passwort eingeben?
- Die Webseite eines Labs ist nur über die Tür der Plattform erreichbar, die bereits weiß, wer Sie sind, und nur Sie und die Lehrkräfte Ihres Moduls hineinlässt. Deshalb wird JupyterLab ohne Token gestartet. Starten Sie es nicht so auf einem Rechner, den andere erreichen können.
- Warum nutzt das Terminal docker exec jupyter?
- Das Terminal des Labs bringt curl, psql und ein paar weitere Clients mit, aber kein Python. docker exec jupyter führt einen Befehl im Container des Labs aus, der Python hat. JupyterLab hat auch ein eigenes Terminal, unter File, New, Terminal.
- Ist das ein echter Chip?
- Nein. Es ist ein kleiner erfundener Chip, in Python geschrieben, damit sich die Ideen, die echte Chips teilen, Register, Bits, Pins, Timer und Interrupts, lesen und ausführen lassen. Ein echter Chip hat andere Registernamen und Bitpositionen, echtes elektrisches Verhalten und echtes Zeitverhalten, und nichts davon wird hier simuliert.
- Können die Lernenden den Chip ändern?
- Ja. mcu.py liegt im Arbeitsordner, kurz und kommentiert, sodass man ein Register hinzufügen oder die Timer-Periode ändern und die Skripte neu ausführen kann. Änderungen bleiben nur, bis das Lab gestoppt wird. Für einen anderen Chip für die ganze Klasse forken Sie das Repository, ändern die Datei, die die Compose-Datei schreibt, und stellen den Fork als Lab ein.