Forum: Mikrocontroller und Digitale Elektronik Display-Steuerung


von TPSK (Gast)


Lesenswert?

Zur Ausgabe von Grafiken auf einem Display benötigt man i.A. die
Synchronisationssignale VSync und HSync und zusätzlich Werte für
X/Y-Position der entspr. Pixelwerte etc.
Zur Erzeugung der Sync-Signale in VHDL benutzt man meist Counter, die
mittels des Pixeltaktes inkrementiert werden und so den Horizontalen
und Vertikalen Rücklauf realisieren. Eine sehr gute Hilfe für die
nötige Einstellung der Counter-Werte bietet der folgende Link:

http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/calc.html
http://xtiming.sourceforge.net/cgi-bin/xtiming.pl

Meine Frage nun:

Mit welchen Formeln bzw. wie berechne ich die Werte für
- HCounter
- VCounter
- Back Porch + Sync Pulse + Front Porch etc.
für bestimmte Display-Auflösungen ?

Näheres zu meiner Frage siehe in diesem Forum unter:
http://www.mikrocontroller.net/forum/read-9-184389.html#new

von Rufus T. Firefly (Gast)


Lesenswert?

Diese Werte entnimmst Du dem Datenblatt des Displays (bei TFT-Displays
o.ä.) bzw. den VESA-Timingdaten, wenn es sich um einen Röhrenkübel
handeln sollte.

von TPSK (Gast)


Lesenswert?

@Rufus T. Firefly...

Welche Daten nehme ich aus dem Datenblatt bzw. welche Daten finde ich
im Datenblatt, die interessant für die Ansteuerung sind ?

Verstehe ich das richtig, dass ich die Werte für Back Porch + Front
Porch (also die "Auszeiten") aus dem Datenblatt des Displays
entnehmen kann ?

Mir geht es aber speziell um die Einstellung der beiden Counter für die
Vsync und HSync Signale zur Realisierung in VHDL. Irgendeine Idee, wie
ich dort die Werte berechne (denke, die stehen nicht im Datenblatt)?

Ausserdem wie berechne ich den notwendigen Pixeltakt ? Alles natürlich
für versch. Auflösungen...

Danke

von Rufus T. Firefly (Gast)


Lesenswert?

TFT-Displays haben IMHO weder Front- noch Backporch; wenn Du Dir mal in
einem Datenblatt eines solchen Displays das Timingdiagramm ansiehst,
wirst das vielleicht klarer.

Mit TFT-Display meine ich jedoch nicht Monitore mit analoger
Ansteuerung (oder DVI), sondern "nackte" TFT-Panels.
Bei analoger Ansteuerung verhält sich das vom Monitor erwartete Timing
entsprechend wie bei einem Röhrenkübel. In diesem Falle würde ich mich
an den VESA-Standard-Timings orientieren. Ich muss allerdings gestehen,
daß ich nicht weiß, ob die VESA diese so ohne weiteres 'rausrückt.
Das ist ja bei Normen das schizophrene, daß man sich a) daran halten
muss und daß b) eigenartige Vertriebe wie der Beuth Verlag oder eben
die VESA die Hand aufhalten ...

Zurück zu TFT-Displays: Die wollen eh' mit genau einer Auflösung
angesteuert werden (nämlich der, die sie nun mal haben), und der
Pixeltakt ist ebenso im Datenblatt angegeben ...

Bei analogen Timings kannst Du, wenn das grundlegende Timing (->VESA)
bekannt ist, den Pixeltakt selbst berechnen.
Nehmen wir mal als Beispiel das "gute" alte 50Hz-Fernsehsignal; das
hat eine Zeilenfrequenz von 15625 kHz, also 64 µs Zeilendauer.
Abzüglich Front- und Backporch (die wir mal ganz plump mit je 5 µs
annehmen) bleiben also 54 µs für's Nutzsignal übrig. Naja, wenn man
darauf VGA-Auflösung ausgeben möchte, also 640 Punkte pro Zeile, ist
recht leicht ersichtlich, daß der Pixeltakt 1/(54µs/640) = 11.85 MHz
betragen sollte.

Das ist das Grundprinzip.

Entscheidend ist also die Zeilenfrequenz, die bei unterschiedlichen
Auflösungen und Monitoren verwendet wird.

Die kann man -grob- auch abschätzen; bei einem XGA-Monitor, der mit 75
Hz angesteuert wird, liegt sie etwas oberhalb von 768 * 75 Hz. Etwas
oberhalb, weil diese ganz simple Darstellung die vertikale Austastlücke
unterschlägt. Schlägt man für die nochmals 10% drauf, so werden aus den
57.6 kHz etwa 64.4 kHz.
Wenn Du vor einem Röhrenkübel sitzen solltest, und zufälligerweise
diese Auflösung eingestellt haben solltest, kannst Du ja mal das OSD
des Monitors aktivieren - der wird Dir die aktuelle Zeilenfrequenz
mitteilen, die in dieser Größenordnung liegen sollte.

Naja, und den Pixeltakt berechnet man aus der Zeilenfrequenz und der
Horizontalauflösung analog zu meinem Fernsehbeispiel.

Recht präzise Timingdaten müsstest Du übrigens in den
Konfigurationsdateien des X-Servers xfree86 finden können; mehr kann
ich Dir über den aber auch nicht mitteilen.

Was genau für "Displays" willst Du denn überhaupt ansteuern?

von TPSK (Gast)


Lesenswert?

Also es geht um ein TFT mit digitaler Schnittstelle zur Ansteuerung.

OK, um Front- noch Backporch muß ich mir keine Gedanken machen (ist
klar), den Pixeltakt finde ich im Datenblatt bzw. berechne ich (auch
klar). Übrig bleiben VSync und HSync.
Diese beiden Signale benötige ich aber weiterhin, oder ????? Finde ich
da auch Angaben im Datenblatt ???

Bleibt weiterhin die Frage, wie die Werte für
- HCounter
- VCounter
bei einer solchen Realisierung für VSync und HSync mittels VHDL
berechen (mit Formel).

Gruß

von Rufus T. Firefly (Gast)


Lesenswert?

Gut, haben wir das geklärt; Du willst ein TFT direkt ansteuern.

Die Signale "HSync" und "VSync" werden bei TFT-Panels i.d.R. anders
bezeichnet ("line clock" und "frame clock", da ist der Kreativität
der Panelhersteller aber keine Grenze gesetzt), wenn sie auch die
gleiche Funktion haben.
Ihr Zeitverhalten ist allerdings im Datenblatt des TFT-Panels
abgebildet; da finden sich üblicherweise recht aufschlussreiche
Timingdiagramme.

Ganz grob läuft das so ab:
Synchron zum übrigens auch an das Panel zu übertragenden Pixeltakt
werden die Bilddaten übertragen. Nach einer Zeile wird ein Taktimpuls
am Zeilentakt ("line clock", äquivalent zu hsync) ausgelöst und mit
der nächsten Zeile fortgefahren. Nachdem alle Zeilen beschrieben sind,
wird ein Taktimpuls am Bildwechseltakt ("frame clock", äquivalent zu
vsync) angelegt.
Der Pixeltakt ist nur während der Übertragung von Pixeldaten am Panel
anzulegen, während der hsync/vsync-Takte bleibt der inaktiv.

Damit sollte die ganze Geschichte eigentlich recht einfach werden;
Deine Frage nach "hcounter/vcounter" müsste sich damit auch erledigt
haben.

Je nach Auflösung des Displays sieht die physikalische Schnittstelle
allerdings etwas anders aus; jenseits von VGA (640x480) ist eine
parallele Datenübertragung unüblich, stattdessen werden drei oder vier
LVDS-Kanäle verwendet. Entsprechende Transmitterbausteine gibt es von
TI, National oder Thine, an die werden die parallen RGB-Daten (18 oder
24 Leitungen, je nach Farbtiefe des Panels), und die drei Taktleitungen
angelegt.
Jenseits von SXGA genügt die Bandbreite solcher LVDS-Transmitter nicht
mehr, da werden dann wohl mehrere benötigt. Wie da das Interface im
einzelnen aussieht, entzieht sich meiner Kenntnis.

Was für ein Panel hast Du denn vor einzusetzen und hast Du Zugang zu
einem Datenblatt davon?

von TPSK (Gast)


Angehängte Dateien:

Lesenswert?

Schon mal Danke für deine ausführlichen Antworten (helfen mir doch
weiter).

Also soweit habe ich das mit VSync und HSync schon verstanden,
allerdings, dass mit den Counter-Werten noch nicht.

Ich zeige dir mal ein konkretes Beispiel, das ich nicht ganz verstehe
(siehe Anhang).

Hier geht es um eine ganz gute VHDL-Realisierung so einer
Display-Ansteuerung. Ab Seite 11 sind die Counter-Werte zu sehen. Wie
kommt man auf solche Counterwerte, sowohl für VSync als auch HSync ?
Spezielle die Werte 659, 755 und 799 etc. (ich verstehe es
NICHT...Hilfe !!!).

Ich hoffe du bist einigermaßen fit in VHDL und kannst mir das
einigermaßen erklären...

Danke und Gruß

von Rufus T. Firefly (Gast)


Lesenswert?

Nein, da muss ich leider passen. Mit VHDL habe ich mich bislang
überhaupt gar nicht beschäftigt.

Allerdings beschreibt das Dokument die Erzeugung eines Videosignales
für Röhrenkübel, und das unterscheidet sich dann doch etwas von der
Ansteuerung eines TFT-Displays. Hier müssen eben Front- und Backporch
und auch eine vertikale Austastlücke eingehalten werden - das alles
sind Dinge, die es in dieser Form bei TFT-Displays nicht gibt.
So weichen bereits die Timingdiagramme auf Seite 6 und 7 stark von dem
ab, was so ein TFT-Display benötigt.

Seite 11 -da stammen wohl die Dich verwirrenden Zahlenwerte her- ist
erst recht nicht auf ein TFT-Display anzuwenden.
Im Beispiel ist ja sogar eine Art Timingdiagramm angegeben;
eine Zeile inklusive Syncpuls, Front- und Backporch ist 800 Takte
lang.
Es wird im Diagramm mit den Nutzdaten begonnen, die beginnend mit Takt
0 ausgegeben werden ... bis Takt 639 verstrichen ist.
Mit Takt 640 beginnt die (der?das?!) Backporch, die bis Takt 658
anhält. Dann kommt zwischen Takt 659 und 755 der eigentliche
Sync-Impuls, gefolgt von der Frontporch, die dann bis Takt 799 dauert.

Das ist aber für ein TFT-Display nicht korrekt. Ich würde eine
Zeilendauer von 641 Takten vorsehen, von Takt 0 bis einschließlich 639
werden Nutzdaten ausgegeben und im letzten Takt wird Hsync ("line
clock") ausgegeben.

Ob ein (Pixel-) Takt ausreichend lang für "line clock" ist, musst Du
dem Datenblatt des TFT-Displays entnehmen, das müsste aber grob
hinhauen.

Das gleiche trifft äquivalent für Seite 12 zu, da ist von 0 bis 479 zu
zählen und kurz (eventuell reicht auch hier die Dauer eines Pixeltakts)
"frame clock" zu aktivieren.

Ich kann mich nur wiederholen: Sieh' ins Datenblatt, beachte dort das
Timingdiagramm.


Anmerkung: Das ist jetzt das erste mal, daß ich irgendwelches
VHDL-Zeugs sehe; das sieht ja recht einfach aus. Muss ich mich wohl
auch mal mit beschäftigen ...

von TPSK (Gast)


Lesenswert?

OK, wieder etwas dazu gelernt. Im Prinzip ist die Ansteuerung eines
digitalen TFT dann sogar einfacher oder ???

So vom Prinzip her müßte es aber so ähnlich gehen, wie in dem Beispiel.
Ich lasse nur Front- und Backporch weg und damit sind die Werte für die
beiden Counter eben um die Porchwerte kleiner. Oder ist das jetzt zu
einfach gedacht...bestimmt ?!?

Für "line clock" (oder HSync) muß ich eben schauen, ob ein Pixeltakt
ausreicht.
Finde ich dazu Angaben im Datenblatt, wie lange ein "line clock"
dauern muß ?

Wäre super, wenn mir da einer weiterhelfen könnte. Hat einer evtl. ein
Beispiel für so eine Ansteuerung eines digitalen TFTs ?

Gruß

von TPSK (Gast)


Lesenswert?

und noch eine Frage:

wozu dient in diesem Zusammenhang ein sog. "Timing Controller" für
digitale TFTs ?

Welche Aufgaben übernimmt er ?

Ist so ein Controller normalerweise in einem digitalen TFT bereits
integriert ?

Braucht so einen Controller nur, wenn dies nicht der Fall ist ?

Wer erzeugt weiterhin VSync und HSync ?

von Rufus T. Firefly (Gast)


Lesenswert?

Das ist ja schön, daß Du es schaffst, so viele Fragen zu stellen - tu
Dir selbst jetzt mal einen Gefallen, besorge Dir ein Datenblatt eines
TFT-Displays mit VGA-Auflösung und paralleler Ansteuerung und sieh es
Dir an.

Das dürfte etliche Deiner Fragen beantworten.

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.