Forum: Mikrocontroller und Digitale Elektronik VGA: Wie Blanking von Pixeldaten unterscheiden


von M. Н. (Gast)


Lesenswert?

Hallo,

bisher habe ich VGA hauptsächlich generiert mittels FPGA o.ä. Bis 
hierhin war das für mich auch immer sehr logisch. Man generiert seine 
Pixel und sendet entpsrechend HSYNC/VSYNC.

Ich stehe nun davor, eine VGA Senke zu bauen. Jetzt verstehe ich aber 
nicht, wie ich in einer Zeile, also zwischen zwei HSYNC Pulsen 
herausfinde, was zum front/back porch gehört, und was Pixeldaten sind. 
VGA besitzt keine übertragene Pixelclock.

Wie detektiere ich die horizontale Auflösung?
Wie erkenne ich, wie breit meine front/back porches sind? Die scheinen 
nicht zwangsweise gleich groß zu sein.

Vielen Dank.

von J. T. (chaoskind)


Lesenswert?

Ich selbst kenn mich damit zwar quasi überhaupt nicht aus, erinnere mich 
aber das Ben Eater (youtuber) in seinem "worst videocard of the 
world"-Video ziemlich ausführlich aufs VGA-Timing eingegangen ist. Wie 
das Video exakt hieß, weiß ich auch nicht mehr, aber mit "Ben Eater 
Videocard" sollte es findbar sein.

MfG Chaos

von M. Н. (Gast)


Lesenswert?

J. T. schrieb:
> Ich selbst kenn mich damit zwar quasi überhaupt nicht aus, erinnere mich
> aber das Ben Eater (youtuber) in seinem "worst videocard of the
> world"-Video ziemlich ausführlich aufs VGA-Timing eingegangen ist. Wie
> das Video exakt hieß, weiß ich auch nicht mehr, aber mit "Ben Eater
> Videocard" sollte es findbar sein.

Ist das der mit der Diskreten VGA Karte aus Logikgrab + EEPROM? Wenn ja, 
dann habe ich das schonmal gesehen. Der geht leider auch nur darauf ein, 
wie man das Signal generiert. Wie man aus dem generierten Signal 
allerdings wieder herausfinden soll, wo die Pixeldaten sind, ist mir ein 
Rätsel. IMHO gehen da Infos verloren.

Erkennen Bildschirme die Front/Back porches daran, dass diese immer 
schwarz sind? Was würde in diesem Fall passieren, wenn ich ein VGA Bild 
sende, bei dem die linkeste Pixelspalte immer schwarz ist. Würde der 
Bildschirm diese dann fälschlicherweise als Teil des Front Porches 
interpretieren und aus dem Bild nehmen?

von c-hater (Gast)


Lesenswert?

M. H. schrieb:

> Wie detektiere ich die horizontale Auflösung?

Der Witz ist: das geht nicht wirklich. Kann man nur indirekt aus den 
Syncs ableiten. Die haben für jeden definierten Modus ganz typische 
Werte bezüglich Frequenz und Polarität. Aus den Werten kann man also 
umgekehrt den Modus ableiten und damit den nötigen Pixeltakt.

> Wie erkenne ich, wie breit meine front/back porches sind?

Auch das geht nicht wirklich. Kann man bestenfalls nur aus dem 
Bildinhalt ableiten. Wenn er denn geeignet ist. Ein vollkommen schwarzes 
Bild ist schonmal völlig ungeeignet...

Schau dir einfach mal an, was ein normaler Monitor tut, wenn du 
"AutoAdjust" drückst. Ungefähr dasselbe musst auch du tun, eine bessere 
Lösung gibt's nicht wegen ist nicht. Gibt das Signal einfach nicht her.

von M. Н. (Gast)


Lesenswert?

c-hater schrieb:
> Der Witz ist: das geht nicht wirklich

Das ist auf der einen Seite natürlich schön, dass ich das schon richtig 
angenommen hatte. Auf der anderen Seite aber blöd für die 
implementierung.

Ich denke ich werde im FPGA entweder die üblichen Timings hinterlegen, 
oder eine statistik führen, wie viele Pixel vor/nach dem HSYNC immer 
schwarz sind und entsprechend die Porches annehmen.

Genauso für die Zeilen. Gibt es eine Garantie, dass die Porches immer 
schwarz sind, beziehungsweise nah an schwarz (wegen analog und so)?

von Aleks (Gast)


Lesenswert?

Hallo Bambel,

ich bin auch kein Experte. Ich glaube, es gibt einige "Standard" 
Auflösungen bei VGA (VGA Modi) und durch zählen der HSyncs und Messen 
Ihrer Länge wird zuerst entschieden, welche der Standard Auflösungen es 
sein könnte.
Wenn man das weiß, dann ist auch das Timing für Pixelclock bekannt und 
die vordere und hintere Flanke der HSync Signals werden benutzt um das 
interne Pixelclock zu synchronisieren (eventuell auch die PLL Frequenz). 
Dann wird gezählt.
Im Prinzip ist die Vorgehensweise ähnlich wie beim analogen Fernseher. 
Dort gab es "Blanking" Signale, aber ich weiß nicht wie sie generiert 
waren.

Grüße,
Aleks

von c-hater (Gast)


Lesenswert?

M. H. schrieb:

> Gibt es eine Garantie, dass die Porches immer
> schwarz sind, beziehungsweise nah an schwarz (wegen analog und so)?

Definiere "nah"... ;o)

Also: nein. Aber es gibt Anhaltspunkte, wenn man statistisch unterstützt 
über mehrere oder alle Zeilen hinweg analysiert. Oftmals selbst bei 
einem komplett "schwarzen" Bild (was eigentlich NICHT so sein sollte).

Man kann allerdings immerhin meist davon ausgehen, dass das, was man so 
als Schwarzpegel für die Porches der Zeilen identifiziert hat (wenn es 
was zu identifizieren gab), auch der Schwarzpegel für die 
Vertikalporches ist. Allerdings habe ich auch von dieser Regel schon 
fiese Ausnahmen gesehen...

Zusammenfassend: eine praktisch brauchbare Erkennungslogik zu schaffen, 
wird dich einige Zeit lang gut beschäftigen. Wenn das eine kommerzielle 
Lösung werden soll, würde ich den Einkauf von entsprechendem IP 
vorschlagen. Sehr gut möglich, dass das am Ende kostenmäßig deutlich 
günstiger kommt.

von (prx) A. K. (prx)


Lesenswert?

M. H. schrieb:
> Die scheinen nicht zwangsweise gleich groß zu sein.

So ist es. Aus der Zeit analoger Monitore ohne sonderlich viel 
Eigenintelligenz wissen ältere Semester, dass man Bildgrösse und 
Position manuell je nach Signalquelle manuell einstellen musste.

Bei Fernsehern war das nur deshalb nicht nötig, weil die so eingestellt 
waren, dass sie stets am Rand einen Teil des Bildes abschnitten. Bei 
Computerbildschirmen erwies sich dieses Overscan jedoch als unpraktisch, 
aber da war dieses lockere Timing der Übertragungstechnik bereits 
erschaffen und definiert.

von Gustl B. (-gb-)


Lesenswert?

Aleks schrieb:
> Ich glaube, es gibt einige "Standard"
> Auflösungen bei VGA (VGA Modi)

Exakt:
http://tinyvga.com/vga-timing

Aleks schrieb:
> durch zählen der HSyncs und Messen
> Ihrer Länge wird zuerst entschieden, welche der Standard Auflösungen es
> sein könnte.

Richtig. Es reicht nicht nur auf Flanken zu reagieren, es muss 
tatsächlich gemessen werden wie lange die Pulse sind.

Und dann gibt es noch die EDID und DDC. Was da alles möglich ist weiß 
ich nicht, aber es ist ein digitales Interface zwischen Monitor und 
Grafikkarte. Darüber kann vermutlich gesagt werden welche Auflösungen 
der Monitor kann und vielleicht sagt die Grafikkarte auch welche 
Auflösung er ausgibt.

c-hater schrieb:
> würde ich den Einkauf von entsprechendem IP vorschlagen.

Ja, vielleicht ist es aber auch günstiger einen IC zu kaufen der das 
kann.

: Bearbeitet durch User
von M. Н. (Gast)


Lesenswert?

Gustl B. schrieb:
> Ja, vielleicht ist es aber auch günstiger einen IC zu kaufen der das
> kann.

Jetz wo ich weiß, dass da keine Magie drin versteckt ist, sondern das 
ganze einfach bisschen kaputt ist, ist es an sich kein Problem die 
Timings zu messen und entsprechend einen "educated guess" zu machen, was 
es sein wird. Zur Not kann man den Modus eben noch manuell einstellen.

von Gustl B. (-gb-)


Lesenswert?

Genau. Aber vielleicht kannst du noch irgendwelche Tricks lernen wenn du 
dir fertige Lösungen anguckst wie den 
https://www.analog.com/media/en/technical-documentation/data-sheets/ADV7403.pdf

Fertige Lösungen gibt es auch für sehr kleines Geld:
https://www.ebay.de/itm/184456583503

Das IC:
http://aitendo3.sakura.ne.jp/aitendo_data/product_img/lcd_controller/Xs/RTD2660.jsp.pdf

: Bearbeitet durch User
von Egon D. (Gast)


Lesenswert?

M. H. schrieb:

> Jetz wo ich weiß, dass da keine Magie drin versteckt
> ist, sondern das ganze einfach bisschen kaputt ist,

Das sieht nur für den so aus, der die Historie nicht
kennt.

Bildröhren kennen keine (definiert adressierbaren)
"Pixel", sondern nur Farbtripel. Wieviele Signalwechsel
die Quelle je Zeile erzeugen kann, ist der Bildröhre
VÖLLIG wumpe -- davon hängt technisch nichts ab.

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.