Samstag, 28. September 2013

Autonomous Light Controller - Platine

Heute ausnahmsweise kurz und knapp - die Platine ist bestellt. Die folgenden Bilder zeigen Screenshots des Layouts aus SketchUp heraus und das Video am Ende soll nur einen kurzen Überblick über die einzelnen Bereiche darstellen. In 8-10 Tagen werden die drei bestellten Platinen eintreffen, es bleibt also spannend. Ich werde bei Gelegenheit weiter darüber berichten.





Sonntag, 8. September 2013

Autonomous Light Controller - Dizzying Signal Processing

Wie ich in meinem letzten Post geschrieben habe gibt es neben dem Mikrocontroller noch einen weiteren Prozessor, es handelt sich dabei um einen TVP5146M2, von Texas Instruments. Dieser ist ein Videoprozessor, der in der Lage ist analoge Videosignale zu digialisieren und über eine bitparallele Schnittstelle (10- oder 20Bit breit) taktsynchron weiterzuleiten. Er unterstützt alle gängigen analogen Videosignale, wie beispielsweise alle PAL- und NTSC-Varianten. Als Übertragungsmedium wird CVBS, Component RGB und Component YPbPr unterstützt. VGA oder ähnliches nicht.

Die von diesem Prozessor ausgegebenen Videodaten werden nach dem Videostandard ITU-R BT.656 kodiert. Hierbei werden volle Bilder in Halbbildern nacheinander übertragen. Dabei wird - eine im DSP einzustellende - Unterabtastung verwendet. Bei der Übertragung wird durch die Unterabtastung deutlich an Bandbreite eingespart, ohne das es zu erheblichen Qualitätseinbußen kommt.

Der Takt zur Datenübertragung beträgt bei PAL/NTSC, einem 10Bit breiten Datenbus (entspricht 10Bit Farbtiefe) 27MHz, was einem Datenstrom von 27MBit/s ergibt. Leider ist der ATXMega hierbei schon komplett überfordert, da die Datenworte, am Bu,s nur ca. 18,5ns (Nanosekunden) anliegen, und dies drastisch kürzer ist als der Mikrocontroller (selbst bei Übertaktung auf 54MHz, 32MHz ist die empfohlene Obergrenze) erkennen kann.

Die Idee das System mit einem AVR XMega und diesem DSP aufzubauen scheiterte also recht früh in der Entwicklung, da auch der DSP nicht weiter um konfiguriert werden kann um die Übertragungsgeschwindigkeit bzw. die Bildauflösung zu reduzieren.

Jetzt könnte man sagen, dass man einfach einen anderen Mikrocontroller verwendet oder einen anderen DSP. Aber nein - das wäre zu einfach.

Der Flaschenhals bei dem Thema ist der Mikrocontroller. Setzt man nun einen deutlich schnelleren ein, mit dem die ITU-R BT.656-Signale nun verarbeitet werden können, steht man kurz darauf vor dem nächsten Problem sobald man moderne (digitale und hochauflösende) Videosignale verarbeiten möchte. Bei der Bildübertragung eines FULL-HD-Signales mit knapp 1280x1080 Pixeln, selbst mit 10Bit Farbtiefe sind deutlich höhere Taktraten als 27MHz notwendig um die Bilddaten in akzeptabler Zeit zwischen den Prozessoren zu übertragen. Ein Datenblatt eines anderen Signalprozessors (auf den ich in einem Späteren Post eingehen werde) gibt hier Taktraten von etwa 250MHz an. Es wird schnell klar, dass ein bezahlbarer Mikrocontroller hierbei einfach nicht hinterher kommt, so einfach die Lösung auch sein mag. Daher hab ich mich dazu entschieden einen anderen Ansatz zu verfolgen und den einfachen Weg zu verlassen.

Allerdings ist dieser Ansatz bei weitem komplexer und aufwendiger als einfach mehr Rechenleistung zu kaufen. Es geht dabei darum eigene eigene Hardware zu entwerfen, welche die vom DSP übertragenen Daten in Realtime empfangen kann, in der Lage ist diese zeitnah zu verarbeiten, und dem Mikrocontroller vor verarbeitet und in kleinen Portionen zur Verfügung zu stellen. Dazu gibt es aber mehr in einem der nächsten Posts...

Wie jedes mal habe ich in das Git-Repository die dazugehörigen Schaltpäne übertragen.

Freitag, 26. Juli 2013

Autonomous Light Controller - The FPGA Ambilight clone?

Wie angekündigt möchte ich hier nach und nach mehr Details über mein Projekt verraten. Dem aufmerksamen Leser ist sicher bereits schon aufgefallen, dass die Verlinkungen (Tags) zu den Posts in Kategorien fallen, in denen sich bereits kleine andere Projekte befinden.
Beispielsweise verwende ich als Mikrocontroller-Basis mein XMega-Evaluation-Board.
Genauer gesagt wurde dieses genau für diesen Zweck erstellt...

Letztendlich handelt es sich um eine Grundschaltung für den XMega und diversen Schnittstellen um das Board mit der anderen Peripherie anzubinden. Der Schaltplan ist im Bild rechts zu sehen. Ein Layout gibt es hierfür nicht, da das ganze auf Lochraster aufgebaut ist (Bilder unten).

Den Schaltplan (Eagle) zu dem Board ist auf GitHub Verfügbar...

Die Aufgaben dieses Boards sind die folgenden:

  1. Steuerung aller weiteren Komponenten wie dem FPGA-Board und dem Signalprozessor.
  2. Kommunikation und Steuerung der Beleuchtungsanlage (Fnordlichter oder LED-Stripes).
  3. Kommunikation per USB/Bluetooth mit externen Komponenten oder dem Anwender (TTY)
  4. Power- und Videosignal-Management.
  5. Empfang und Aufbereitung der bereits durch den FPGA vorbereiteten Bilddaten.
  6. Übertragung der vom FPGA empfangenen Bilddaten per USB oder Bluetooth.
Die Software auf dem Chip besteht aus einer in C geschriebenen Firmware welche alle Aufgaben aus der Liste oben. Der größte Teil der Implementierung entspricht einer TTY-Emulation für die Interaktion mit dem System.
Per TTY können verschiedene Konfigurationseinstellungen vorgenommen und Systemtests durchgeführt werden.

Das folgende Video zeigt den Zugriff auf das System bzw. auf verschiedene Register des Signalprozessors per I²C. Das Terminal enthält eine ausführliche Online-Hilfe und erlaubt, neben dem vollem Systemzugriff, zudem die Steuerung der Beleuchtung. Der Controller kann damit auch anderweitig verwendet werden.
Eine wesentlich maschinenlesbare Variante der Kommunikation ist in Arbeit.
Das Video soll schlicht demonstrieren, dass so eine Schnittstelle existiert und verwendet werden kann. Als einfacher Anwender kommt man damit nicht in Berührung. Damit wäre die Usability sonst komplett unmöglich...


Wie in der Auflistung oben bereits erwähnt (Punkt 6) ist das System zudem in der Lage die Bild-Rohdaten, welche vom FPGA erzeugt werden, per USB oder Bluetooth auszugeben. Hierzu ist das Tool "FrameView" entstanden. FrameView verwendet unter anderem SDL, ist plattformunabhängig und als Linux-Binary gerade mal 14kb groß.
Das folgende Video zeigt die Applikation in Aktion. Das Bild des Desktops wird dabei per VGA->CVBS-Adapter in den AmbiController geleitet, automatisch ausgewertet, und das Ergebnis per USB an die FrameView-Anwendung weitergeleitet, welche das aktuell ermittelte Bild in dem kleinen Fenster links darfstellt. Das Größere Fenster ist Video mit einem ein einfachen Farbtest. Das Ganze stammt aus den Anfängen der Entwicklung. Daher ist das Ergebnis noch sehr sehr pixelig.
Das Protokoll an dieser Stelle ist recht proprietär und nur zu Debug-Zwecken gedacht, da diese Ausgabe zudem die Framerate drückt. Um Bandbreite bei der Datenübertragung zu sparen werden hier immer nur Änderungen übertragen. 


Damit erstmal genug für heute und viel Spaß beim Video schauen...

Mittwoch, 17. Juli 2013

Erstes Update - Autonomous Light Controller

In den letzten Wochen habe ich einige Emails bekommen, darunter Spam, einige mit sehr verdächtiger und dubioser Formulierung und andere wirklich sehr nette. Das Projekt scheint also, ich mir auch steigenden die Besucherzahlen auf diesem Blog ansehe und Eure Suchbegriffe bei dem großen Suchmaschinenanbieter ansehe, ein gewisses Interesse geweckt zu haben. Das freut mich natürlich!

Leider muss ich alle Interessenten enttäuschen, da dieses Gerät momentan nur als Prototyp vorhanden ist. Von einer Verbreitung ist zudem abzusehen. Daher habe ich mich dazu entschlossen in der kommenden Zeit die Schaltpläne, Software, Hardware-Synthese etc. als OpenSource/-Hardware zu veröffentlichen. Und wenn die Zeit dafür gekommen und mir verfügbar ist, eine kurze Dokumentation dazu schreiben wie das System arbeitet und aufgebaut ist.

Das Bild oben zeigt den aktuellen Prototyp. Ein weiterer Prototyp, welcher nicht mehr aus 7 (in Worten sieben) vernetzten Lochrasterplatinen und mehreren hundert Metern Kupferlackdraht besteht, ist in Arbeit. Dieser wird nur noch aus einer kleinen 4-Layer Platine, mit an die 180 "0403" SMD-Bauteilen (als Hinweis an diejenigen die nun auf einen Bausatz oder ähnliches hoffen), bestehen.

Sobald der neue Prototyp (Bild vom unvollständigen Layout links) bestellt, geliefert und aufgebaut wurde, fängt die eigentliche Arbeit mit diesem erst wirklich an. Die Firmware muss angepasst werden, neue Hardwarekomponenten in Betrieb genommen, Messungen durchgeführt müssen werden, (hoffentlich
keine) Korrekturen vorgenommen werden und sehr viel Zeit damit verbracht werden, das neue System (mindestens) auf den Stand.

Es ist viel zutun!

 

Hier noch ein paar Fragen und Antworten aus den Emails:
  • Verkaufen Sie das Gerät/Bausätze/etc.? NEIN 
  • Wird das Gerät auch HDMI und HDCP verarbeiten können? Über einen HDMI zu Composite-Wandler und einem zusätzlichen HDMI-Splitter (wird beides beispielsweise von der Firma Ligawo angeboten) ist es möglich auch digitale Medien mit dem Gerät zu verarbeiten. Da es jedoch am Markt HDMI-Chips gibt wäre dies im neuen Prototyp theoretisch möglich, HDCP steht auf einem anderen Blatt.
  • Funktioniert das Gerät auch mit anderen TV-Größen als 32 Zoll? Ja das ist definitiv möglich und bereits vorbereitet.
  • Wie steht es mit der Benutzerfreundlichkeit? Das System wird mit dem Video-Signal und mit einer Stromquelle verbunden. FERTIG. Es schaltet sich selbstständig ein und aus, und kann per Bluetooth oder USB bzw. mittels einer Android-App konfiguriert werden (wenn überhaupt nötig).
  • Wieso sind die Ecken auf dem Video schlechter ausgeleuchtet und wird das noch verbessert? Das liegt zum einen an der Art wie die LED-Streifen angebracht wurden. Und zum anderen reichen diese in meinem Fall nicht bis in die Ecken. Verwendet man entsprechend längere Streifen kann die Beleuchtung lückenlos aufgebaut werden.
  • In einem der letzten Videos scheint die Beleuchtung nicht synchron zu dem dargestellten Bild zu sein, wird das noch behoben? Richtig, die Beleuchtung ist nicht synchron. Meine Hardware berechnet die anzuzeigenden Farben schneller und zeigt diese auch früher an als der TV das dazugehörige Bild darstellt. Daher kann die Verarbeitungsgeschwindigkeit, Software-seitig und zur Laufzeit vom Anwender, individuell angepasst werden.
  • Wie schnell ist das System denn wirklich? Es verarbeitet alle empfangenen Bilder des Eingangssignals zur Laufzeit, ohne Verluste.
  • Wieso werden die Farben in den vorherigen Videos falsch dargestellt? Da ich all meine finanziellen Mittel in das Projekt stecke, besitze ich leider ausreichend gute Videokamera und verwende mein Smartphone für die Aufnahmen. Daher ist die Qualität auch dementsprechend "hochwertig".
  • Kann ich dann mein HDMI-Kabel durch das Gerät durchschleifen? Nein, siehe oben.
  • Was kostet das System? Die Materialkosten belaufen sich (inklusive aller Prototypen) auf einen gerade noch 3-stelligen Betrag. Die Arbeitszeit innerhalb der fast 3 Jahre die ich an dem System arbeite nicht mitgerechnet. 
  • Wieso mache ich mir den Aufwand und kaufe mir nicht einfach ein Gerät das das schon kann? Weil ich es kann, Spaß daran habe die Probleme zu lösen, meine Hardware ist besser, in dieser Form hat das noch keiner geschafft (verschiedene haben es versucht)... es gibt viele Gründe, aber warum hat man ein Hobby?

Freitag, 29. März 2013

Autonomous Light Controller

Lange ist es her seitdem ich hier über etwas geschrieben habe. Die Zeit zum bloggen war leider einfach nicht verfügbar. Dafür aber für ein sehr spezielles Projekt. Sehr sehr viele Arbeitsstunden, neue Ideen, Technologien und auch finanzielle Mittel sind in dieses eingeflossen, Und es ging einen riesige Schritte nach vorne damit.

Vor langer langer Zeit habe ich bereits über ein Vorgänger-Projekt gebloggt bei dem Fnordlichter über den VLC-Player als dynamische Hintergrundbeleuchtung eines Bildschirms verwendet werden können.

Dieses Projekt hat mir seitdem keine Ruhe mehr gelassen. Ich musste dieses einfach, trotz aller Kosten und Mühen, weiter perfektionieren.

Bei der ersten  Version und auch an den vielen "Ambilight"-Clones, die in verschiedensten Internet-Shops zu erwerben sind, stört mich vorallem eines: Es wird immer ein PC benötigt der die Rechenarbeit durchführt. Es gibt auch Ausnahmen, aber diese Projekt sind dann entweder seit vielen Jahren stillgelegt, seit langer Zeit unvollständig oder entsprechen einfach nicht meiner eigenen Vorstellung eines solchen Systems.


Nach der Devise, was es nicht gibt baue ich mir selbst, kann ich nun endlich die ersten (meiner Meinung nach) wirklich gelungenen Videos meines "Autonomous Light Controllers" in Aktion vorstellen. 




Technische Daten:
  • 12 Volt Spannungsversorgung
  • max. 20 Watt Leistungsaufnahme
  • 120 RGB-LEDs (keine Lücken auf dem Bildschirmhintergrund, bei einem 32" TV)
  • Bildschirmgröße und Anzahl der LEDs sind frei zu konfigurieren
  • Eingänge: Composite (Cinch), S-Video, RGB, YPbPr und SCART
  • HDMI-Fähig mit entsprechendem HDMI-Splitter und Signal-Wandler
  • USB2.0 und Bluetooth 2.0, zur Anpassung der Konfigurationseinstellungen per PC oder Android App
  • 80 Farbkanäle (die Anzahl der möglichen Farben die um den Bildschirm-Rand herum dargestellt werden können)
  • Videoanalyse in Realtime (jedes empfangene Bild wird analysiert bei voller Framerate und ohne zeitlichen Versatz wiedergegeben)