DF10CH

Aus VDR Wiki
Wechseln zu: Navigation, Suche


Diese Seite befindet sich momentan im Aufbau
Durchflieger 13:15, 4. Feb. 2010 (UTC)
Bei Fragen, nutzen Sie bitte folgende Diskussionsseite.
Danke



Inhaltsverzeichnis

Beschreibung

Autor: Andreas Auras

Diese Seite soll eine Anleitung zum Nachbau meines selbst entwickelten "next generation" Atmolight Kontroller sein. Viele Ideen zu diesem Projekt basieren auf dem wunderbaren Atmolight Projekt dessen Entwicklern ich hier nochmals für Ihre Arbeit danken möchte. Bei diesem Projekt handelt es sich um eine völlige Neuentwicklung bei der die höchste Priorität auf einen einfachen und preiswerten Nachbau liegt.

Bilder des Kontroller

Platine von oben
Platine von unten
Platine von der Seite
Platine von der Seite
LED-Stripe mit Anschlusskabel

Features

Ein Kontroller bietet 30 PWM Kanäle für 10 RGB-Gruppen und zusätzlich einem gemeinsamen PWM-Helligkeitskanal.

PWM-Frequenz der RGB-Kanäle variable 50 - 400Hz. Die Auflösung ist abhängig von der PWM-Frequenz und beträgt bei 100Hz 1111 Schritte. Die PWM-Frequenz des gemeinsamen Helligkeitskanal beträgt 62,5kHz.

Die Verbindung zum Rechner erfolgt per USB-Schnittstelle. Mehrere Kontroller können parallel jeweils an einem eigenen USB-Anschluss betrieben werden.

Flexible und komfortable Konfiguration ein oder mehrerer Kontroller mittels einem eigenem grafischen Setup-Programm. Hierbei können alle PWM-Kanäle nur durch Software-Konfiguration den Ausgängen zugeordnet werden. Kanalzuordnung, Weissabgleich und Gammaeinstellung per Setup-Programm individuell für jeden Kanal einstellbar.

Angesteuert werden kann der Kontroller zur Zeit von meinem Xine-Atmolight-Plugin ab Version 0.3. Dieses findet die Kontroller automatisch und liest die Konfiguration aus dem jeweiligen Kontrollern aus. Die Datenverteilung zu mehreren Kontrollern erfolgt im Xine-Atmolight-Plugin.

Die Hardware besteht nur aus bedrahteten (kein SMD) gut erhältlichen Bauteilen (gibt es alles bei Reichelt). Die Platine des Kontroller ist einseitig mit einer minimalen Leiterbahnbreite von 0,4mm geroutet und stellt somit keine großen Anforderungen an den Herstellungsprozess. Ich habe meine Platinen sehr preiswert bei der Firma Electronic Customs Daniel Berghoff herstellen lassen wo auch Einzelstücke bzw. kleine Mengen bestellt werden können. Die gelieferte Qualität reicht für dieses Projekt vollkommen aus.

Es können LED-Stripes mit gemeinsamer Anode oder Kathode verwendet werden. Als LED-Treiber werden ULN2803 oder UDN2981 verwendet womit jeder Kanal maximal 500mA und maximal 50V haben darf. Die Gesamtverlustleistung eines Treiber-IC ist allerdings zu beachten da diese deutlich geringer ausfällt als die Summe der Kanäle eines Treibers!

Der zusätzliche gemeinsame Helligkeitskanal ist dafür gedacht, maximale Helligkeit bei den LED-Stripes zu erreichen. Hierfür wird eine Stromversorgung mit etwas höherer Ausgangsspannung benötigt als die nominale Betriebsspannung der LED-Stripes um die Spannungsverluste von ca. 0,5-0,8V an den Treiber-ICs auszugleichen. Weiterhin erreicht man mit diesem zusätzlichen Kanal, dass man die Gesamthelligkeit aller LEDs einstellen kann unabhängig von den einzelnen RGB-Kanälen. Zwar kann man die Gesamthelligkeit auch im Rahmen des Weissabgleich, oder noch schlechter mittels der Parameter des Atmolight-Plugin einstellen, jedoch verliert man hier immer gleichzeitig auch an Auflösung der Kanäle.

Die Firmware für die beiden eingesetzten AVR ATMega Mikrocontroller beinhaltet eigene Bootloader womit ein Update der Firmware direkt aus dem Setup-Programm möglich ist.

Da ich meine vorhandenen LED-RGB-Stripes, die sich alle 12cm elektrisch aufteilen lassen, unbedingt weiter verwenden wollte, habe ich mich für ein zentralistisches Konzept für den Aufbau des Kontroller entschieden. Dass hat allerdings den Nachteil, dass viele Verbindungsleitungen vom Kontroller zu den LED-Stripes notwendig sind womit akut die Gefahr eines Kabelsalat hinter dem TV besteht. Letztendlich habe ich mich hier auf Verbindungen per RJ11 Buchsen und Stecker entschieden. Bei Reichelt bekommt man sehr preiswert fertig konfektionierte Verbindungskabel (Telefonzuleitung) mit schönen schwarzen Flachbandkabel dass sich einigermaßen vernünftig und platzsparend verlegen lässt. (Siehe Bilder oben)

Hardware

Schaltplan DF10CH Kontroller


Die Schaltung ist recht einfach aufgebaut und erklärt: Die Hauptarbeit auf dem Kontroller teilen sich zwei AVR ATMega Prozessoren. IC6 ist für die USB-Schnittstelle verantwortlich und wird nachfolgend der USB-Prozessor genannt. IC1 ist für die Generierung der PWM-Signale verantwortlich und wird nachfolgend der PWM-Prozessor genannt. Beide Prozessoren kommunizieren seriell mittels ihrer USART-Schnittstellen bei 125KBaud miteinander.

IC2-IC5 sind die RGB-Treiber die wahlweise mit den Typen ULN2803 für LED-Stripes mit gemeinsamer Anode(+) bzw. mit den Typen UDN2981 für LED-Stripes mit gemeinsamer Kathode(-) bestückt werden.

Bei Betrieb mit gemeinsamer Anode(+) sind die Anschlüsse P1<->P2 und P7<->P8 mittels zwei Drahtbrücken zu verbinden.

Bei Betrieb mit gemeinsamer Kathode(-) sind die Anschlüsse P2<->P3, P4<->P5 und P6<->P7 mittels drei Drahtbrücken zu verbinden.

Die Stromversorgung der LED-Stripes erfolgt über die Buchsen J1 und J2. Die zweite Buchsen wird nur benötigt wenn man mittels einem zusätzlicher Verbindungskabel weitere Kontroller mit Strom versorgen möchte.

D3 und D4 sollten unbedingt 3,6V haben und low power Typen (0,5W) sein.

Q1 und Q2 bilden den Treiber für die gemeinsame Helligkeitssteuerung. Die Zener-Spannung von D1 hängt von der LED Betriebsspannung VDD ab und es sollte der größte Normwert <= VDD - 5,5V gewählt werden. Weiterhin ist hier mindestens ein 1,3W Typ einzusetzen. Wer die Helligkeitssteuerung nicht braucht weil er z.B. keine Stromversorgung mit überhöhter Spannung einsetzen will, kann die Bauteile inklusive R2-R5 und D1 einsparen. In diesem Fall ist eine Drahtbrücke zwischen Source und Drain bei Q2 einzusetzen.

Der Jumper JP1 dient dazu, den Bootloader des USB-Prozessor zwangsweise zu starten. Dass wird aber nur notwendig sein wenn der Firmware-Update mal sehr unglücklich unterbrochen wurde.

Die LED D2 signalisiert einen Betriebsbereiten PWM-Prozessor. Sie blinkt (oder besser flackert) wenn Daten von PC gesendet werden.

Firmware

Die Firmware besteht aus vier separaten Programmen: Bootloader USB-Prozessor, Applikation USB-Prozessor, Bootloader PWM-Prozessor, Applikation PWM-Prozessor.

Die Programme des USB-Prozessor setzen für die Kommunikation über USB die Software-Emulation V-USB der Firma Objective Development ein. Das hat den Vorteil dass für die USB-Schnittstelle keine speziellen Prozessoren benötigt werden. Allerdings ist zu beachten, dass diese Methode sowohl von der elektrischen als auch protokolltechnischen Realisierung nicht 100% konform zum USB Standard ist. Nichtsdestotrotz funktioniert die Methode bei mir auch bei USB-Zuleitungen von 3m sehr zuverlässig wenn die Controller direkt am USB-Anschluss des PC gesteckt sind. Problem gibt es allerdings bei mir wenn ich meinen (sehr preiswerten) 4-fach USB-Hub einschleife da dann Fehler in der Übertragung entstehen. Den Betrieb mit einem USB-Hub kann ich deshalb erst einmal nicht empfehlen.

Für den privaten gebraucht steht das V-USB unter GPL zur freien Verfügung. Über die genauen Lizenzbedingungen sowie die Vor- und Nachteile dieser Lösung informiert die Web-Seite des Herstellers sehr ausführlich. Siehe die Links am Ende dieser Seite.

Zum übersetzen der Firmware wird der avr-gcc benötigt.

Die Prozessoren müssen mit einem AVR-Programmiergerät einmalig mit den Bootloader-Programmen geflasht werden. Ich habe hierfür keine ICP-Steckverbindungen auf der Platine vorgesehen da es hier wohl sowieso keinen richtigen Standard für die Pin-Belegung gibt (zumindestens mein Programmer ist hier exotisch :-). Ich habe das ICP-Kabel einfach direkt angelötet und nach dem flashen wieder entfernt.

In den Makefiles gibt es zum flashen mit avrdude entsprechende Ziele. Hier können auch die Werte für FUSE und LOCKBIT's entnommen werden. Mit dem Programmer im AVR-Studio können auch die .elf -Dateien verwendet werden die alle Informationen (flash, fuse, lockbits) enthalten. Wer möchte kann auch auf die Bootloader verzichten und direkt die Applikationen flashen. Die Makefiles bieten hier auch die notwendigen Ziele.

Setup-Programm

Für die Konfiguration der Kontroller gibt es ein in Python realisiertes Setup-Programm mit grafischer TCL/TK Bedienoberfläche. Es setzt eine installierte Python Umgebung der Version 2.6 voraus sowie zusätzlich das Python Modul PyUSB. Bei Debian basierten Linux sind das die Pakete python2.6, python-tk und python-usb.

Der Aufruf kann direkt aus dem Projektverzeichnis mit "python df10ch_setup.py" erfolgen. Alternativ kann das Programm auch mittels "python setup.py install" installiert werden.

Wer mit dem Programm erst einmal ohne Kontrollerhardware experimentieren möchte, kann es mit der Option -s N aufrufen wobei N die Anzahl simulierter DF10CH-Kontroller darstellt.

Das Programm öffnet beim Start gleich zwei Fenster wobei dass eine im Hintergrund rahmenlos den ganzen Bildschirm ausfüllt (Fullscreen-Window) und das zweite Fenster im Vordergrund herkömmlich erscheint. Das Vordergrundfenster bietet verschiedene Dialoge, die mit den Buttons auf der linken Seite ausgewählt werden können. Diesen sollten im Rahmen der Konfiguration möglichst nacheinander abgearbeitet werden.

Im Hintergrundfenster wird das konfigurierte Layout, womit die Anordung der LED-Stripes gemeint ist, grafisch in Form von Sektionen (Areas) am Bildschirmrand dargestellt. Bei richtiger Montage der Stripes am TV sollten die Sektionen weitestgehend mit der tatsächlichen Lage der jeweiligen LED's übereinstimmen.


Der Devices Dialog

Devices Dialog

Beim start des Programm scant dieses erstmal den USB-Bus nach Kontrollern ab und stellt die gefundenen Geräte in der Liste dar. Das scannen kann auch manuell mittels dem "Scan Devices" Button ausgelöst werden.

Auf der rechten Seite des Dialog werden zu dem gerade in der Kontrollerliste selektierten Gerät die Konfigurationsdaten angezeigt. Im Feld "Version" werden die Versionsnummern der Firmware sowie der vom Setup-Programm verwalteten und im Kontroller gespeicherten Daten angezeigt. Bei einem nur mit dem Bootloader geflashten USB-Prozessor erscheint hier "Bootloader USB: XX.XX". In diesem Zustand muss der Kontroller erstmal mit der USB-Prozessor Applikationsfirmware versorgt werden. Der Firmware Update wird durch betätigen des gleichnamigen Button im Dialog eingeleitet. Es erscheint ein Dateiauswahldialog in dem die passende Firmwaredatei ausgewählt werden muss. Diese speziellen Firmwaredateien haben alle die Endung ".dff" und für den USB-Prozessor wird hier "df10ch_usb_appl.dff" gewählt. Es erfolgt nochmal eine Sicherheitsabfrage die bestätigt werden muss. Danach erfolgt der Firmware-Update für den USB-Prozessor, der praktischer weise gleich vom Programm für alle angeschlossenen Kontroller durchgeführt wird.

Nach erfolgreichen Update sollte im Feld "Version" nun "USB: XX.XX Bootloader PWM: XX" erscheinen. Wie man sieht ruft der PWM-Prozessor nun auch nach seiner Applikationsfirmware die nun auf gleiche Weise zu installieren ist. Im Dateiauswahldialog anstatt "df10ch_usb_ctrl.dff" dann aber die Firmwaredatei "df10ch_pwm_appl.dff" auswählen.

Nach diesem erfolgreichen Update sollte im Feld "Version" nun "USB: XX.XX PWM: XX" erscheinen und wir können jetzt endlich mit der eigentlichen Konfiguration loslegen.

Auf der rechten Seite können für den selektierten Kontroller mittels der Slider die PWM-Frequenz sowie die gemeinsame Helligkeit (Common Brightness) individuell eingestellt werden. Diese sollten aber erst einmal für die weitere Konfiguration auf den Standardwerten von 100Hz bzw. 255 belassen werden.

Mit dem Button "Store Setup" kann die aktuelle Konfiguration im Setup-Programm permanent in die Kontroller übertragen werden. Beim verlassen des Programm mittels des Schließen-Button im Fensterrahmen erfolgt sicherheitshalber zusätzlich eine entsprechende Abfrage zum speichern.

Mit dem Button "Reset Setup" werden alle angeschlossenen Kontroller auf ihre "Werkseinstellung" zurückgestellt was gleichbedeutend ist mit dem Verlust der aktuellen Konfiguration.

Mit den Buttons "Backup" und "Restore" kann die Konfiguration des aktuell selektierten Kontroller in eine Datei gesichert bzw. aus dieser wieder gewonnen werden.

Der RGB-Areas Dialog

Areas Dialog

Als nächstes wird in diesem Dialog erst einmal das gewünschte und möglichst auch tatsächlich installierte Layout der LED-Stripes am TV konfiguriert. Hierzu einfach in den Spinboxes für die gewünschten Bereiche die Anzahl der Kanäle einstellen wobei hier nur für Top, Bottom, Left und Right mehr wie eine Sektion zulässig sind.

Die Eckbereiche zählen dabei jeweils als ein zusammengefasste Sektion der jeweiligen anliegenden Seite. Entsprechend sollten die LED's natürlich auch elektrisch "über Eck" verbunden sein. Ich habe die Eckbereiche eingeführt, um damit Kanäle bzw. Kontroller einsparen zu können. Die LED-Stripes an meinen 37" TV lassen sich in 21 Sektionen aufteilen. Mit der Einführung von zwei Ecksektionen werden nur noch 19 RGB-Kanäle benötigt und zwei Kontroller reichen dann eben aus.

Mit betätigen des "Apply" Button werden die erfassten Werten als Sektionen im Hintergrundfenster am Bildschirmrand dargestellt. Man kann jetzt die Lage der LED-Stripes anhand der dargestellten Sektionen sehr schön ausrichten.

Der Mapping Dialog

Mapping Dialog

In der Mitte dieses Dialog werden in einer Liste alle vorhandenen PWM-Kanäle aller angeschlossenen Kontroller aufgezählt. Jetzt gilt es, jedem PWM-Kanal eine Sektion sowie eine Farbe zuzuordnen.

Durch Selektion eines Kanal in der Liste wird der entsprechende Ausgang am Kontroller eingeschaltet und falls dort eine LED angeschlossen ist sollte diese jetzt am Bildschirmrand des TV aufleuchten. Man kann einen Kanal direkt in der Liste selektieren oder mittels der beiden Buttons "Next Ch" und "Prev Ch" durch die Liste navigieren.

Hat man einen Kanal gefunden bei dem eine LED leuchtet kann die Zuordnung erfolgen. Dazu einfach im Hintergrundfenster die Sektion mit der Maus selektieren, die am nächsten bei der leuchtenden LED liegt. Danach einen der Farbbuttons betätigen und zwar den mit der gleichen Farbe wie die leuchtende LED. Damit ist die Zuordnung für diesen Kanal bereits fertig und das ganze kann jetzt nach gleichem Schema für die nächsten Kanäle erfolgen.

Als nächstes ordnet man am besten die Kanäle der selben RGB-Gruppe zu. Eine RGB-Gruppe fasst immer die drei Kanäle zusammen, die auf einer Buchse im Kontroller herausgeführt werden. Sinnvollerweise sollte man so eine Gruppe dann auch auf die RGB-LEDs einer Sektion verbunden haben weil die Zuleitungen sich praktischerweise auch im selben Zuleitungskabel befinden. Seitens der Konfiguration ist das allerdings keine Notwendigkeit da hier jeder Kanal individuell zugeordnet werden kann.

Die RGB-Gruppen-Nummer wird in der Kanalliste als Zahl vor dem Punkt dargestellt. Der Unterkanal einer Gruppe ist die Zahl auf der rechten Seite des Punkt.

Wenn man seine Zuleitungen alle gleich mit den LED-Stripes verbunden hat, kann man die nächsten RGB-Gruppen nun im Schnellverfahren über die "channel group" Buttons des Dialog zuordnen. Dazu schaut man sich die Belegung der ersten bereits einzeln zugeordneten Gruppe an. In diese z.B. 1.1 -> green, 1.2 -> red, 1.3 -> blue dann kann dieses Schema mit dem Button GRB direkt zugeordnet werden. Verstanden?

Mit dem Button "Delete mapping" kann die Zuordnung des aktuell selektierten Kanal wieder aufgehoben werden. Man sollte nur die Kanäle zuweisen an denen auch tatsächlich LEDs angeschlossen sind weil damit nachher nur die wirklich notwendigen Daten zu den Kontrollern gesendet werden.

Der White Calibration Dialog

Dialog für Weissabgleich

Wird dieser Dialog selektiert, dann schaltet das Setup-Programm alle zugeordneten Kanäle (deshalb bitte unbedingt die Reihenfolge der Konfiguration beachten) ein und es sollten alle LEDs am TV aufleuchten. Weiterhin wird im Hintergrundfenster die Farbe weiß gesetzt.

Mit der Checkbox "Select All" wird die Wirksamkeit der drei farbigen Slider sowie der Spinbox Felder zum einstellen der Gammawerte bestimmt. Ist die Checkbox selektiert und eines der Bedienelemente wird zum verändern eines Wertes betätigt, dann wird dieser veränderte Wert in alle zugeordneten Kanäle übernommen. Ist die Checkbox nicht selektiert dann wird nur der Kanal der aktuell selektierten Sektion verändert. Die aktuelle Sektion wird durch einen gelben Rahmen im Hintergrundfenster angezeigt in dem natürlich dann auch eine andere Sektion mit der Mause selektiert werden kann.

Für die erste Konfiguration sollte die Checkbox selektiert werden und dann mittels der drei farbigen Slider der Weißabgleich erfolgen. Hierzu das ganze solange trimmen bis das Weiss im Hintergrundfenster mit dem (gemischten) Weiß der LED-Stripes übereinstimmt.

Als nächsten sollte der Gammawert, der getrennt für jede Farbe einstellbar ist, getrimmt werden. Hierzu betätigt man den rechten Slider "Brightness" der die Helligkeit aller LEDs sowie die Helligkeit im Hintergrundfenster gleichzeitig beeinflusst. Der Helligkeitsverlauf zwischen Hintergrundfenster und LED's sollte möglichst gleichmäßig sein. Falls bei unterschiedlichen Helligkeiten Farbstiche bei den LEDs auftreten, so kann man durch einstellen unterschiedlicher Gammawerte bei den Farben versuchen diese wegzutrimmen.

Falls nach diesem Grundabgleich einzelne Sektionen noch Farbstichigkeiten aufweisen, dann kann jetzt der Vorgang für jede einzelne Sektion individuell erfolgen. Hierzu die Checkbox "Select all" deselektieren und die gewünschte Sektion dann im Hintergrundfenster selektieren.

Der Common Brightness Dialog

Common Brightness Dialog

Wird dieser Dialog selektiert, dann schaltet das Setupprogramm alle zugeordneten Kanäle auf maximale Helligkeit.

Mit dem Slider "Brightness" kann jetzt der Kanal für die gemeinsamme Helligkeit aller angeschlossenen Kontroller gleichzeitig verändert werden. Im Dialog Devices kann, falls gewünscht, der Wert für jeden Kontroller danach noch individuell beeinflusst werden.

Werden die Kontroller mit einer höheren Betriebsspannung als die nominal Spannung der LED-Stripes betrieben, so kann mit der gemeinsamen Helligkeit auch die maximale Stromaufnahme der LEDs festgelegt werden. Hierzu sollte die tatsächliche Stromaufnahme aller LEDs, die man z.B. durch einschleifen eines Amperemeter in der Stromversorgung messen kann, entsprechend begrenzen bezogen auf die Summe der zulässigen Ströme der einzelnen LEDs. Da ein solcher Abgleich erst nach dem Grundkonfiguration erfolgen kann, muss sichergestellt sein, das bis dahin keine unerlaubt hohen Ströme fliessen die zu einer Zerstörung der LEDs führen kann. Am besten wird die erste Konfiguration erstmal mit einer Spannungsquelle durchgeführt, die nicht mehr als die Nominalspannung der LEDs liefert. Während dieser Konfiguration kann dann erstmal eine sehr niedrige Gesamthelligkeit eingestellt werden. Danach dann die endgültige Spannungsquelle anschliessen und langsam die Gesamthelligkeit hochregeln bis der gewünschte Wert erreicht wird.

Ich weise hiermit ausdrücklich nochmals darauf hin, dass der Betrieb mit überhöhter Betriebsspannung durch unsachgemässen Gebrauch oder auch z.B. Hardwarefehlern, amoklaufender Software etc. zur sofortigen oder vorzeitigen Zerstörung der LEDs führen kann!!!!!!

Erfahrungen im praktischen Betrieb

Zur Zeit befindet sich das Projekt noch in der Testphase bei mir. Bisher konnte ich Tests mit zwei Kontrollern durchführen die sehr vielversprechend verlaufen sind. An meinem recht schwachbrüstigen ZOTAC ION-ITX B Board mit Atom N230 single core, Ausgabe über VDPAU mittels vdr-xine-plugin und xine-ui liegt die Rechenlast bei 20 RGB-Kanälen bei ca. 50%. Und das inklusive aktiven autocrop Plugin. Auch bei HDTV (720p, 1080i) konnte ich bisher keine Beinflussungen feststellen.

Bezugsquelle / Download

Das Projekt mit Firmware, dem Setup-Programm sowie die in KiCad erstellten Schaltplan- und Platinendaten stehen auf vdr-developers.org bereit. Siehe Links. Weitere Informationen zum bauen und installieren findet Ihr in der README-Datei im Projektverzeichnis.

Links

  1. DF10CH Projekt mit git Repository und Download Bereich auf vdr-developers.org: http://projects.vdr-developer.org/projects/show/atmolight-controller
  2. Xine Atmolight Projekt mit git Repository und Download Bereich auf vdr-developers.org: http://projects.vdr-developer.org/projects/show/xine-lib-atmolight
  3. Diskussion zum DF10CH
  4. Diskussion zum nativen Xine Atmolight Plugin
  5. Das Original: Atmolight
  6. Diskussion zum AURORA
  7. Ein weiteres "next generation" Projekt: Solarstorm-plugin
  8. V-USB von Objective Development: http://www.obdev.at/products/vusb/index-de.html
  9. Preiswerte Platinenherstellung: http://www.electronic-customs.de
In anderen Sprachen