Ambi-Light 2: 16bit PWM, 5 RGB-Kanäle

Inhaltsverzeichnis

 

1. Vorwort Inhalt

Wie bereits am Ende der Beschreibung zum ersten Controller angekündigt, ist das System nicht optimal. Gelegentliche Farbblitzer und zu geringe Auflösung in dunklen Bereichen bei 10 Bit hinterlassen einen nicht ganz so positiven Eindruck. Zwar könnte man mit Diffusionsfolie noch ein Stück weit kommen, eines Ingenieurs ist das aber nicht würdig 🙂

Es gilt daher, die vorhandenen Schwächen mittels neuer Hardware zu beseitigen. Im Wesentlichen sind das:

  • Software-PWM
  • Nur 10 bit Auflösung bei 75 Hertz PWM-Grundfrequenz
  • Insgesamt drei RGB-Kanäle, sprich 9 PWM-Kanäle

Die theoretischen Kapitel über Ambilight, Biologie (Gammakorrektur) und PWM aus dem Artikel Ambient Light im Eigenbau gelten auch für diesen Controller, es macht daher Sinn, den Artikel zuerst zu lesen, so noch nicht geschehen.

2. Atmels XMega-AVR Baureihe Inhalt

Wie schon in Ambient Light im Eigenbau (Seite 5) im Unterkapitel „MCU al­lei­ne oder mit de­di­zier­tem LED-?Trei­ber?“ beschrieben existierte bis dato keine vernüftige Hardware-Lösung, wenn mann einmal von FPGA-Programmierung absieht. Mittlerweile aber sind von Atmel Chips der Baureihe ATxMega lieferbar (waren seit Mitte 2008 angekündigt!). Sie zeichnen sich durch geringeren Stromverbrauch, einheitlicheres Hardware-Design und höhere Taktfrequenz aus.

Ich habe mich für einen ATxMega16A4 entschieden, da das TQFP44-Gehäuse noch einigermaßen im Eigenbau behandelbar ist, sowohl mit Ätzen wieauch zum Löten an sich. Außerdem bietet der Chip bereits alle Voraussetzungen, die wir für die neue Hardware brauchen:

  • 16 PWM-Kanäle mit je 16 Bit Auflösung
  • 5 USARTS (wir benötigen nur einen)
  • Taktfrequenz bis 32 Mhz
  • AES/DES-Crypto-Engine (die wir aber nicht brauchen)
  • 3,3V Betriebsspannung
  • 16 KByte Flash-ROM, optionaler Bootloader

Mit Mustern schauts relativ mau aus, ich hatte aber das Glück, bei Farnell welche zu bekommen. Leider gibt’s Stand heute (12/2009) bei Digikey nur die großen TQFP100 oder BGA-Gehäuse, offenbar dürfen sie wegen der AES-Crypto-Engine nicht exportiert werden, in den USA wären sie nämlich lieferbar. Das soll einer verstehen, vor allem, weil die großen die Crypto-Funktionen ebenfalls besitzen.

3. Schnittstelle am PC Inhalt

Etwas länger habe ich überlegt, ob Version 2 für die Datenübertragung wieder eine USB-Schnittstelle bekommen soll. Der FTDI-Chip hätte nämlich einige Vorteile. Nicht nur, dass er fast ohne externe Bauteile auskommt und sich vollständig um die Kommunikation mit dem PC kümmert, er hätte auch einen 3,3V Ausgang, um den Atmel mit Strom zu versorgen.

Ich habe mich dann aber dagegen entschieden, im Wesentlichen aus zwei Gründen:

  1. Das Teil ist schweineteuer. Fünf EUR beim Reichelt sind mir einfach zu viel, v.a. wenn es ein ganzes Kabel bei eBay für knapp 4 € gibt.
  2. Aus Erfahrung mit dem ersten Controller weiß ich, dass das System einen Standby mit geöffnetem COM-Port nicht überlebt, sprich man mußte den Controller nach jedem Aufwachen des Rechners erst einmal wieder abstecken und wieder hinstecken, damit der COM-Port wieder existierte. Die Software Boblight erkennt einen Standby aber nicht und läßt den COM-Port ständig offen. Das funktioniert unter Windows XP aber nur mit einer Hardware-Schnittstelle zuverlässig.

Der neue Controller wird deswegen keinen USB-Anschluss bieten. Wer möchte, kann sich einen mittels USB2Serial-Kabel selbst konstruieren, sei aber darauf hingewiesen, dass das bei mir nicht richtig funktionierte.

Hinweis: Auf der Platine sind die RX-/TX-Leitungen der seriellen Buchse vertauscht. Man kann den Controller daher nur mit einem Nullmodem-Kabel betreiben. Wenn ihr einen USB2Serial-Adapter benutzt, wird der nicht direkt an der Buchse funktionieren. Entweder ihr zieht die Leiterbahnen neu, oder schaltet noch ein Nullmodem-Kabel zwischen Controller und Adapter.

12 Kommentare zu “Ambi-Light 2: 16bit PWM, 5 RGB-Kanäle”

1.   Kommentar von Herman Oving
Erstellt am 22. März 2010 um 12:26 Uhr.

Hallo. Klasse gemacht. Wir überlegen ob wir die Daten nicht per PWM rausschicken, sondern als DMX. Der dmx receiver macht dann den PWM Teil, zB eine PAR oder moving head oder LED rgb light.
Ein Atmel mit dmx zu versehen ist nicht viel arbeit. Jedoch erst mal in dein Code einsteigen. Theoretisch brauche ich nur einen hex Wert zwischen 0 und 255 pro r,g oder b. Also 12 Kanäle( 4 * rgb) Mal sehen wo ich den am besten abgreife. Leider ist mein c nicht besonders gut. Bislang verwende ich nur assembler. Den PWM Teil werde ich dann weg lassen. Noch habe ich dein Code noch nicht mal detailliert angeschaut.
Vielen Dank und mal sehen ob das Projekt was wird.
Fabian & Herman Oving

2.   Kommentar von McSeven
Erstellt am 22. März 2010 um 14:59 Uhr.

Hi, Danke. Ich hab nur nicht genau verstanden, was ihr machen wollt? Soll es ein Seriell-zu-DMX-Konverter werden? Da schaut mal unter http://www.mikrocontroller.net, da gibt’s einiges zum Thema. Ziel dieses Projektes sollte ja genau die PWM-Ausgabe sein…

3.   Kommentar von hurra
Erstellt am 27. März 2010 um 15:12 Uhr.

Gibts den kompletten Quellcode auch nochmal zum Runterladen?

Danke

4.   Kommentar von McSeven
Erstellt am 27. März 2010 um 18:33 Uhr.

Hi, das versteh ich inhaltlich nicht. Auf Seite drei hast Du den gesamten Quelltext der Firmware. Mehr ist’s nicht. Und für die Sourcen von Boblight mußt Du auf seiner Seite schauen…

5.   Kommentar von hurra
Erstellt am 28. März 2010 um 13:39 Uhr.

c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avrxmega2/crtx16a4.o:(.init9+0x0): undefined reference to `main‘

Was mache ich falsch?

6.   Kommentar von McSeven
Erstellt am 05. April 2010 um 12:42 Uhr.

alles klar, es war ein dummer Fehler beim Kopieren und Einfügen, ich habe die neueste und vollständige Version eingebaut. Sollte funktionieren… Danke für den Hinweis.

7.   Kommentar von hurra
Erstellt am 03. Mai 2010 um 16:39 Uhr.

Hallo nochmal.

Ich konnte das Projekt erfolgreich nachbauen! Funktioniert super.

Die Schaltung hat aber imho noch ein Problem: Die Sende- und Empfangsleitung zwischen MAX und dem COM-Anschluß sind gekreuzt.
Darum wird im aktuellen Schaltplan ein Nullmodemkabel zwischen PC und Platine benötigt. Bei der Verwendung eines USB-Serial-Adapters muss das gekreuzte Nullmodemkabel zusätzlich noch eingefügt werden.

Ich würde die Kreuzung auf der Platine entfernen und Stattdessen eine normales Modemkabel verwenden (siehe hier: http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART)

Bei mir funktioniert das ganze mit dem USB-Serial-Wandler problemlos

Danke!

8.   Kommentar von McSeven
Erstellt am 03. Mai 2010 um 19:22 Uhr.

Sehr schön, freut mich, wenn es klappt. Wegen des UART haste Recht. Hintergrund ist, dass ich noch ein paar dieser Kabel mit 5m Länge daheim liegen hatte und dafür das Gerät entworfen habe. Es ist so aber tatsächlich keine saubere Umsetzung. Danke für den Hinweis.

9.   Kommentar von hurra
Erstellt am 04. Mai 2010 um 00:20 Uhr.

Das einzige, was mir negativ auffällt ist die große Verzögerung. Gerade beim Filmen mit schnellen Farbwechseln ist dies stark zu bemerken. Es sind vielleicht 0.4 Sekunden. Konntes du dieses Delay auch feststellen? Woran liegt das? An der boblight-Software (1.3)? Gibt’s Abhilfe?

10.   Kommentar von McSeven
Erstellt am 04. Mai 2010 um 09:22 Uhr.

Hm, das kann imo an mehreren Dingen liegen:
a) USB2Seriell macht Ärger -> mit reiner HW-Schnittstelle testen.
b) Parameter „proportional“ in der boblight.conf steuert die Farbübergänge. Je größer, desto sanfter.
c) Desktop-Komposition in Vista und 7 aus?

Ansonsten schau Dir das Video an, so tuts bei mir; ich glaube nicht, dass es da Verögerungen gibt. Ich hab auch schon jerry bruckheimer filme gesehen auf dem system, da „klebten“ die LEDs an dem Blitz am Anfang. Sollte also kein Systemfehler sein.

11.   Kommentar von hurra
Erstellt am 05. Mai 2010 um 13:12 Uhr.

Ich konnte das Problem wesentlich kleiner machen. Das von mir verwendete boblight-X11 kennt einen Parameter -t, mit dem die Abtastzeit eingestellt wird. Standard sind 0.5 Sekunden. Wenn man den Wert kleiner macht reagiert er viel schneller, jedoch braucht er dabei auch ziemlich viel CPU-Leistung.

Etwas Verzögerung bleibt zwar trotzdem noch, damit kann man aber durchaus leben.

Außerdem hoffe ich, dass dies bei der neuen Version von boblight besser wird. Leider kann ich die Entwicklerversion derzeit nicht testen, da boblight-X11 immer mit ner Fehlermeldunng abschmiert (Bug ist reported bei google-code)

12.   Kommentar von hurra
Erstellt am 27. Mai 2010 um 11:55 Uhr.

Nochmal Feedback.

Hab jetzt doch die neue Version aus dem Google-Code-Repository zum laufen bekommen. Mit dieser Version sind wesentlich kleinere Abtastzeiten möglich. Standardmäßig sind 0.1 Sekungen eingestellt, aber auch 0.05s gehen bei mir problemlos.

Damit ists jetzt endlich so flott, wie von mir erwartet 🙂

Danke!

Einen Kommentar hinterlassen