Forum: Mikrocontroller und Digitale Elektronik VGA Signal Fragen


von H-G S. (haenschen)


Lesenswert?

Hallo zusammen!

Ich habe mir die wichtigsten Seiten und Diagramme aus dem Netz zum Thema 
VGA-Signal ausgedruckt. Speziell der 640x400 @70Hz Modus interessiert 
mich.

Ich musste aber feststellen dass gewisse Unterschiede in den Dauern der 
vorderen und hinteren horizontalen Schwarzschultern (je nach Webseite) 
bestehen. Gibt es da Toleranzen oder neue Standards ?

Auch würde ich gerne wissen ob man unbedingt einen Schwarzwert (0V) auf 
die Pixel ausgeben muss während des horizontalen und vertikalen 
Synchronisations-Signals. Das würde wohl die Schaltung und das 
Steuerprogramm komplizierter machen.

Edit: muss das Horizontale Synchronisationssignal weiterlaufen während 
der vertikalen Synchronisation ?

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

>
> Ich musste aber feststellen dass gewisse Unterschiede in den Dauern der
> vorderen und hinteren horizontalen Schwarzschultern (je nach Webseite)
> bestehen. Gibt es da Toleranzen oder neue Standards ?
Zu den Zeiten, als diese Aufloesungen noch modern waren, gab's an den 
Monitoren Regler fuer Bildbreite,-hoehe,-lage. Damit konnte man 
Schwarzschultertimings ein bisschen an den jeweiligen Monitor anpassen.
Ich wuerd' mal vermuten, dass VESA da die letzten "Standardtimings" 
spezifiziert hat.

> Auch würde ich gerne wissen ob man unbedingt einen Schwarzwert (0V) auf
> die Pixel ausgeben muss während des horizontalen und vertikalen
> Synchronisations-Signals. Das würde wohl die Schaltung und das
> Steuerprogramm komplizierter machen.
Sagt der, der sich im Nachbarthread mit OpAmps und R2R-DACs 
verkuenstelt...
Ich wuerde das Video waehrend der gesamten Austastluecke schwarztasten. 
Kann sein, dass es mit bestimmten Monitoren auch so geht, aber das 
Risiko besteht, dass irgendwelcher Scheiss, den du im Strahlruecklauf 
ausgibst, sichtbar wird.

>
> Edit: muss das Horizontale Synchronisationssignal weiterlaufen während
> der vertikalen Synchronisation ?
Sollte. Kann sein, das es Monitore gibt, die's nicht unbedingt brauchen, 
aber sicher ist's nicht. Auch beim Composite-Sync laueft H- waehrend des 
V-Sync weiter.

Gruss
WK

von c-hater (Gast)


Lesenswert?

H-G S. schrieb:

> Ich musste aber feststellen dass gewisse Unterschiede in den Dauern der
> vorderen und hinteren horizontalen Schwarzschultern (je nach Webseite)
> bestehen. Gibt es da Toleranzen oder neue Standards ?

Es gibt Toleranzen und Standards, beides wie Sand am Meer. Ist aber 
letztlich ziemlich unkritisch, wirklich wichtig sind nur zwei Sachen:

1) Mindestbreite der Syncs nicht unterschreiten (gilt für alle Monitore)
2) Zeilenfrequenz des gewünschten Modus möglichst genau treffen und vor 
allem auch in der Folge möglichst konstant halten (gilt vor allem für 
Monitore mit Framebuffer, also das, was man heute üblicherweise so 
benutzt).

> Auch würde ich gerne wissen ob man unbedingt einen Schwarzwert (0V) auf
> die Pixel ausgeben muss während des horizontalen und vertikalen
> Synchronisations-Signals.

Sollte man, wenn man die Bildlage-Autokonfiguration moderner Monitore 
benutzen will. Die arbeitet üblicherweise am besten und schnellsten, 
wenn in der Blank-Zeit "Schwarz" ankommt. Sie funktioniert allerdings 
üblicherweise auch, wenn das nicht der Fall ist. Bloß halt dann längst 
nicht so gut. Durchaus möglich, dass du dann von Hand nachkorrigieren 
musst.

Bei ollen Monitoren ohne Framebuffer musst du den Kram hingegen ohnehin 
von Hand justieren. Da spielt es keine Rolle, eventuelle Farbfehler 
ausserhalb des eigentlichen Bildbereiches wären die einzige Folge und 
die manuelle Konfiguration führt ja im Endeffekt dazu, dass nur noch der 
eigentliche Bildbereich sichtbar ist, sprich: es wird dann scheissegal, 
was ausserhalb abgeht.

> Edit: muss das Horizontale Synchronisationssignal weiterlaufen während
> der vertikalen Synchronisation ?

Ja, sollte zumindest. Bei ollen Monitorgurken kann (und wird es auch 
meist) auch mal ohne das gut gehen, aber moderne Monitore mit 
Framebuffer brauchen ziemlich zwingend ein durchgehenden HSYNC, weil der 
die Basis für deren eigenes Timing ist und die Zeitkonstante der PLL, 
über die die daraus den Pixeltakt gewinnen, ziemlich klein ist, was 
wiederum dem Wunsch geschuldet ist, dass die Autokonfiguration in 
erträglicher Zeit zu einem Ergebnis kommt...

Also ich würde dir vorschlagen, in beiden Belangen keine Kompromisse 
einzugehen. Der Mehraufwand an Steuerlogik ist minimal, wenn man es 
richtig durchdenkt. Bezüglich des durchgehenden HSYNC kostet es ein 
XOR-Gatter und bezüglich des definierten Schwarz in den Austastlücken 
(mindestens) ein "Extra-Pixel" pro Zeile, also nur minimal mehr RAM und 
eine andere Konstante für den Increment des Pixelzählers am Zeilenende, 
also eine "stride"-Logik.
Die sollte man aber sowieso einbauen, um eine Vielzahl "billiger" 
Effekte zu ermöglichen, z.B. ein schnelles und trotzdem butterweiches 
horizontales Scrolling des Bildinhaltes...

von H-G S. (haenschen)


Lesenswert?

Sehr hilfreich, danke dir!

Ich hätte noch eine Frage:
Wenn der V-Sync mitsamt seiner hinteren Schwarzschulter vorbei ist, was 
kommt danach ? Direkt ein H-Sync oder erst die vordere Schwarzschulter 
des H-Sync ?

Edit: Mikrocontroller mit 200ns Befehlszeit werden den Sync wohl nicht 
präzise genug erzeugen oder ?

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

H-G S. schrieb:
> Sehr hilfreich, danke dir!
>
> Ich hätte noch eine Frage:
> Wenn der V-Sync mitsamt seiner hinteren Schwarzschulter vorbei ist, was
> kommt danach ? Direkt ein H-Sync oder erst die vordere Schwarzschulter
> des H-Sync ?

Google mal nach "DMTv1r11.pdf" (ohne "" eingeben). In diesem PDF findest 
DU ab Seite 11 die genauen SIgnaldiagramme von der VESA 
Standardisierungsorganisation sowie die exakten Zeitangaben.

> Edit: Mikrocontroller mit 200ns Befehlszeit werden den Sync wohl nicht
> präzise genug erzeugen oder ?

Kommt auf den Monitor an. Spätenstens beim Pixeltakt hört es dann aber 
endgültig auf. Ein FPGA wäre die geeignetere Plattform. Oder ein LCD 
plus Controllerchip wie SSD1963 oder Epson S1D13781. Oder ein kleiner 
ARM oder PIC mit Hardware-LCD-Interface.

fchk

von Ch.G. (Gast)


Lesenswert?

Eigentlich ist das gar keine so große Sache eine VGA Ausgabe zu 
erzeugen, sind ein paar Zähler und Vergleiche und PortPins schalten, 
hier mal der pseudeo code für nen VGA (tester) controller den ich in nem 
FPGA gebastelt habe, der macht zwar 800x600 aber...
1
constant FrameWidth = 800;
2
constant FrameHeight = 600;
3
constant hFrontPorch = 40;
4
constant hSyncPulse = 128;
5
constant hBackPorch = 88;
6
constant vFrontPorch = 1;
7
constant vSyncPulse = 4;
8
constant vBackPorch = 23;
9
constant WholeLine = (FrameWidth + hFrontPorch + hSyncPulse + hBackPorch);
10
constant WholeFrame = (FrameHeight + vFrontPorch + vSyncPulse + vBackPorch);
11
12
while(1)
13
  wait until rising_edge(clock_pixel);
14
  if (currentpixel < hsyncPulse) then vga_hsync = HIGH
15
  else vga_hsync = LOW
16
  if (currentline < vsyncPulse) then vga_vsync = HIGH
17
  else vga_vsync = LOW
18
  if ((currentpixel >= (hsyncPulse + hbackPorch)) and (currentpixel < (WholeLine - hFrontPorch))) then
19
    if ((currentline >= (vSyncPulse + vBackPorch)) and (currentline < (WholeFrame - vFrontPorch))) then vga_out = PixelColor
20
    else vga_out = BLACK
21
  else vga_out = BLACK
22
  if (currentpixel < (WholeLine - 1)) then currentpixel = currentpixel + 1;
23
  else
24
    currentpixel = 0;
25
    if (currentline < (WholeFrame - 1)) then currentline = currentline + 1;  
26
    else currentline = 0;
... evtl hilft es dir ja weiter.

von H-G S. (haenschen)


Angehängte Dateien:

Lesenswert?

Denkt ihr das diese Schwarzwert-erzwing-Schaltung vorteilhaft ist ? Ein 
Latch wird am Ausgang hochohmig gesteuert und Pulldown-Widerstände 
erzeugen die Schwarz-Kodierung am Buffer.

Könnte das Probleme mit der Pixelbreite des ersten und letzten Pixels 
einer Zeile bringen (bei unpräziser Ansteuerung durch den Controller) ?

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

H-G S. schrieb:
> Denkt ihr das diese Schwarzwert-erzwing-Schaltung vorteilhaft ist ?

Selbstverstaendlich ist diese Schaltung vorteilhaft. Fuer die 
Chiphersteller und Platinenhersteller. Weil die dir dann mehr verkaufen 
koennen.
Sonst ist's eher arg kompliziert.

Gruss
WK

von H-G S. (haenschen)


Lesenswert?

Ich habe vergessen zu erwähnen dass ich die Schwarz-Erzwingung später 
für eine externe SRAM-Fütterung des DAC-Buffers benötige.

Die Schaltung hier ist nur für einen Prototypen bei dem ein 
Mikrocontroller ein paar Pixelwerte erzeugt um das Sync-Timing zu 
testen.



Ich habe die Befürchtung dass es Problem mit dem ersten Pixel geben 
könnte (zu schmal) bzw. mit dem letzten Pixel (zu breit).

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Ich weiss nicht, was du da im Einzelnen vorhast.
Aber ich weiss, dass z.B. der Sinclair ZX80 und ZX81 mit ueberschaubarer 
Zusatzlogik es schon vor >30 Jahren geschafft haben, Videosignale mit 
vernuenftigem Timing auszugeben. Und das mit einer 3.25 MHz getakteten 
CPU. Und dabei waerend ihres V-Blankings sogar auch noch BASIC 
interpretieren konnten...
In der Zwischenzeit haben gefuehlt ca. 1.0e+6 Leute aehnliches auch in 
Farbe und Bunt mit allen moeglichen anderen µControllern, FPGAs, etc. 
hingebracht. Und das auch noch im Netz dokumentiert.
Klar, wenn dein Pixeltakt wackelig ist, koennen Pixel auch mal laenger 
oder kuerzer sein. Dann taugt deine Schaltung halt nix.

Gruss
WK

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> In der Zwischenzeit haben gefuehlt ca. 1.0e+6 Leute aehnliches auch in
> Farbe und Bunt

Das VGA-Timing ist ein bisschen anspruchsvoller als das für 
Glotzenbetrieb verwendete NTSC/PAL-Timing.

Letzteres arbeitet mit einer Zeilenfrequenz von 15625 Hz, ersteres nutzt 
knapp 32 kHz.

Die zu produzierende Datenrate resp. der Pixeltakt ist halt auch um 
einiges höher als im Glotzenbetrieb.

von H-G S. (haenschen)


Lesenswert?

Es könnte ein Problem mit der Abweichung des Pixeltaktes (79,44ns) 
geben!

Ich finde keinen Quartz/Oszillator der genau 12.5875 MHz macht (bzw. 
25.175MHz zum Halbieren). Diese Frequenz brauche ich aber für den 
Pixeltakt meiner 320 Pixel einer Bildzeile (79,44ns).

Der nächste verfügbare Quartzoszillator wäre 12.288 MHz, das ergibt eine 
Abweichung von 1,94ns pro Pixel. Bei 320 Pixel kommt es früher als 
gedacht zu einer Summierung der Abweichung sodass sich Pixel komplett 
verschieben. Es müssten etwa 621ns Verschiebung sein nach 320 Pixeln.

Denkt ihr dass das bedenklich ist ?   :-)

: Bearbeitet durch User
von Hans (Gast)


Lesenswert?

Dann fragen wir das Signal doch mal

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du solltest den doppelten Pixeltakt verwenden und jedes Pixel doppelt 
ausgeben, so habens früher die VGA-Karten auch gemacht, wenn mit so 
geringer Horizontalauflösung gearbeitet wurde.

In der Original-VGA-Karte von IBM wurden zwei Taktfrequenzen verwendet, 
25.175 MHz und 28.322 MHz, der höhere Takt wird im Textmodus verwendet, 
wo die Horizontalauflösung bei 720 statt 640 Pixeln liegt.

> Bei 320 Pixel kommt es früher als gedacht zu einer Summierung der
> Abweichung sodass sich Pixel komplett verschieben. Es müssten etwa 621ns
> Verschiebung sein nach 320 Pixeln.

Was für ein Gerät soll das Signal darstellen?

von fchk (Gast)


Lesenswert?

> Ich finde keinen Quartz/Oszillator der genau 12.5875 MHz macht (bzw.
> 25.175MHz zum Halbieren). Diese Frequenz brauche ich aber für den
> Pixeltakt meiner 320 Pixel einer Bildzeile (79,44ns).

Schlecht gesucht:

https://www.digikey.de/product-detail/de/ecs-inc/ECS-100A-251.7/X130-ND/79229

fchk

von H-G S. (haenschen)


Lesenswert?

Leider brauche ich den halben Takt, also 12,5875MHz.
Ich benötige nämlich die halbe horizontale Auflösung einer 640er Zeile.

Der 25,175MHz-Takt wäre für die volle 640er Auflösung und müsste erst 
halbiert werden. Aber das wäre bestimmt irgendwie mit Logikbausteinen 
möglich ...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

H-G S. schrieb:
> Leider brauche ich den halben Takt, also 12,5875MHz.

Nein.

> Ich benötige nämlich die halbe horizontale Auflösung einer 640er Zeile.

Ja, aber das kannst Du mit dem richtigen Takt auch erreichen - gibt 
jedes von Deinen 320 Pixeln doppelt aus.

von H-G S. (haenschen)


Lesenswert?

Rufus Τ. F. schrieb:
>> Ich benötige nämlich die halbe horizontale Auflösung einer 640er Zeile.
>
> Ja, aber das kannst Du mit dem richtigen Takt auch erreichen - gibt
> jedes von Deinen 320 Pixeln doppelt aus.

Aber mein AVR mit dem ich die Testschaltung aufbauen will geht nur bis 
20MHz!

Ich sah gerade dass man mit Flipflops einen Frequenzteiler bauen kann.

von Georg G. (df2au)


Lesenswert?

H-G S. schrieb:
> Aber mein AVR mit dem ich die Testschaltung aufbauen will geht nur bis
> 20MHz!

Du willst keine 1000er Serie bauen und am Nordpol oder in der Sahara 
betreiben. Dein AVR kann 25MHz bestimmt. Der AVR in meinem VGA Terminal 
läuft sauber bei 5V mit einem 25MHz Quarz.

von H-G S. (haenschen)


Lesenswert?

Georg G. schrieb:
> Du willst keine 1000er Serie bauen und am Nordpol oder in der Sahara
> betreiben. Dein AVR kann 25MHz bestimmt. Der AVR in meinem VGA Terminal
> läuft sauber bei 5V mit einem 25MHz Quarz.

Soll ich meinen ATtiny auf 25MHz übertakten ?

Ansonsten stach mir eben ein 74HC74-Flipflop ins Auge mit 15ns 
Umschaltzeit.



Edit: weisste was ? Ich kaufe einfach beide und probier es aus!

Edit2: Digikey könnte teuer werden oder ? Ab 50 Euro scheinbar 
versandkostenfrei, aber was ist mit Zoll ?

: Bearbeitet durch User
von Georg G. (df2au)


Lesenswert?

H-G S. schrieb:
> Soll ich meinen ATtiny auf 25MHz übertakten ?

Ja.

Und noch ein Hinweis: Andere VGA Projekte können mit einem 
handelsüblichen 25MHz Quarz leben. Den gibt es für kleines Geld an jeder 
Ecke.

von H-G S. (haenschen)


Lesenswert?

Georg G. schrieb:
> Und noch ein Hinweis: Andere VGA Projekte können mit einem
> handelsüblichen 25MHz Quarz leben. Den gibt es für kleines Geld an jeder
> Ecke.

Stellt sich so ein VGA-zu-HDMI-Konverter automatisch auf die 
Pixelfrequenz ein oder wird das Farbsignal einfach durchgereicht ?
Bei Letzterem wäre es ja egal ob die Pixelzeile insgesamt ein paar Pixel 
zu kurz ist.

von Feldkurat K. (feldkurat)


Lesenswert?

H-G S. schrieb:
> Ansonsten stach mir eben ein 74HC74-Flipflop ins Auge mit 15ns
> Umschaltzeit.

Nadelimpulse sind nicht ungefährlich. Immer Schutzbrille tragen, dann 
kann man solchen Effekten die Schwarzschulter zeigen.

Dein Lieblingslied ist bestimmt: "Neverending Story"...

https://www.youtube.com/watch?v=x1afn71-0sI
:)

-Feldkurat-

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

H-G S. schrieb:
> Aber mein AVR mit dem ich die Testschaltung aufbauen will geht nur bis
> 20MHz!

Und? Muss denn Dein AVR jedes Bit von Hand schieben? Du könntest jeweils 
ein komplettes Byte parallel an ein Schieberegister (z.B. 74xx165) 
ausgeben, das dann den Kram mit dem richtigen Pixeltakt gespeist 
'rausschiebt.

Und die Pixelverdoppelung lässt sich einfach mit zwei kaskadierten 
Schieberegistern (dann z.B. 74xx589) oder einem 16-Bit-Schieberegister 
(74xx674) bewerkstelligen, bei denen je zwei Eingänge mit einem Bit 
Deines 8-Bit-Ports belegt sind.

von dasrotemopped (Gast)


Lesenswert?

ach ja, VGA auf einem AVR uC.
Schon 1000 Mal bewiesen das es mit Kompromissen bei Auflösung und 
Farbtiefe geht. Und auch schon genau so oft eindrucksvollen Aminationen 
und Anwendungen gesehen. Also warum nicht einfach ein bestehendes 
Projekt 1:1 nachbauen ?
Oder eine technisch bessere Umsetzung wählen, z.B. das billigste TFT mit 
SSD1963 auf Ebay (ca. 30 €) schiessen und an den AVR flanschen. Dann das 
TFT ablöten, einen DAC wie in
Beitrag "Re: Zeigt her eure Kunstwerke (2017)"
anlöten und fertig. Der SSD1963 bietet 1 MB Framebuffer und genug Saft, 
640x480 und 800x480 darzustellen.
Die Schaltung unter
Beitrag "Re: VGA Signal Fragen"
wird keine guten Ergebnisse liefern, da ein R2R Netzwerk weder die 
Signalpegel noch die Impedanz für VGA bietet. Aber diese Behauptung ist 
widerlegt, so bald die R2R Schaltung funktionsfähig auf dem Tisch liegt.
Wenns nur um die Erzeugung eines Testbilds geht empfehle ich
http://www.pyroelectro.com/projects/masochists_video_card/

Gruß,
dasrotemopped.

von H-G S. (haenschen)


Lesenswert?

Das mit den verfügbaren Quartz/Oszillatoren hat sich erübrigt!

Ich habe gelesen dass diese VGA-zu-HDMI-Konverter nur 640x480 und 
800x600 etc. als Eingangssignal unterstützen.

Dann bleiben nur folgende Takt-Optionen:

10MHz für 200x150 Pixel (800x600 durch 4)
18MHz für 320x240 Pixel (640x480 durch 2)
20MHz für 400x300 Pixel (800x600 durch 2)

Ich denke ich probiere die 10MHz, da dürfte es den geringsten EMI geben.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

H-G S. schrieb:
> Ich habe gelesen dass diese VGA-zu-HDMI-Konverter nur 640x480 und
> 800x600 etc. als Eingangssignal unterstützen.

Aha. Dann würden sie z.B. im Textmodus nicht funktionieren.

Im PC-Umfeld ist so etwas dann nicht sinnvoll verwertbar.

Könnte es sein, daß die Beschreibung etwas ... unvollständig ist?

von hänschen (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Könnte es sein, daß die Beschreibung etwas ... unvollständig ist?

Es waren die Spezifikationen von den billigsten VGA-HDMI-Konvertern, 
also um 15-30 Euro rum.

Aber es gibt scheinbar noch welche ab 50 Euro, vielleicht unterstützen 
die mehrere VGA-Auflösungen.

von c-hater (Gast)


Lesenswert?

H-G S. schrieb:

> Ich habe gelesen dass diese VGA-zu-HDMI-Konverter nur 640x480 und
> 800x600 etc. als Eingangssignal unterstützen.

Das ist definitiv Unsinn. Schon für ca. 20€ kannst du (in Deutschland!) 
welche kaufen, die jeden VGA- oder VESA-Modus korrekt umsetzen, so 
lange der angeschlossene HDMI-Empfänger auf Anfrage anzeigt, dass er in 
der Lage und willens ist, mit diesem Format umgehen zu können...

De facto handelt es sich bei diesen Wandlern um genau die gleichen 
Bausteine, die auch in jedem heutigen TV oder Monitor sitzen, sofern 
dieser überhaupt noch einen analogen VGA-Eingang (oder analogen 
Videoeingang) besitzt...

Beitrag #5108606 wurde von einem Moderator gelöscht.
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.