mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik VSync und HSync bei VGA


Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas wrote:

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

Eventuell, wenn die Zeiten stimmen. Aber zu dem kleinen Ausschnitt kann 
man nicht wirklich was sagen. Von VSync ist da garnichts zu sehen.

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte funktionieren, wenn das Timing passt.
Hier sind die ganzen Werte aufgelistet:
http://info.electronicwerkstatt.de/bereiche/monito...

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt verschiedene Auflösungen die über die Sync Polarität erkannt 
werden. Aber das hat eher historische Gründe. Heutige Multisync Monitore 
kommen mit beliebiger Sync Polarität zurecht. Es reicht also das Timing 
zu verändern.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
vgl. mal Excel Datei.

Thomas

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im obigen Link von Benedikt K. sind doch eine ganze Menge Beispiele.

  http://info.electronicwerkstatt.de/bereiche/monito...

Reichen die nicht?

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe die Tabelle verbessert (nur Pixel und Zeilen, Zeiten noch 
nicht). Aber ich glaube fast nicht, dass ich das richtig gemacht habe. 
:-(

Über eine Hilfe wäre ich wirklich sehr dankbar.

Thomas

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank.

Ich habe die Tabelle verbessert, ist das so richtig?
Reichen 5MHz Pixeltaktfrequenz überhaupt für eine Auflösung vom 320 x 
200?

Thomas

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, den Beitrag habe ich noch nicht gesehen, danke.

Aber ich glaube nicht, dass er mir weiterhilft: Am Ende bleibt mehr oder 
weniger das gleiche Problem wie ich habe.


Thomas

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach fast 5 Jahren wird er das Problem wohl gelöst haben, oder? Ich 
frage mich, wie dieser Thread überhaupt entdeckt wurde. Jedenfalls ein 
Lob der zähen Datenbank von MC.net :-)
Vllt. besser sperren....

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Sch. schrieb:

> Nach fast 5 Jahren wird er das Problem wohl gelöst haben, oder?

Wahrscheinlich. Aber 5 Jahre sind eine lange Zeit, in der vielleicht 
andere Lösungsmöglichkeiten aufgetaucht sind. Z.B. gab's vor 5 Jahren 
noch keinen Mega1284 (jedenfalls nicht wirklich zu kaufen).

Autor: Sprachlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> (jedenfalls nicht wirklich zu kaufen)

Unwirklich wohl auch nicht.
Dass ein AVR für VGA-Signale nicht ausreicht, war aber damals schon 
bekannt. Daran wird sich auch nach Einführung des ATmega14781 auch 
nichts ändern.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sprachlos schrieb:
> Daran wird sich auch nach Einführung des ATmega14781 auch
> nichts ändern.

Nö, dafür reicht ein ATMega32:
http://neil.franklin.ch/Projects/SoftVGA/
Oder ein Mega324P
http://quinndunki.com/blondihacks/?p=955
oder ein Mega644
http://www.lucidscience.com/pro-vga%20video%20gene...

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sprachlos schrieb:

> Dass ein AVR für VGA-Signale nicht ausreicht

Wieso? Tut er doch offensichtlich, wenn auch nicht in jedem Aspekt der 
Sache. Aber eben immerhin gut genug, daß sich Nutzungsmöglichkeiten 
ergeben.

Autor: Paulo M. (paulo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein Attiny 2313 reicht auch

Deogen - Tiny Monitor Tester
http://www.radiolocman.com/shem/schematics.html?di=55404

Gruß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.