Signalgeneratoren zur Erzeugung der Synchronimpulse

VGA- und FBAS-Signale liegen in Bereichen, die ein AVR-Mikrocontroller gut erzeugen kann. Dessen Taktfrequenz liegt bei 20 MHz – er hat damit für jede Zeile 528 Takte bei SVGA, 634 Takte bei VGA bzw. 1280 bei FBAS Takte Zeit.

Warum überhaupt ein Mikrocontroller? Die Sync-Signale könnten direkt genutzt werden, um die benötigten Sägezahnsignale zu erzeugen. Darauf gibt es zwei Antworten:

  • Die Nutzung der externen Sync-Signale zwingt das Bild in ein sehr starres Raster. Da insbesondere bei VGA auch ein sehr exaktes Timing vorliegt, bei dem der eigentliche Sync-Impuls nur einen kleinen Teil der gesamten Rücklaufzeit umfasst, hat man keine Regelmöglichkeiten für eine Bildlagekontrolle. Der Mikrocontroller hilft, die Rücklaufsignale von diesem starren Raster zu entkoppeln, so dass man die Bildlage sehr genau justieren kann.
  • Der Mikrocontroller kann zudem auch selbst Sync-Signale erzeugen, wenn kein externes Signal anliegt. Er kann damit als selbständiger Signalgenerator arbeiten.

Schaltplan BRE-Modul

Um die Signale möglichst optimal aufbereiten zu können, wurde eine Kombination aus zwei AVR-Mikrocontrollern vom Typ ATMega88 gewählt. Diese Chips können mit maximal 20 MHz getaktet werden, bieten drei Eingangs- bzw. Ausgangsgruppen an und können über zwei Interrupt-Eingänge von außen zur Arbeit angeleitet werden.

Signalgeneratoren

Der Horizontalgenerator

Der Horizontalgenerator (im Schaltbild der untere Mikrocontroller) wird mit einem Quarz bei 20 MHz getaktet. Um die horizontalen Synchronimpulse zu erzeugen, besitzt der Mikrocontroller mehrere Arbeitsmodi, die an den Eingängen eingestellt werden können:

  • FBAS extern: Der Mikrocontroller reagiert dann auf Impulse an seinem Eingang INT0. Gemäß der Spezifikation des FBAS-Signals wird die fallende Flanke des Signals genutzt (negative Sync-Impulse). Am Ausgang C0 des Mikrocontrollers wird dann ein um eine Zeile verzögertes Sync-Signal ausgegeben, dessen exakte Position über einen Schalter noch nachgeregelt werden kann – das ist die Zeilenlagekorrektur.
  • VGA/SVGA extern: Der Mikrocontroller reagiert dann auf Impulse an seinem Eingang INT1. VGA liefert negative Sync-Impulse, SVGA hingegen positive. Da heute Geräte verfügbar, die sich nicht unbedingt an diese Spezifikation halten, kann die Erkennung der Taktflanken von „spezifikationskonform“ zu „reverse Sync“ geändert werden. Dann reagiert der INT1-Eingang auf die steigende bzw. fallende Flanke, wenn die Spezifikation eigentlich das Gegenteil voraussetzt. Am Ausgang C0 des Mikrocontrollers wird dann ein um eine Zeile verzögertes Sync-Signal ausgegeben, dessen exakte Position über einen Schalter noch nachgeregelt werden kann – diese Zeilenlagekorrektur arbeitet exakt wie bei FBAS. Für die Unterscheidung von VGA und SVGA ist ein spezieller Eingang vorgesehen, der bspw. mit einem Schalter versehen werden kann.
  • FBAS intern: Der Mikrocontroller erzeugt timing-gerechte FBAS-Signale ohne Triggerung über INT0. Es wird zudem am Ausgang B0 auch das vertikale Sync-Signal ausgegeben. Signale mit höherer Taktung (50/100/200/400 Hz und 15625/31.250Hz/62.500/125.000 Hz) stehen dann an den Ausgängen B1-B4 bzw. C1-C4 zur Verfügung.
  • VGA intern: Der Mikrocontroller erzeugt timing-gerechte VGA-Signale ohne Triggerung über INT0. Es wird zudem am Ausgang B0 auch das vertikale Sync-Signal ausgegeben. Signale mit höherer Taktung (60/120/240/480 Hz und 31.400/62.800/125.600/251.200) stehen dann an den Ausgängen B1-B4 bzw. C1-C4 zur Verfügung.

Der Vertikalgenerator

Der Vertikalgenerator (im Schaltbild der obere Mikrocontroller) wird aufgrund der geringen Anforderungen an die Betriebsfrequenzen mit seinem internen Taktgenerator mit 8 MHz getaktet. Um die horizontalen Synchronimpulse zu erzeugen, besitzt der Mikrocontroller mehrere Arbeitsmodi, die an den Eingängen eingestellt werden können:

  • FBAS extern: Der Mikrocontroller reagiert dann auf Impulse an seinem Eingang INT0. Gemäß der Spezifikation des FBAS-Signals wird die fallende Flanke des Signals genutzt (negative Sync-Impulse). Am Ausgang C0 des Mikrocontrollers wird dann ein um ein Bild verzögertes Sync-Signal ausgegeben, dessen exakte Position über einen Schalter noch nachgeregelt werden kann – das ist die Bildlagekorrektur.
  • VGA/SVGA extern: Der Mikrocontroller reagiert dann auf Impulse an seinem Eingang INT1. VGA liefert negative Sync-Impulse, SVGA hingegen positive. Da heute Geräte verfügbar, die sich nicht unbedingt an diese Spezifikation halten, kann die Erkennung der Taktflanken von „spezifikationskonform“ zu „reverse Sync“ geändert werden. Dann reagiert der INT1-Eingang auf die steigende bzw. fallende Flanke, wenn die Spezifikation eigentlich das Gegenteil voraussetzt. Am Ausgang C0 des Mikrocontrollers wird dann ein um ein Bild verzögertes Sync-Signal ausgegeben, dessen exakte Position über einen Schalter noch nachgeregelt werden kann – diese Bildlagekorrektur arbeitet exakt wie bei FBAS. Für die Unterscheidung von VGA und SVGA ist ein spezieller Eingang vorgesehen, der bspw. mit einem Schalter versehen werden kann.

Bei FBAS intern und VGA intern arbeitet der Mikrocontroller nicht. An seinen Ausgängen B1-B4 werden aber die Betriebsmodi angezeigt, die dann mit angeschlossenen LEDs visualisiert werden können.

Bild- und Zeilenlage

Die erwähnten Verzögerungen von Zeilen- und Bildsynchronimpulsen und die Länge der Synchronimpulse werden durch die Betriebssoftware der Mikrocontroller festgelegt. Sie sind von großer Wichtigkeit für den Gesamteindruck des Bildes:

  • Stimmen Bild- oder Zeilenlage nicht, dann beginnt bspw. die Zeile nicht an der linken Seite, sondern zur Mitte verschoben – das Bild endet dann links von seinem Anfang.
  • Stimmt die Länge der Sync-Impulse nicht, führt dies zu sichtbaren Rückläufen und zu Zeilenfehlern im Bild.
  • Ist die Verzögerung zu lang, dann synchronisiert das Bild nicht mehr, sondern „läuft durch“.

Die Bilder zeigen ein VGA-Signal einmal mit korrekt ausgeführter Zeilenlagenkorrektur und einmal komplett ohne.

Testbild VGA   Testbild VGA ohne Bildlage

Das Bild rechts ist verschoben, erst die Verzögerung der HSync-Impulse sorgt für eine korrekte Darstellung.

Betriebssoftware

Die Software für die beiden Mikrocontroller wurde in C mit dem AVR-Studio erstellt. Sie weist keine wesentlichen Besonderheiten auf. In der Hauptschleife werden die Schalterstellungen für die Betriebsmodi ausgewertet.

Die externen Synchronimpulse werden über die Eingänge INT0 (FBAS) und INT1 (VGA) verarbeitet. Nur eine von beiden Interruptsteuerungen kann jeweils aktiv sein. Soll der Mikrocontroller als interner Generator arbeiten, dann erfolgt dessen Steuerung über einen Zeitablauf – nach jeweils einer Zeile erfolgt ein Trigger. Die höherfrequenten Signale werden dabei in der Zeitablaufsteuerung erzeugt, indem jeweils nach einigen Takten Signalausgänge an- oder abgeschaltet werden.

Wenn sich während des Betriebs etwas ändert, werden die laufenden Steuerungen unterbrochen und gemäß der neuen Einstellungen neu gestartet. Der Horizontalgenerator zeigte hier beim Übergang zum internen Betrieb manchmal Schwierigkeiten. Er kann daher über einen RESET-Taster auf der Platine auch von Hand neu gestartet werden.

Die Software kann hier heruntergeladen werden. Vorsicht: sie besitzt noch Prototypenstadium, da wird sich im laufe der Zeit noch einiges ändern. Damit die Codes korrekt kompiliert werden können, müssen sie jeweils in main.c umbenannt werden – dann klappt auch die Zusammenarbeit mit dem Makefile.

Bildgenerator_Prototyp_0.2

Pegelanpassung

Die erzeugten Signale haben eine Amplitude von 5V und sind nicht sehr belastbar. Daher wurde den Generatoren eine Kombination aus den Logikgattern CD4001 (4x NOR) und CD4071 (4x OR) nachgeschaltet. Hier werden einerseits die vertikalen Sync-Impulse für intern (erzeugt im Horizontalgenerator) und extern (erzeugt im Vertikalgenerator) gemischt und andererseits alle Pegel auf 9V gebracht.

Besonderheiten

Wenn im externen Betrieb kein Signal anliegt, bricht das Bild komplett zusammen, da keine eigenständigen Synchronimpulse erzeugt werden. Die Helligkeit des Bildes sollte daher so gewählt werden, dass der Leuchtpunkt nicht auf dem Bildschirm einbrennen kann.

Zurück zur Hauptseite

 

3 Antworten zu Signalgeneratoren zur Erzeugung der Synchronimpulse

  1. Johannes sagt:

    Hallo,

    Werden die CD40xx Gatter mit 9V versorgt ?
    Dann ist Vin-High der Gatter aber >6,3V (70% Vcc) und ausserhalb der Port-Pegel des uC. Vermutlich sind die typischen Werte der Gatter meistens gerade ausreichend.

    Reicht bei den nach extern führenden Signalen (VSync, HSync, Q1 ..Q8) ein 5V-Pegel oder ist sogar ein Level-Shifter nötig ? Könnte man einen LM3900 als Level-Shifter (Schmitt-Trigger) verwenden ?

    Johannes

    • JeanLuc7 sagt:

      Salut Johannes,
      danke für den Hinweis – das Pegelproblem war mir bisher so nicht bewusst. Ich habe beim Bau allerdings festgestellt, dass es mit einigen Chips besser als mit anderen geht – das spricht dafür, dass ich offenbar am Rande der zulässigen Pegel arbeite.
      Die Q1-Q8-Signale nutze ich beispielsweise beim VGA-Modul für das Videospiel – es funktioniert, aber dort gilt aber dann das gleiche wie oben, eigentlich sind die H-Pegel zu schwach. Ein Level-Shifter (bspw. ein ULN2803) könnte daher empfehlenswert sein. Andernfalls würde ich eher zu einem CMOS-Schmitt-Trigger 4093 greifen oder zu einem Standard-OpAmp. Denn der LM3900 ist ja kein „echter“ OP; die komplizierten Schaltungen mit den Massen an 1MOhm-Widerständen in den EE-Handbüchern sind nur deshalb erforderlich, weil er eigentlich Ausgangsspannungen mit Eingangsströmen statt -spannungen assoziiert (Quelle: http://www.kranenborg.org/ee/ee1.htm).

      Nochmals Danke für den Hinweis; ich werde es bei zukünftigen Entwürfen berücksichtigen.
      Grüße, JL7

  2. Johannes sagt:

    Hallo JL7,

    Es freut mich, daß mein Vorschlag gut angekommen ist.
    Den Norton-OP (LM3900) habe ich aus nostalgischen Gründen vorgeschlagen, da er ja auch schon in der EE2001 Serie enthalten war. Aber grundsätzlich tut’s auch ein standard OP a la LM324, TL074/TL084 oder modernen Rail-to-Rail (-Output) OP’s.

    Eigentlich wäre ein CD4504 ideal, aber der ist inzwischen nicht mehr leicht erhältlich.
    Ein Darlington-Array ULN2803/ULN2804/ULN2003 ist auch OK aber dann hat man nur mehr Open-Kollektor-Ausgänge (anstatt Push-Pull Endstufen). Der bei den ULN Transistor-Arrays nötige Pull-Up bestimmt die High-Souce Eigenschaften (Stichwort „schwache H-Pegel“), aber niedrige Widerstandswerte verursachen einen hohen Stromverbrauch bei L-Pegel.

    Ein Level-Shifter (mit TTL-Eingangspegeln) würde auch eine 3,3V uC-Versorgung zulassen.

    Bin gespannt welche Lösung das Rennen macht.

    Johannes

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.