Forum: Mikrocontroller und Digitale Elektronik Videoquellen synchronisieren


von nnnyms (Gast)


Lesenswert?

Hallo Leudle,

ich würde gerne mehrere FBAS-Signale (PAL) aus semiprofessionellem 
und/oder Consumer-Equipment (also ohne Genlock) miteinander 
synchronisieren, und das ganze möglichst in Echtzeit. 2, 3 Frames Delay 
wären kein Problem, aber eine PC-basierte Lösung ist viel zu langsam.

Ich hab mich im Bereich der Elektronik bisher auf ein paar 
AVR-Spielereien beschränkt; dass es damit wohl nicht funktionieren wird, 
ist mir klar ;-) womit denn eher? Schneller Controller mit viel internem 
RAM (natürlich zu möglichst bastlerfreundlichen Konditionen)? Oder sind 
die Datenmengen so groß, dass um externen Speicher nix drumrumführt?

Oder kann ich das ganze gleich an den Nagel hängen, weil die 
Bauteilkosten die eines Fertiggeräts im Wert von mehreren Tausend Euro 
schon übersteigen würden? Ich hoffe mal nicht.

Gruß,
nnnyms

von STK500-Besitzer (Gast)


Lesenswert?

Das Zauberwort heisst TBC (Time Base Corrector).
Sowas findet man in Bildmischern.
Die Frage ist, wieviele Quellen du mischen/synchronisieren willst.
Oder: Was willst du nach dem Synchronisieren mit den Signalen machen?

Mit einem AVR kommst du nicht weit. Sowas erfordert einen schnellen 
AD-Wandler, eine gewisse Menge RAM und einen entsprechend schnellen 
DA-Wandler.

von Thorsten S. (thosch)


Lesenswert?

Hallo,

einen mehrkanaligen TBC (Time Base Corrector) zu entwickeln ist 
definitiv keine ganz einfache Aufgabe!

Um ein derartiges Gerät zu konstruieren, brauchst Du fundierte 
Kenntnisse in Digitaler Signalverarbeitung und Videotechnik...


Hardwareseitig würde ich das mit einem FPGA machen, was um die benötigte 
Peripherie ergänzt wird:

Pro zu synchronisierender FBAS-Quelle brauchst Du einen digitalen 
Videodecoder (wie z.B. SAA7115) für den FBAS-Eingang und einen 
Video-Encoder für den FBAS-Ausgang (z.B. SAA7129).

Die Decoder beinhalten bereits ADCs Line-Locked-Clock PLL und digitale 
Decodierung des FBAS-Signals mit Kammmfilter usw...
Geliefert wird ein digitaler Datenstrom nach ITU-R656.

Das ist ein 8-Bit Datenstrom mit 27MHz Taktrate, Farbe und Luminanz 
werden gemultiplext übertragen (Cb, Y, Cr, Y, ...) Synchronworte 
kennzeichnen Zeilenanfang und -Ende sowie das aktive Bildfenster.

Das gleiche Format bekommen die Video-Encoder auch geliefert.


Die FPGA-Schaltung dazwischen muß für jedes zu synchronisierende Signal 
einen Vollbildspeicher (+ etwas Zugabe) verwalten in den die Bilddaten 
mit der Eingangsseite synchronisiert eingeschrieben werden.

Das Auslesen der Bilddaten erfolgt über alle Bildspeicher synchron mit 
einem Referenztakt (kann ein Takt von einem der Videodecoder sein, 
dessen Eingang damit zum Referenzeingang definiert wird - oder ein 
fester 27MHz Quarzoszillator). Damit liegen alle Ausgänge mit gleicher 
Phasenlage vor.

Für jeden Bildspeicher muß eine entsprechende Schreib- 
/Lesepointer-Verwaltung realiert werden, die dafür sorgt, daß ggf. (bei 
zu schnellem Eingangssignal) ein Eingangsbild übersprungen wird oder 
(bei zu langsamem Eingangssignal) ein Bild zweimal ausgelesen wird.

Die ausgelesenen Daten werden jetzt für jeden Ausgang einem 
Video-Encoder zugeführt, der daraus wieder ein PAL oder Secam oder 
NTSC-Signal moduliert.

Die Videodecoder und Encoder müssen via I2C-Bus konfiguriert werden, das 
kann ein Microkontroller übernehmen, der über hinreichend viele 
I2C-Interfaces verfügt. (je 2 Decoder und Encoder lassen sich an einem 
Interface betreiben, da zwei verschiedene Slaveadressen konfiguriert 
werden können)


Als Bildspeicher hängt man am einfachsten SDRAM in hinreichender 
Bitbreite ans FPGA, diese richtet sich nach dem erforderlichen 
Speicherdurchsatz und dem Speichertakt:
Pro Kanal wird 2*27MByte/s Datendurchsatz benötigt.

Das RAM benötigt einen festen Takt von z.B. 150 MHz, den 
SDRAM-Controller baut man im FPGA am besten so auf, daß ein fester 
Zyklus abläuft, der definierte Timeslots für jeden Kanal zum Lesen und 
Schreiben vorsieht. Darüber ist dann auch der Speicher-Refresh 
gewährleistet.

Etwas Hirnschmalz muß man noch in die Eingangs- und Ausgangspuffer 
stecken, da hier die Taktumsetzung vom Videotakt auf den Speichertakt 
stattfinden muß. Hier bietet sich die Verwendung der FPGA-internen 
Blockrams als FIFO-Speicher an, eine Ablaufsteuerung sorgt für jeden 
Puffer durch Transferanmeldungen am SDRASM-Controller dafür, daß das 
Fifo weder unter- noch überläuft.


Wenn man als Speichertakt z.B. 108MHz wählt (per DCM im FPGA durch 
Vervierfachen des 27MHz Ausgangs-Quarztaktes erzeugt), kann man das 
Ausgangstiming vereinfachen, da der Ausgangstakt synchron zum 
Speichertakt läuft.



...


Wie schon erwähnt, so ganz einfach ist das nicht zu realisieren, aber 
mit der nötigen Erfahrung durchaus machbar.

Die Leiterplatte für so ein Projekt wird allerdings auch eher ein 6-fach 
Multilayer werden.

Gruß,
Thorsten

von nnnyms (Gast)


Lesenswert?

TBC ist mir bekannt. Mein Ziel ist tatsächlich, die Signale zu mischen 
(harte Schnitte, mehr muss nicht sein). Zwei Kanäle würden ausreichen, 
man kann ja von mehreren Eingängen immer die beiden auf die Bildspeicher 
verschalten, die man gerade braucht (also je einen für die aktive und 
für die Vorschauebene).

Dass ich mit einem AVR nichts anfangen kann, war mir ja schon klar. Die 
"nötige Erfahrung" habe ich sicher nicht, und für dieses Hobbyprojekt in 
die FPGA-Entwicklung einzusteigen, ist glaube ich weder aus zeitlicher 
noch aus monetärer Sicht vertretbar. 6-fach Multilayer ... bisher 
arbeite ich auf Lochraster. Hätte ja sein können, dass da irgendeine 
Standardlösung für existiert, die ich nur noch nirgends finden konnte, 
aber das wär ja auch zu schön um wahr zu sein.

Ich hab auch mal überlegt, ob man nicht direkt den Ausgang eines 
Video-Decoders mit digitalem YUV-Out mit mehreren SDRAM-Bausteinen 
verschalten könnte, und ein µC nur auf die Synchronworte vom Decoder 
(die ja zumindest bei manchen Typen nicht über den seriellen Output, 
sondern über Handshake-Leitungen rausgehen) reagiert und entsprechende 
Write-Kommandos an den RAM verschickt. Wenn man dann 3 RAMs (die jeweils 
nur mit lächerlichen 810 kB gefüllt würden) nacheinander ringweise 
beschreibt, könnte man ja auf einen externen Synchronimpuls hin den 
zuletzt beschriebenen (also sich im idle-Mode befindenden) per Burst 
auslesen ...

Nunja, das waren meine uninformierten Überlegungen. Ich vermute das ist 
ne totale Milchmädchenrechnung und das Timing haut nie hin - wenn ihr 
sagt, dass das nicht klappen wird, werde ichs einfach begraben ;-)

Gruß,
nnnyms

von slowslow (Gast)


Lesenswert?

fertige geräte gibts, schau mal in ebay, prof-video-ausrüstung. ab und 
zu ist da sowas drin. schau dort nicht nach tbc, die gleichen nur jitter 
in den zeilen aus, schau nach framestores. die können das.

von Thorsten S. (thosch)


Lesenswert?

die Geräteklasse nennt sich meist "Frame Synchronizer" oder
"Video Frame Synchronizer"

framestores können auch Standbildspeicher sein...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.