Firmware (C++ Quelltext und vorkompilierte HEX-Dateien für Atmel ATtiny2313)

Um einen RGB-LED-Scheinwerfer steuern zu können, werden insgesamt drei PWM-Leitungen mit möglichst hoher Frequenz benötigt. In diesem kurzen Artikel wird eine Firmware vorgestellt, welche aus Hendrik Hölschers DMX-Empfangsbibliothek, Andreas Müllers LED Dimmer und meinem eigenen Code eine komplette LED-Scheinwerfer-Steuerung darstellt, die insgesamt vier hochfrequente PWM-Ausgänge zum Treiben von LEDs bereitstellt. Zusätzlich wird über eine Dimmerkurve das nichtlineare Verhalten der menschlichen Augen kompensiert, sodass ein hochqualitativer RGB(W)-LED-Dimmer möglich wird.

 

Die Kosten bleiben durch Verwendung des kleinen ATtiny2313 Mikrocontrollers von Atmel sehr gering. Aufgrund der geringen Anzahl an I/O-Pins des ATtiny2313 wird die DMX-Startadresse über einen Taster und den DMX-Kanälen 511 und 511 eingestellt. Zwei LEDs zeigen zudem den Betriebszustand an.

 

Da der DMX-Empfang und die Hardware-PWM kaum Speicher benötigen, ist im Controller noch einiges an Speicher für eigene Weiterentwicklungen frei. Es können z.B. automatische Abläufe, Sound2Light oder ein zusätzlicher Dimmerkanal einprogrammiert werden. Diese Funktionen sind allerdings für eine reine DMX-Steuerung und dem entsprechend mächtigen Steuerprogramm nicht nötig, wenn nicht sogar überflüssig, da sämtliche Effekte in der Regel vom Lichtprogramm übernommen werden.

 

 

Firmware:

Die Firmware kann zusammen mit dem Sourcecode im Downloadbereich heruntergeladen werden. Die Firmware bietet derzeit folgende Funktionen:

  • DMX512-Eingang
  • 4-Kanal Hardware-PWM für Rot, Grün und Blau und z.B. Weiß
  • Tastereingang für Einstellen der DMX512-Startadresse über DMX-Kanäle 511/512
  • 2 LED-Ausgänge für Statusanzeige (Bereitschaft und DMX-Empfang)
  • freie I/Os für eigene Erweiterungen (darunter zwei AD-Kanäle)
  • noch 25% freier Platz im Chip für eigene Entwicklungen
  • Einstellbare Dimmerkurven in der Header-Datei des Sourcecodes (Code muss rekompiliert werden)

 

Die beiden Status-LEDs zeigen in der Originalfirmware den aktuellen Zustand der Firmware an. Es gibt derzeit folgende Kombinationen:

  1. Beim Einschalten des Mikrocontrollers leuchtet zunächst nur Gelb, dann nur Grün und nach erfolgreichem Start entsprechend des aktuellen Zustandes wie ab 2. beschrieben:
  2. Grün leuchtet dauerhaft: alles OK
  3. Grün leuchtet und Gelb blinkt gleichmäßig schnell: DMX512-Signal fehlt
  4. Grün leuchtet und Gelb blinkt/leuchtet: DMX-Werte werden geändert
Beim programmieren der Startadresse über den Schalter leuchten die LEDs entsprechend dem folgenden Muster:
  1. Taster wird gedrückt: Grüne LED blinkt langsam um Beginn der Programmierung zu signalisieren. Hier kann der Vorgang durch Loslassen der Taste sofort abgebrochen werden, ohne eine Änderung vorzunehmen
  2. Nach wenigen Sekunden blinkt die Grüne LED schnell. Hier wird auf die Informationen des Kanals 511 und 512 gewartet, von denen die Startadresse gelesen wird
  3. Nach erfolgtem Auslesen der beiden Kanäle blinken Grün und Gelb gleichzeitig. Die Startadresse wurde erfolgreich ins EEPROM geschrieben. Der Taster kann nun losgelassen werden. Die grüne LED leuchtet nun wieder konstant.

 

Es kann derzeit zwischen insgesamt drei Dimmerkurven gewählt werden: Linear und zwei logarithmische Varianten. Variante 2 der Logarithmuskurve dürfte für die meisten LEDs passen. Die lineare Kurve kann für das Steuern weiterer Hardware per PWM oder für eine mögliche D/A-Wandlung benötigt werden:

rgbw_dimmerkurven

 

Einstellen der DMX-Startadresse:

Die Startadresse wird von den beiden letzten DMX512-Kanälen eingelesen, sobald der Taster an PD3 (bzw. PD6 im älteren Layout) längere Zeit gehalten wird. Um den Controller auf Startadresse 7 einzustellen, muss Kanal 511 auf 0 und Kanal 512 auf 6 eingestellt werden. Möchte man Adresse 400 einstellen, muss Kanal 512 auf 144 und Kanal 511 auf einen Wert größer 0 eingestellt werden. Die Adresse wird im EEPROM abgespeichert, sodass auch nach einem Neustart und Ausschalten des Gerätes die Adresse gespeichert bleibt.

 

 

Schaltplan:

Hier ein kleiner Schaltplan, um die Funktion zu verdeutlichen. Es können über MOSFETs beliebig viele RGB(W)-LEDs oder entsprechend einzelne R-,G-,B-(,W-)LEDs angeschlossen werden

DMX512RGBSteuerung_thumb

 

Schaltplan ist im Downloadbereich im Eagle 5.6.0-Format herunterladbar.

 

PCB:

Dank des Users "Sascha G" aus dem PC_DIMMER Forum, gibt es nun auch ein PCB zum RGBW-Dimmerpack. Das Eagle-Projekt samt Schaltplan kann hier heruntergeladen werden: Download

dmx_rgbw_pcb