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
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.
@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
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?
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ß
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?
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ß
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 ...
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ß
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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.