4 Installation und Konfiguration
9 HW-Varianten (serial, USB, wireless)
10 funny YouTube video clip with E-Stick /w AT90USB162 uC by Skero
Dieses Dokument beschreibt eine elektronische Lichtorgel, welches die Audiodaten (von WinAmp) analysiert und abhängig von der Auswertung Befehle f+r die Lampensteuerung generiert.
Zudem kann die Lichtanlage auch stand-alone von einem PC-Tool oder einem kleinem Handgerät angesteuert werden kann.
Die Steuerung (Befehle) der Lampen erfolgt seriell (RS232/USB) oder parallel (LPT) über ein einfaches Protokoll.
Für den Media/MP3-Player WinAmp können die Setups von der Winamp-Seite genutzt werden.
Vor einigen Jahren wurde ein ähnliches Projekt am parallelen Port (DiscoLitez) realisiert, jedoch findet man diese
Schnittstelle (LPT) kaum noch an neueren Notebooks. Erweiterung sind hier bedingt durch die "feste" Verdrahtung nicht so flexibel möglich.
Zudem werden für Erwiterungen und Modifikationen der Software auch immer die Sourcen benötigt.
Diese Gründe haben mich dazu bewegt eine eigene Hardware samt Softwareumgebung zu entwickeln und alle relevanten Informationen und Sourcen frei zugänglich zu machen.
Die "neue" Hardware nutzt ein serielles Protokoll zur Datenübertragung und kann demzufolge sehr einfach erweitert werden ohne Änderung der physikalischen Kommunikationsstrecke.
Neue HW-Varianten wie USB, LPT oder Funk können recht einfach über die Pipe angebunden werden. Entspechende Referenzanbindungen via HID-USB sind bereits realisiert.
Die Lichtanlage besteht aus einer kleinen Empfangseinheit (Microprozessor) und dem Leistungsteil zum Schalten der Lampen am 230V-Netz. Der Leistungsteil wird entweder per USB (direkt oder Funk), serieller oder paralleler Schnittstelle angesteuert. Hierdurch kann die eigentliche Lampensteuerung (Befehle) in unterschiedlichen Umgebungen (zB. diverse OS, Bedienteil, Plugin, eigenes PC-Programm, ...) integriert werden. In den Plugin-Versionen V1.0 und V1.1 wird nur die serielle Schnittstelle unterstützt. Ab der V1.2 können die Steuerbefehle über eine SW-Pipe umgelenkt werden. Mit der V1.3 wurde zudem die Lampensteuerung auf 16Bit erhöht.
LightCtrl Setups on WinAmp website:
V 1.1 | V 1.1 | V 1.2 + Pipe Server | V 1.3 + Pipe Server |
Die Lichtanlage kann mit dem WINAMP-PlugIn (vis_light.dll), welches von frydaysoft.de entwickelt wurde, effektiv eingesetzt werden.
In Kombination mit dem "cross fading"-Plugin (http://sqrsoft.com.ar)
wird die Lichtanlage zur vollwertigen Discoanlage. Das "cross fading"-Plugin übernimmt vollautomatisch das Mixen zwischen Musiktiteln.
Nachstehend ein Screenshot des Modules:
Das Plugin für die Lichtanlage (vis_light.dll) ist als Visualisierung-Plugin implementiert. Die Audiodaten sind nicht in jedem Plugin-Interface verfügbar!
Das DSP-API wurde hier nicht benutzt, damit parallel ein DSP-Effekt-Plugin (z.B. HAL-Effekt) aktiviert werden kann.
Im Plugin (vis_light.dll) sind zwei Sub-Module enthalten:
Light VU Meter: | Light Spectrum Analyzer: |
![]() |
![]() |
Beim VU Meter werden die vom WinAmp übergebenen (Audio)Daten in einen Pegelwert umgerechnet der als Trigger genutzt wird um ein zufälliges Muster zu erzeugen. Der Zufallsgenerator kann im CFG-Fenster parametriert werden. Im Pause-Mode können die Lampen per Num-Tasten geschaltet werden. | Beim Spectrum Analyzer werden die vom WinAmp übergebenen (Audio)Daten in 8 bzw. 16 (Frequenz)Bereiche klassifiziert. Die Steuerung der Lampen erfolgt hier kanalweise. Mit dem Mouse-Zeiger kann der Pause-Mode auf dem "Play"-symbol geschaltet werden. Nun kann auch manuell mit den Num-Tasten 1..8 bzw. SHIFT + 1..8 geschaltet werden. |
Installation:
Für dieses Plugin (vis_light.dll) gibt es keinen Installationsassitenten.
Es ist ausreichend die Datei "vis_light.dll" in den WinAmp-Ordner "C:\Programme\Winamp\Plugins" zu kopieren.
Das Plugin legt seine Konfiguratiosdaten im INI-File "plugin.ini" ab.
Damit das Plugin automatisch vom WinAmp gestartet wird, wenn dieser selbst gestartet wird, ist folgender Eintrag in "winamp.ini" zu aktivieren:
[Winamp]
...
visplugin_autoexec=1
Konfiguration:
Einstellungen, die in beiden Sub-Modulen gleiche Bedeutung haben sind im oberen Bereich des Konfigurationsdialoges angegeben.
Für beide Sub-Module ist der COM-Port vorzugeben, über den die Daten an die LightUnit gesandt werden.
Die "Entprellung" der (Audio)Daten kann mit dem "debounce"-Parameter eingestellt werden.
Der "retrigger"-Parameter wird als zeitliches Kriterium genutzt, damit ein ungewolltes Flackern der Lampen (schneller Update bei hoher Volatilität des Differenz-Kriteriums)
begrenzt werden kann. Mit dem "cmp_diff"-Parameter wird die Schwelle für das Differenz-Kriterium defniert.
Light VU Meter:
![]() |
Die Audio-Daten werden hier als Summe gemittelt (debounce). In zyklischen Zeitabständen (retrigger) wird die Differenz zum Vorwert (cmp_diff) betrachtet und daraus eine Taktung für die Lampenansteuerung abgeleitet. Mit "use wave data" werden die Audio-Daten genutzt und im anderen Fall die Spektrum-Daten. Zusätzlich kann definiert werden wieviele Lampen im Zufallsmuster wechseln dürfen (change_diff). Weiterhin ist parametriebar, wieviele Lampen im Zufallswert minimal an sein sollen und wieviele maximal an sein dürfen (min_lights / max_lights). Dadurch kann man "sanfteres" Musterwechseln erzwingen. | |
![]() |
Die (Audio)Daten werden in 8/16 Bereiche klassifiziert und für jeden Bereich wird ein "allgemeiner Summenwert" berechnet. Damit die (Lampen)Bereiche individuell pro (Frequenz-)Bereich konfiguriert werden können, wird pro Bereich die Verstärkung/Abschwächung parametriert. | |
Im Stand-Alone Betrieb übernimmt die Lichtsteuerung ein kleines Bedienteil. Alternativ kann diese Aufgabe auch von dem PC-Tool übernommen werden.
Dieses Tool kann wahlweise über Startparameter als Programmer für das Bedienteil oder als Emulation (Generator) ausgeführt werden.
Mit dem Bedienteil kann die Lichtanlage (LightUnit) auch ohne PC betrieben werden. In der vorliegenden Version können folgende Programme:
- 0: kein Programm/Stop
- 1..9: Userprogramme
- 10: Zufall
- 11: MIX
ausgeführt werden. Mit den 8 Tasten auf dem Bedienteil können die Lampen auch manuell gedrückt werden (z.B. Prog 0).
Die Userprogramme 1..9 sind im Festwertspeicher (Eeprom) hinterlegt und jeder Speicherbereich kann frei programmiert werden.
Das Programm 10 erzeugt zufällige Lichtmuster. Mit dem Programm 11 (MIX) können die Programme 1..10 kombiniert werden.
Die Geschwindigkeit für den Wechsel der Lichtmuster wird hier über ein einstellbares Zeitglied (Poti) vorgegeben. Es ist denkbar die noch verfügbaren Rescourcen im uC zu nutzen, um eine Auswertung eines Audiosignales durchzuführen. Im einfachsten Fall könnte aus dem Audiosignal ein Musiktakt abgeleitet werden.
Das PC-Tool (PCCtrl.exe) unterstützt folgende Start-Parameter:
-p 0/1 | programming mode |
-e 0/1 | COM emulation |
-t 1 | Trace on |
-s 0/1 | icon selection |
-f filename | loading on startup |
Generator | Programmer |
![]() |
![]() |
Das Kommunikationsprotokoll der Lichtanlage/Bedienteil/Plugin ist sehr einfach gehalten und berücksichtigt auch die eingeschränkten Rescourcen eines Microcontrollers.
Die Struktur des Protokolls erlaubt eine (Re)Synchronisation im Datenstrom und eine einfache Dekodierung. In den Sourcen sind entsprechende Implementierungen verfügbar.
Die serielle Schnittstelle ist mit 57600 Baud, 8N1 zu öffnen.
Nachstrehend der Framingaufbau: START LEN USR_DATA[LEN] END
START: | '>' |
LEN: | '0'..'F' |
USR_DATA[]: | ascii |
END: | '\n' |
Die eigentlichen Nutzdaten sind in USR_DATA[] enthalten. Im ersten Byte ist das Kommando hinterlegt. Anfragen führen einen Großbuchstaben und die entsprechende Antwort wird durch den Kleinbuchstaben gekennzeichnet. Hier nun die wichtigsten Befehle der LightUnit:
Command | Framing | Response |
Get Version | ">1V\n" | ">8vLC 1.00\n" |
Lamps (00=all off) | ">3L00\n" | ">3l:0\n" (0=ok) |
Lamps (80=MSB ON) | ">3L80\n" | ">3l:0\n" (0=ok) |
Lamps (FF=all on) | ">3LFF\n" | ">3l:0\n" (0=ok) |
Die speziellen Kommandos für das Handhelt sind in der Firmware dokumentiert.
Der Microcontroller ist durch Optokoppler vom Leistungsteil elektrisch isoliert. Zusätzlich sind auch im Strompfad der Lampen Schmelzsicherungen enthalten.
Die Lampen könnten (vom Optokoppler) per Relais oder per elektronischen Schalter gesteuert werden. Eine elektronische Ansteuerung kann mit Thyristoren oder mit Triacs realisiert werden.
Es wurden beide Varianten aufgebaut. Beim Einsatz von Thyristoren sind die Bauteile meist etwas preiswerter, jedoch werden dafür die Lampen dann nicht optimal ausgesteuert.
Kommt ein Triac zum Einsatz, so können die Lampen in beiden Sinushalbwellen ausgesteuert werden.
Für die Ansteuerung von Triacs können Optokoppler (z.B. MOC3042) eingesetzt werden, die bereits einen Nulldurchgangsdetektor im Chip integriert haben.
Hierduch werden die Lampen "saft" im Nulldurchgang zugeschaltet und es entstehen weniger Störungen im Stromnetz.
Die nachfolgenden Grafiken zeigen die Messungen (Last=60W Lampe) der Thyristor- und der Triac-Variante:
* Beim Thyristor kann nur eine Halbwelle effektiv gesteuert werden.
* Der Triac kann beide Halbwellen effektiv steuern. Hier die beiden Halbwellen.
nrf_light_receiver.png | 32 KB | NRF USB: Schematic LightControl via HID USB (receiver) |
nrf_hid_server_usb.zip | 350 KB | NRF USB: programming files (receiver+tranceiver), sources, Pipeserver |
sch_LC_HID.png | 13 KB | HID USB: Schematic LightControl via HID USB(uC) |
Light_Hid_FW.zip | 340 KB | HID USB: eagle files and FW for LightUnit with HID USB (check howto.txt in ZIP) |
HidPipeServer.zip | 165 KB | HID USB: HidPipeServer with sources (connects winamp with the HW) |
sch_LC_usb.png | 50 KB | rs232 + virtual com: Schematic LightControl via USB(uC) |
Light_usb_FW.zip | 190 KB | virtual usb com: eagle files and FW for LightUnit over USB (check info.txt in ZIP) |
sch_LC_1.gif | 35 KB | RS232: Schematic LightControl (uC) |
light_LC.zip | 40 KB | RS232: Eagle CAD LightControl (uC) |
light_fw.zip | 14 KB | RS232: HEX-File and Source for LightUnit-uC |
sch_LC_2.png | 14 KB | Light unit: Schematic Lamps with Triac |
light_triac.zip | 31 KB | Light unit: Eagle CAD Lamps with Triac |
sch_LC_2b.png | 16 KB | Light unit: Schematic Lamps with Thyristor |
light_thyr.zip | 40 KB | Light unit: Eagle CAD Lamps with Thyristor |
sch_HH.gif | 65 KB | Schematic Handhelt |
light_HH.zip | 95 KB | Eagle CAD Handhelt |
Handhelt_FW.zip | 5 KB | HEX-Files for Handhelt |
plugin.zip | 290 KB | DLL and sources WinAmp Plugin V1.0 / V1.1 / V1.2 + PipeServer / v1.3 |
PCCtrl.zip | 147 KB | PCTool Programmer/Generator |
Hier einige Bilder der Prototypen.
Handhelt (Bedienteil) | Leerplatinen (PCB) | Aufbau mit Thyristor | Aufbau mit Triac |