VSync und HSync bei VGA

Gast #938760
Lesenswert?

Hallo,

ich möchte einen VGA-Port ansteuern und habe dazu zunächst einmal die 
Signale VSync und HSync erstellt (siehe Anhang).

Ist das so richtig? Die Zeiten stimmen nicht, das weiß ich, aber könnte 
das ansonsten so richtig sein?

Thomas
Angehängte Dateien:
Gast #938773
Lesenswert?

Stimmt, man erkennt wirklich nicht besonders viel, im Anhang ist ein 
besserer Screenshot.

Eine Frage noch dazu: Angenommen die Zeiten wären richtig, was müsste 
ich dann verändern, um die Signale für eine andere Auflösung zu 
verwenden?
Angehängte Dateien:
Gast #938780
Lesenswert?

Ja, die Werte kenne ich, ich hatte nur noch keine Zeit das richtige 
Clock-Signal zu erstellen.

Muss ich irgendwas verändern, wenn ich die Signale für eine andere 
Auflösung verwenden möchte? Die absoluten Zeiten bleiben ja immer 
gleich...

Thomas
Gast #938790
Lesenswert?

Welches Timing? Nur das Timing von R,G und B oder auch das von HSync und 
VSync?
Wenn ich die Anzahl der Clocks verkleinere, erhöht isch ja auch die 
Pixeltaktfrequenz, so dass das Timing im Endeffekt gleich bleiben 
sollte.

Thomas
#938794
Lesenswert?

Thomas wrote:
> Welches Timing? Nur das Timing von R,G und B oder auch das von HSync und
> VSync?

Natürlich auch das der Sync Signale. Ansonsten hat der Monitor ja keine 
Möglichkeit das Timing zu erkennen.

> Wenn ich die Anzahl der Clocks verkleinere, erhöht isch ja auch die
> Pixeltaktfrequenz

Nein. Der Pixeltakt ist der Takt aus dem alle anderen Takte abgeleitete 
werden. Wenn du den Pixeltakt erhöhst wird entweder die Framerate höher, 
oder du erhöhst die Anzahl an Pixel pro Zeile und pro Bild und erhälst 
so eine höhere Auflösung.
Gast #938800
Lesenswert?

Mh, danke.

Was ist denn mit der Excel-Datei? Man sieht dort, dass die Zeiten in den 
Spalten F und I identisch sind. Ist das nicht der Beweis dafür, dass das 
Timing gleich bleiben kann?

Entschuldigung, wenn ich auf denm Schlauch stehen sollte,

Thomas
Gast #938821
Lesenswert?

Die Zeilenfrequenz ist immer die Bildfrequenz multipliziert mit der
Anzahl der sichtbaren und unsichtbaren Zeilen. Reduzierst du die
Zeilenzahl, wird bei gleicher Zeilenfrequenz die Bildfrequenz höher
oder bei gleicher Bildfrequenz die Zeilenfrequenz niedriger.

Die Exceldatei ist somit nicht richtig. Bei 640x480 kommen die Werte
hin: Die Zeilenzahl ist 31,5kHz / 60 Hz = 525, davon sind 480 sichtbar
und 45 unsichtbar. Bei 320x200 wäre die Anzahl der unsichtbaren Zeilen
325, also deutlich mehr als die der sichtbaren. Das ist Blödsinn.

Um eine vertikale Auflösung von ny zu erhalten, müssen innerhalb des
vertikalen Tdisp logischerweise genau ny HSync-Impulse liegen.
Gast #938832
Lesenswert?

Ok, danke.

Aber wie müssen dann die Anzahl der Pixel und Zeilen und deren Zeiten 
aussehen?
Muss ich dann für die kleinere Auflösung auch die Zeilenfrequenz ändern, 
ansonsten kann die oben genannte Formel ja nicht stimmten.

Es wäre sehr nett, wenn ihr mir auf die Sprünge helfen könntet und mir 
noch einen Tipp geben könntet und/oder mal ein paar Beispielwerte in die 
Tabelle eintragen könntet.


Vielen Dank,
Thomas
Angehängte Dateien:
Gast #938890
Lesenswert?

Das sieht schon ziemlich gut aus. Du hast jetzt die Werte für 640x480
mit dem Verhältnis der Auflösungen (also 320/640 bzw. 200/480)
multipliziert, um auf die neuen Werte zu kommen. Damit bleibt das
Verhältnis der einzelnen Timing-Parameter gleich, so dass es von
üblichen Monitoren ebenfalls akzeptiert werden sollte.

Wenn du weiterhin einen Pixeltakt von 10MHz nimmst, stimmen allerdings
die angegebenen Werte für Zeilen- und Bildfrequenz nicht mehr.

Eine komplette Zeile (von der fallenden HSync-Flanke bis zur nächsten)
ist 320+8+48+24 = 400 Pixel lang, das sind 400/10MHz = 40µs. Die
Zeilenfrequenz ist also 1/40µs = 25kHz.

Ein komplettes Bild (von der fallenden VSync-Flanke bis zur nächsten)
ist 200+4+1+12 = 217 Zeilen lang, das sind 217/25kHz = 8,68ms. Die
Zeilenfrequenz ist also 1/8,86ms = 115,2Hz.

Sind 115Hz zuviel für den Monitor, und du möchtest lieber 60Hz,
brauchst du nur den Pixeltakt mit dem Faktor 60Hz/115,2Hz zu
multiplizieren. Da du alle Timing-Parameter in Pixeln bzw. Zeilen
angegeben hast, ändert sich das Horizontal- und das Vertikal-Timing
ebenfalls um diesen Faktor. Die Pixelfrequenz wird dann 5,21MHz, die
Zeilenfrequenz 13kHz.

Die Zeilenfrequenz von 13kHz ist jetzt aber sogar noch niedriger als
die Zeilenfrequenz beim Fernsehen (15kHz), wodurch sich ein Dilemma
auftut: Viele Computermonitore können nur Zeilenfrequenzen ab etwa
25kHz und Bildfrequenzen bis etwa 100Hz. Damit sind nur Zeilenzahlen
deutlich über 200 darstellbar. Deswegen werden VGA-Grafikkarten bei
geringen vertikalen Auflösungen meist im so genannten Double-Scan-
Modus betrieben, in dem jede Grafikzeile zweimal hintereinander
ausgegeben wird, um bei gleicher Bildfrequenz die Zeilenfrequenz zu
verdoppeln. Der Monitor "sieht" dann 400 Zeilen anstelle der realen
200.
#939037
Lesenswert?

Thomas wrote:

> Ich habe die Tabelle verbessert, ist das so richtig?

Sieht gut aus.

> Reichen 5MHz Pixeltaktfrequenz überhaupt für eine Auflösung vom 320 x
> 200?

Ja. 320x240 TFTs laufen üblicherweise mit 6-8MHz, also auch in etwa in 
dem Bereich.
Nur auf einem normalen Monitor wirst du das nicht anzeigen können.
Gast #939063
Lesenswert?

Ich schließe mich Benedikts Aussagen an. Zusätzlich:

> Ich habe die Tabelle verbessert, ist das so richtig?

Da es keine gebrochenen Pixel und Zeilen gibt, würde ich die Werte auf
ganze Zahlen runden, also 320, 4, 25, 12, 200, 2, 1 und 6. Damit
ergeben sich geringfügig andere Ergebnisse für die Pixel- und die
Zeilenfrequenz, wenn man von einer festen Bildfrequenz von 60Hz
ausgeht.

> Reichen 5MHz Pixeltaktfrequenz überhaupt für eine Auflösung vom 320 x
> 200?

Wie gesagt, du musst nachschauen, ob Zeilen- und Bidfrequenz im
erlaubten Bereich des eingesetzten Bildschirms liegen. Das sind die
beiden wesentlichen Parameter, die stimmen müssen. 60Hz kann fast
jeder Bildschirm, bei den 13kHz wird es evtl. eng. Weißt du denn
schon, was du an den VGA-Ausgang anschließen möchtest?
Gast #939585
Lesenswert?

Hallo,

danke nochmal für die ganze Hilfe.

Nein, ich weiß noch nicht, was ich an den VGA-Port anschließen will, mir 
ist aber egal, ob Fernsehn, PC-Monitor oder was ganz anderes.

Gibt es irgendeine Möglichkeit ein 320 x 200 VGA-Signal zu erzeugen, das 
sicher auf einem PC-Monitor angezeigt werden kann?


Thomas
Gast #940140
Lesenswert?

> Gibt es irgendeine Möglichkeit ein 320 x 200 VGA-Signal zu erzeugen,
> das sicher auf einem PC-Monitor angezeigt werden kann?

Ich glaube nicht, dass es ein Timing für 320x200 gibt, das auf jedem
PC-Monitor funktioniert. LC-Monitore und ältere Röhrenmonitore können
meist keine hohen Bildfrequenzen, modernere Monitore keine niedrigen
Zeilenfrequenzen. Selbst es es vom Timing her ginge: Bei 200 Zeilen auf
einem 21"-Röhrenmonitor wäre nur wenig zu erkennen, da die einzelnen
Zeilen bei einer Dicke von 0,3mm oder weniger einen vertikalen Abstand
von 1,5mm hätten. Das Bild wäre also im Wesentlichen schwarz mit ein
paar dünnen, bunten, horizontalen Linien darauf. Ob man da noch eine
Schrift erkennen könnte? Vielleicht mit zusammengekniffenen Augen und
viel Phantasie.
Persönliche Seite #940208
Lesenswert?

Sofern man "PC-Monitor" eingrenzt auf "PC-Monitor, der VGA-Signale 
anzeigen kann", ist eigentlich klar definiert, wie 320x200 anzuzeigen 
ist:

Mit einer Zeilenfrequenz von 31.25 kHz und einer Zeilenverdoppelung, so 
daß effektiv 320x400 ausgegeben wird.

Die Zeilenfrequenz ist bei allen VGA-Modi identisch, die Anzahl der 
ausgegebenen Zeilen und in Folge dessen die Bildwechselfrequenz ändert 
sich.

a) 400 Zeilen -> 70 Hz

Das wird bei den Auflösungen 320x200, 640x200 (diese jeweils mit 
Zeilenverdoppelung) und im "Text"-Modus mit 720x400 verwendet (80x25 
Zeichen in einer 9x16-Matrix).

b) 480 Zeilen -> 60 Hz

Das wird bei 640x480 verwendet.

Die Anzahl der anzuzeigenden Bildzeilen wird dem VGA-Monitor durch die 
Polarität der Synchronsignale mitgeteilt; bei 400 Zeilen wird das Bild 
vertikal gespreizt (also der Zeilenabstand etwas erhöht), was bei 480 
Zeilen nicht geschieht.

Diese VGA-Modi unterstützt auch heute noch jeder Monitor mit analogem 
VGA-Anschluss.

Modi mit höheren Auflösungen oder anderen Bildwechselfrequenzen sind 
keine VGA-Modi, sondern SVGA/XGA/SXGA-etc.-Modi und müssen daher hier 
nicht berücksichtigt werden.
Gast #3125774
Lesenswert?

Thomas schrieb:

> Gibt es irgendeine Möglichkeit ein 320 x 200 VGA-Signal zu erzeugen, das
> sicher auf einem PC-Monitor angezeigt werden kann?

Ja, klar. Allerdings nur dann, wenn deine Hardware in der Lage ist, 
Pixel mit 12,nochwas MHz rauszuballern. Damit fallen AVRs flach, 
jedenfalls wenn man sie nicht deutlich übertakten möchte. Damit ginge es 
höchstens "hochkant", also 200x320.

Aaaber: gibt es überhaupt einen tieferen Grund für genau die genannte 
Auflösung? Wenn nicht, machst du einfach eine Auflösung, die der AVR 
ohne Übertakten packt.

Das Limit bei Verwendung der USART im SPI-Modus als Schieberegister für 
die Ausgabe sind bei 20MHz Takt horizontal 256 Pixel. Eigentlich 254, 
aber so genau mißt das kein Monitor nach (kann er garnicht), man macht 
die Schwarzschulter einfach um die rund zwei überzähligen Pixel schmaler 
als der Standard es vorgibt. Hauptsache, die Zeilenfrequenz paßt.

Also halten wir erstmal fest: 256/8=32 Bytes/Zeile. Der AVR mit dem 
größten Speicher hat 16k RAM, damit kommt man dann maximal auf 512 
solcher Zeilen, aber es werden nur 480 gebraucht, weil sowieso nur so 
viele sichtbar sind.

Es geht also ein Modus mit 256x480 rechteckigen Pixeln, wobei das 
PixelAspectRatio ungefähr bei 2,5:1 liegt, die Pixel sind also 
zweieinhalb mal so breit wie hoch.

Nun noch das Timing im Detail: Das am nächsten am Standard liegende 
Timing wäre mit Teiler 635 für die Zeilenfrequenz, es ergibt sich eine 
Zeilenfrequenz von 31496,063 Hz und eine Bildfrequenz von 59,9925 Hz. 
Jeder Röhrenmonitor dürfte darauf synchronisieren und auch die 
allermeisten LCD-Monitore und -TVs mit VGA-Eingang.

Übrigens: Bei einem 1284P hast du zwei USARTs, die sich im SPI-Modus 
betreiben lassen. Bei Halbierung der vertikalen Auflösung auf 240 Zeilen 
reicht der Speicher dann auch für eine Vierfarb-Grafik mit 256x240 
Pixeln bei einem PAR von 1,25:1. Das ist schon eine ganz brauchbare 
Sache.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren