16. Dezember: Rudolph The Red Nosed Reindeer
Der Studiengang Computer Engineering hat sich Folgendes ausgedacht: Rentier Rudolph benötigt eine neue leuchtende rote Nase. Das muss natürlich eine stromsparende digitale Nase sein, also eine moderne LED-Nase.
Dafür braucht er:
- ein Nucleo Board (z.B. STM32L432KC)
- eine runde rote LED (5mm)
- einen Vorwiderstand (470 Ohm)
- ein Micro-USB-Kabel
- einen PC
Rudolph nimmt sich sein Nucleo Board und meldet sich kostenlos auf der Webseite ide.mbed.com an, damit er das Board online programmieren kann.
Rudolph bittet seine Freundin, eine Computer-Engineering-Studentin an der HTW Berlin, ihm beim Programmieren zu helfen. Diese sagt ihm nach kurzem Überlegen: "Du musst nur unter 'New' ein neues Projekt für die NUCLEO-L432KC-Plattform anlegen, als Template 'mbed OS Blinky LED HelloWorld' auswählen und dann auf Compile klicken. Das übersetzt den Quelltext aus der Programmiersprache C++ in Maschinencode für den Microcontroller auf dem Board." Rudolph macht, was ihm seine Freundin gesagt hat, und nach kurzer Zeit wird der fertig übersetzte Maschinencode als Datei zum Download angeboten.
Rudolph schließt sein Board mit einem Micro-USB-Kabel an einen freien USB-Anschluss seines Computers an. Dort erscheint ein neues Laufwerk, genauso wie bei einem USB-Stick. Rudolph muss nur noch die heruntergeladene Datei auf dieses Laufwerk ziehen, und das Board programmiert sich wie von selbst.
Nach wenigen Sekunden blinkt die LED, hurra! Leider ist die LED grün und das gefällt Rudolph gar nicht. Er kauft sich also zusätzlich eine runde rote LED (5mm) und einen Vorwiderstand von 470 Ohm, die er am Pin A1 an das Board anschließt und die Pinbezeichnung im Code anpasst: PA_1 statt LED1.
Rudolph ist sehr zufrieden mit seiner neuen Nase. Er hat gelesen, dass sein Microcontroller Board mehr Rechenpower besitzt als seinerzeit die Steuercomputer der Apollo-Mondkapseln.
P.S.: Man kann sich einen Papp-Rudolph ausdrucken/basteln mit einem kleinen Durchsteck-Loch für die LED-Nase [PDF]. Das Board lässt sich mit einer kleinen Powerbank oder einem 5V-USB-Netzteil versorgen. Man kann den Code noch vielfach erweitern
P.P.S.: Hier noch ein verbesserter Code "auf/abschwellendes Blinken" (rote LED an Pin A1):
#include "mbed.h"
int main()
{
PwmOut led(PA_1);
led.period(0.01);
float pulse = +0.01;
float delta = +1.25;
while (true) {
led = pulse;
pulse = pulse * delta;
if(pulse >= 1.00)
delta = 1/1.25;
if(pulse <= 0.01)
delta = 1.25;
wait(0.05);
}
}