1 Allgemeines

2 Aufbau

3 WINAMP Plugin

4 Installation und Konfiguration

5 Stand-Alone Betrieb

6 Kommunikation

7 Ansteuerung der Lampen

8 Downloads

9 HW-Varianten (serial, USB, wireless)

10 funny YouTube video clip with E-Stick /w AT90USB162 uC by Skero


Allgemeines:

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.





Aufbau:

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.

Aufbau

WINAMP Plugin:

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:
cross fading

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:
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 und Konfiguration:

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:
vu    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.

Light Spectrum Analyzer:
spectr    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.



Stand-Alone Betrieb:

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


Sämtliche Aktionen die im aktiven Modus genutzt werden können sind in der Auswahl-Box neben dem "Start"-Button angegeben. Bei einigen Aktionen muß ein Programm aus der linken Auswahl-Box selektiert werden. Folgende Aktionen sind im jeweiligen Modus verfügbar:
Generator Programmer

Mit den Häkchen unter den Lampensymbolen (8..1) kann die entsprechende Lampe dauerhaft eingeschaltet werden. Für den manuellen Betrieb können die Keyboard-Tasten 1-8 genutzt werden.



Kommunikation:

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.


Ansteuerung der Lampen:

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.
thyristor
* Der Triac kann beide Halbwellen effektiv steuern. Hier die beiden Halbwellen.
triac


Downloads:

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

HW-Varianten (serial, USB, wireless):


V1.3 USB (wireless)
Aufbau NRF USB V1.3
Note: Buy an UsbAsp- and two NFR-Board from ebay, because its cheaper than making a PCB. Connecting the second NRF-board with a naked Atmega8 and programing nrf_hid_server_usb.zip::nrf_hid_server_usb\nrf_light_receiver.hex into the MCU.


V1.3 USB (HID):
Aufbau HID USB V1.3


V1.2 + Pipe Server (LPT):
Aufbau V1.2


V1.0 + V1.1 (COM port only):
Aufbau

Hier einige Bilder der Prototypen.

Handhelt (Bedienteil) Leerplatinen (PCB) Aufbau mit Thyristor Aufbau mit Triac