Home
Übersicht
Hardware
|
SoftwarebeschreibungZiel war, eine Lichtorgel vollständig mit Software mit C zu entwickeln für den Raspberry Pi Pico. Das heisst, auch Audio-Frequenzfilter, Peakmessungen, Levelanpassungen usw. Da der Raspberry Pi Pico zwei Prozessor-Kerne besitzt, wurde die
gesamte Lightcontroller Software im Core_1 implementiert. Der Core_0
übernimmt das "User Interface". Dieses behandelt eine 2-Tasten Bedienung, mit welcher man die Helligkeit der Lampen einstellen kann (beschrieben bei der
Hardware). Auch vom User Interface gesteuert wird die Onboard-LED, welche den Pegel des Eingangssignals anzeigt. Eine Übersicht zur Software zeigt dieses Blockschema: Damit die Filter eine einigermaßen stabile Qualität liefern, wurde
eine Abtastrate von 48'000 Messungen pro Sekunde gewählt (48kSPS).
Damit lässt sich ein Frequenzfilter mit einer Grenzfrequenz von 5kHz und tiefer
ziemlich gut realisieren. Die ganzen Signale, Filter, Peakmessungen, Levelmessungen und Anpassungen wurden Ausschließlich mit Integer-Mathematik aufgebaut. Integer-Mathematik läuft ein vielfaches schneller als Fließkomma-Mathematik. Dies spürt man insbesondere bei kleinen Prozessoren wie z.B. der 8051 mit seiner 8-Bit Mathematik. Aber auch der Cortex-M0+ wie im Raspberry Pi Pico verbaut, rechnet da einiges schneller, obwohl er ein 32-Bit Rechner eingebaut hat und Multiplikationen in wenigen Taktzyklen ausführt. Dafür kann man mehr Luxus einbauen wie die doppelte Filterung, z.B. für eine bessere Trennung zwischen den Frequenzbänder. (Vergleiche dazu das Blockdiagramm der 8051 Lichtorgel Der AD Wandler und der Fifo laufen beim Cortex-M0+ in der Hardware. Die
Levelanpassung ist so limitiert, dass der Level nicht unendlich angehoben wird
wenn kein Signal vorhanden ist. Sonst würden die Lampen schon vom Rauschen leuchten.
Die Onboard-LED zeigt an, wenn der Eingangspegel optimal ist. Die Level Messungen sind einfache Peak-Messungen: Die PWM Frequenz beträgt 1kHz, die Aussteuerung erfolgt quadratisch zum Level. Dies gibt optisch ein dynamischeres Bild. Zudem schaltet die Lampe erst ab einem Level von 25% ein so dass sie zwischen den Tönen auch aus geht. Das Tiefton Level Signal geht nochmal durch ein separates Filter um den Beat (Takt) herauszufiltern. Das Differenzsignal davon wird von einem Peak Detektor erfasst. Dabei wird der Signalpegel nach dem Differentiator gemessen, Die Signale, welche den Pegel überschreiten, lösen den Trigger aus, welcher einigermaßen dem Beat entspricht. Der Trigger wird wieder zurückgesetzt, wenn der negative Signalpegel unterschritten wird, was dann einer Hysterese in der Größe des mittleren Signalpegels entspricht. In einem Sequenzer wird dann je nach Konfiguration ein Lauflicht, Mix-Lauflicht oder Levelmeter getriggert wie bei der Hardware beschrieben. Die vom Benutzer einstellbare Helligkeit der einzelnen Lampen greift in der Level-Messung als Multiplikator ein so dass je nach Signalquelle die Lampen auf eine ausgewogene Helligkeit angepasst werden können. Ebenfalls vom Benutzer kann die gesamte Helligkeit eingestellt werden. Diese greift im Autolevel ein stellt den Ziel-Level ein der Level-Regelung ein. Dadurch gelangt mehr oder weniger Signal in die Filter. Dadurch wird auch klar, dass die Einstellung der Gesamthelligkeit
sowie der Low-Lampe (Rot) einen Einfluss auf die Beat-Erkennung hat. USB SchnittstelleEs gibt eine Benutzerschnittstelle via USB. Damit kann man
nebst der Helligkeit der Lampen auch die Filter Grenzfrequenzen
einstellen und Daten zum debuggen und optimieren ausgeben.
Steckt man den USB an einem Linux Rechner
ein, erhält man ein Device mit dem Namen ttyACM0. Dieses kann man z.B.
mit dem Tool "minicom" mit folgendem Befehl verbinden "minicom -b 115200
-o -D /dev/ttyACM0". Es geht aber auch ganz ohne Tools via Kommandozeile. Im Linux öffnet man 2 Shells, im einen gibt man ein: "cat
/dev/ttyACM0", da sieht man dann die Antworten. Im anderen gibt man ein:
"cat /dev/stdin > /dev/ttyACM0". Danach gibt man die Befehle ein, am
Ende jeweils die Enter taste drücken (↵). z.B. "? ↵"
gibt den Hilfetext aus, welcher alles nötige erklärt. Mit "A ↵" werden alle aktuellen Parameter angezeigt.
Möchte man z.B. den Bassfilter von 150Hz auf 100Hz ändern,
gibt man ein "L=100 ↵". Zum Speichern der Werte im Flash "S ↵" eingeben, alles zurücksetzen mit "D ↵". FiltertechnikFür die Filter Technik gibt es diese separate Seite über die Filtertechnik. Software SourcecodeDie Software wurde auf einem Raspberry Pi 400 (technisch identisch mit dem Pi 4B) entwickelt. Der Sourcecode sowie weitere wichtige Dateien, welche zum Compilieren
benötigt werden, können hier von einer Zip-Datei heruntergeladen
werden. Ebenfalls enthalten ist die Datei lightcontrol.uf2 im build
Verzeichnis. Dies ist der binäre Code, welcher in die Zielhardware
geladen wird. Der Sourcecode (lightcontrol.c) ist in einer einzige Datei
geschrieben. Das macht das verteilen, compilieren und debuggen
unkompliziert, ist aber vielleicht nicht so übersichtlich. Das
relativiert sich allerdings bei nicht mal 1000 Zeilen. Als Profi würde man vielleicht die Filter und Flash
Funktionen in separate Dateien auslagern und so umschreiben, dass sie wiederverwendet werden können. Zielhardware programmierenDazu wird folgendermassen vorgegangen:
|
||