Forum: Projekte & Code PAL/NTSC Encoder in VHDL


von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

Eigentlich nur als Ergänzung zu meinem AVR-BASIC-Computer gedacht, habe 
ich einen FBAS-Encoder in VHDL entwickelt. Er läuft mit 16 oder 20 MHz 
(die Farbträgerfrequenz wird intern mittels DDS erzeugt), kann die 8 
"Grundfarben" sowie 8 Graustufen darstellen und passt sogar in ein 
XC9536 CPLD. Allerdings nur, wenn man entweder PAL oder NTSC nutzt. Das 
Projekt ist auch unter http://www.opencores.org zu finden.

von Benedikt K. (benedikt)


Lesenswert?

Wunderbar ! Darauf habe ich schon lange gewartet. Ich werde es gleich 
mal ausprobieren...
Meine Versuche ein FBAS Signal am PC zu berechnen und das Bild dann aus 
einem 512k Flashspeicher auszugeben waren nämlich nicht ganz so 
erfolgreich.

Wäre eine Version mit 256 (oder zumindest 64Farben, also 2bit pro Pixel) 
möglich ? Falls ja, würde das in einen XC9572 passen ?

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Hallo Jörg und Benedikt,

Sieht interessant aus, ich muß mir das auch näher anschauen. Die Farben 
hängen bei PAL/NTSC von der Anzahl möglicher Phasenlagen ab, 8 sind 
immerhin schon 45 Grad Stufen.
Um den Farbträger feinstufiger zu verschieben müssten irgendwelche 
Laufzeiten benutzt werden, und das für PAL sogar zeilenweise um 180 Grad 
für die eine Komponente alternierend.
73
Christoph

von Benedikt K. (benedikt)


Lesenswert?

Das mit dem Phasenlagen ist klar, aber es reichen lediglich sin+cos die 
in unterschiedlichem Verhältnis addiert werden um beliebige Phasenlagenn 
zu erzeugen.
Mit 13MHz Samplerate habe ich schon ein richtiges FBAS Bild erzeugt, der 
Takt ist also nicht das Problem.

von Joerg W. (joergwolfram)


Lesenswert?

@Benedikt
Das mit den 64 Farben werde ich mal probieren und dann Bescheid geben. 
Theoretisch sollte es machbar sein, ob es in den 9572 passt, wird sich 
noch zeigen.

@Christoph
Da Phasenlage und Amplitude für jede Farbe schon vor der Synthese 
berechnet sind, sollte das kein Problem darstellen. Allerdings kann es 
sein, dass die zeitliche Auflösung des modulierten Signals von 45 Grad 
nicht mehr ausreicht, um die Farben sauber darzustellen.

Jörg

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Mich wundert, dass sowas funktioniert. Der 16 MHz DDS hat ja nicht mal 4 
Stützstellen pro Schwingung des Farbträgers. Wie kann ich dann noch die 
Amplitude von Sinus und Cosinus digital ändern? Was da rauskommt ist 
doch nur noch ein stark jitterndes Rechteck.

von Joerg W. (joergwolfram)


Lesenswert?

@Christoph
Wieso nur 4? Wenn man es genau nimmt, hat man soviele Stützstellen, wie 
der DDS-Zähler mögliche Zustände hat. Das ist ja gerade der Vorteil von 
DDS, man tastet sozusagen eine virtuelle Schwingung ab. Und von den z.B. 
4096 möglichen Abtastpunkten verwende ich in meinem Code nur 8 Gruppen, 
indem ich nur die obersten 3 Bits des Zählers nutze.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Das Rechteck ändert nur knapp viermal pro Farbträgerschwingung seinen 
Wert. Spektral gesehen hat das was rauskommt vor allem Anteile auf 16 
MHz, der Farbträger selbst dürfte auf einem Analysator im Rauschen 
verschwinden. Das Gezappel hat nur langfristig einen Mittelwert von 
4,433 MHz. Man sieht jedenfalls, so ein Farbdecoder ist schon mit wenig 
zufrieden.

von Joerg W. (joergwolfram)


Lesenswert?

Wenn Du einen Ton mit 12 KHz auf einem CD-Spieler mit 44,1 kHz 
Abtastrate abspielst, folgt das "Gezappel" auch nur im Mittelwert der 
12kHz-Schwingung.   Laut Nyquist reicht das Doppelte der maximal zu 
übertragenden Frequenz als Abtastfrequenz aus. Wenn man das Signal mit 
den Oszi sinnvoll betrachten will, braucht man ein Tiefpassfilter, wie 
es auch im TV vorhanden ist.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

wenn ich den Ton von 12 kHz überhaupt noch höre.  Der Farbdecoder soll 
aus dem Signal aber noch zwei Farbdifferenzsignale mit etwa 1 MHz 
Bandbreite entnehmen können - jedes Tiefpassfilter so dicht unter der 
Nyquistfrequnez macht Phasenverschiebungen. Wie gesagt, schön dass das 
trotzdem funktioniert. Ich hätte eher einen Farbquarz verwendet, also 
17,... oder 35, .. MHz mit vier oder achtfacher Frequenz, und die 
Zeilenfrequenz daraus heruntergeteilt.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Ich hatte sowas ähnliches vor etwa 10 Jahren mit dem Lattice CPLD 
ispLSI1016 angefangen. Ein Oszilloskop auf dem TV mit PAL-Videosignal 
als Ausgabe, das sollte im Endausbau auch noch farbig sein.

Schwarz-weiß hat es schonmal funktioniert, dann ist mein Projekt 
eingeschlafen. Hier ein Beispielfoto:
http://www.mikrocontroller.net/attachment/20204/TV_Oszilloskop_mit_CPLD.png

Das angehängte Synario-Schematic enthält fast wie bei Jörg einen Teiler 
durch 2270, also 2* 1135 und wird vom 8-fachen Farbträger als Takt für 
alles versorgt. Die Pixelrate ist 1/6 davon also knapp 6 MHz, in den 6 
Takten wird ein read-modify-write des angeschlossenen Bildspeichers ( 
64k*4 ) ausgeführt.
Jeder 32.Bildpunkt und jede 32.Zeile ist ein Gitterraster. 4 Bit ergeben 
16 Graustufen. Und schließlich sollte das ganze auch noch 
fremdsynchronisierbar werden. Immerhin hat es so noch in das CPLD 
reingepasst, war aber ziemlich voll.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Zur Ergänzung ein Literaturhinweis.
Elektor hat in Heft 9 und 10 1996 diese Schaltung veröffentlicht, mit 
einem Altera EPM7032 CPLD, einem 4MBit-Eprom, einem 74AC4040 und einem 
PAL-Encoder von Sony CXA1645P , hier die erste Seite mit Foto und 
technischen Daten.

von Joerg W. (joergwolfram)


Lesenswert?

Ich will mal sehen, den ursprünglichen Code etwas aufzubereiten und 
öffentlich zu machen. Dort kann man auch sehr gut sehen, wie das Signal 
aus phasenverschobenen Träger und Helligkeitsinformation zusammengesetzt 
wird. In der aktuellen Version erzeuge ich ja den Signalverlauf 
sozusagen vorher, das CPLD spielt die Daten nur noch ab.

Das mit dem Oszi habe ich auch mal angefangen, ist bei mir aber auch 
wieder eingeschlafen. Es lief mit einem NEC TFT-Display 
(RGB-Ansteuerung) und konnte übereinander in zwei Feldern Kurvenzüge mit 
je 100 Stufen oder 6 Digitalsignale mit einer Breite von 256 Pixeln 
darstellen. Dazu noch Raster, Textfelder, Zoombalken und Cursor (auch 
als Bereich). Das Problem war halt, dass ich das Display auf ca. 
10KkHz/37,5 Hz runterdrosseln musste und das Teil somit an keinem TV 
mehr lief. Bei geringerer Horizontalauflösung als 320 sah die Anzeige 
auf dem TFT aber sch... aus. Und da es das Display wahrscheinlich nur 
noch bei ebay gibt, ist die ganze Konstruktion eigentlich obsolet. 
Realisiert hatte ich es mit einem XC9536 und einem Mega16 und war 
eigentlich nur der Anzeigeteil. Der AVR hat nur die Daten rübergeschoben 
(7 Bit + Cursorbit), das Anzeigen und auch das Verbinden der Punkte zu 
Linien hat das CPLD gemacht. Wenn Interesse besteht, könnte man das 
Projekt aber je nach verfügbarar Zeit wieder aufrollen...

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Sogar dot-joining im CPLD? Die "Glöckchen und Trillerpfeifen" wie die 
Amis sagen sorgen oft dafür dass ein Projekt nicht fertig wird.
Bei mir war es ein Sharp-Videodisplay von Pollin. Der hatte damals so ca 
5000 Stück aus einem DAB-Pilotversuch bekommen und für nur 49 DM 
angeboten, die waren innerhalb weniger Tage weg.

von Joerg W. (joergwolfram)


Lesenswert?

Auch wenn das Ganze vielleicht etwas off-topic wird, dot-joining im CPLD 
ist einfacher als man denkt, aber man kommmt nicht so einfach drauf...
Der anzuzeigende Pegel bewegt sich sozusagen von links nach rechts, der 
Zeilenaufbau im Display geht auch von links nach rechts und von oben 
nach unten. Das CPLD erzeugt das ganze Timimg,enthält also auch den 
Zeilenzähler. Der Controller gibt einfach jede Zeile die Messdaten an 
einem Port aus. Im CPLD werden die Daten zwischengespeichert, damit hat 
man sowohl den Wert Y(t) auch den Wert Y(t-1). Lediglich beim ersten 
Messwert passt das nicht, weil Y(t-1) noch vom Ende der vorherigen Zeile 
stammt. Entweder, beim ersten Wert werden Y(t) und Y(t-1) gleichzeitig 
gesetzt oder man zeigt die erste Spalte nicht mit an.
Bei jedem Pixel wird nun verglichen, ob die (korrigierte) Zeilennummer 
zwischen dem Wert von (einschliesslich) Y(t-1) und Y(t) liegt. In VHDL 
geht das mit einfachen Vergleichsfunktionen. Wenn ja, dann wird das 
Ausgangssignal auf '1' gesetzt, wenn nein dann eben nicht. Lediglich, 
wenn die Messwerte periodisch zwischen zwei benachbarten Werten 
wechseln, sieht man nur eine dicke Linie.

von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

Angeregt durch die Kommentare von Christoph und Benedikt habe ich das 
Ganze in eine etwas andere Richtung weiterentwickelt. Anstelle den Sinus 
digital nachzubilden, erzeugt die neue Version nur noch ein 
phasenmoduliertes Rechtecksignal als Chrominanz-Signal, welches dann 
ausserhalb tiefpassgefiltert und mit dem Luminanz-Signal gemischt wird. 
Zusätzlich sind Impedanzwandlerstufen an den Ausgängen dazugekommen.
Da der Plan vom Video-Scope von Christoph relativ oft heruntergeladen 
wurde, wäre für mich interessant, welches Interesse an einem solchen 
Projekt besteht.

Jörg

von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

Hier mal ein Testbild von einem alten 37-er TV. Die Farben sind durch 
die Digikam leider etwas verfälscht, besonders das Blau sieht im 
Original besser aus.

von FPGA neuling (Gast)


Lesenswert?

Guten Tag!

Finde diese Forum hier echt klasse! Habe hier schon viles gelernt.

Ich habe auch vor einen PAL-Encoder für meinen Projekt zu machen.
Finde die Sources hier für'ne perfekte Anfang!
Aber als erstes ich möchte verstehen wie die PAL-farbenkodierung
überhaupt funktioniert. Habe im Netz nichts gefunden.
Nur ziemlich allgemeine Information. Aber keine richtige erklärung.
Hat jemand vielleicht ein Paar links oder PDF's wo PAL-farbenkodierung
vollständig dokumentiert ist???

Danke!

von Effi C. (efficeon)


Lesenswert?

Bin gerade auf der Suche nach Farbausgabe auf engstem Raum. Die 
Erzeugung von Komposit Video ist extrem wichtig, denn nur damit ist 
später der zusätzliche Verdrahtungsaufwand gering. Preiswerte 
Framegrabber gibt es massig, ich verwende Expresscard im Notebook, wo 
auch AVRStudio drauf ist und von dem direkt geflasht wird. Bin gerade an 
Versuchschaltung mit Atxmega128A1 und habe noch eine Ecke auf der 
Platine frei, um color statt s/w Videoausgabe draufzusetzen. Mit 8K 
internem RAM macht das dann schon Sinn (Vergleich: Sinclair ZX Spectrum 
hatte 6,75K Bildwiederholspeicher).
XC9572 gibt es recht klein und kann gut mit SAA7121 konkurrieren. 
Besonders gut finde ich die Verwendung des Atmega-Taktes.
Sicherlich kennt ihr das Formum mit der analogen Encoder-Lösung:
http://www.4freeboard.to/board/thread.php?threadid=26409
Bin gespannt, wie es hier weiter geht.

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.