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.