Wie kann ich einen CGA-Bildschirm mit einem Arduino steuern?


7

Ich erhalte eine dieser http://www.old-computers.com/museum/computer.asp?st=1&c=446

Ich plane, einen Server darin zu bauen. Und ich dachte daran, den eingebauten CGA-Monitor als Statusanzeige zu verwenden (LCDInfo-Stil oder was auch immer die coolen Geeks heutzutage verwenden). Der Bildschirm ist monochrom bernsteinfarben, daher würde er wahrscheinlich ein bisschen wie die Planar EL-Bildschirme aussehen, die einige in ihren Mods verwendet haben. Und ich möchte ein Arduino (oder ähnliches) als Middleware-Lösung verwenden ... PC -> Arduino -> Bildschirm

Ich habe ein bisschen nachgesehen und CGA ist ein RGBI-Signal mit TTL-Kommunikation. 4 Zeilen (RGB + Intensität), kombiniert mit HSYNC (15,75 kHz) und VSYNC (60 Hz). Die 4 "Farbeingänge" sind logisch ein oder aus. Die Kombination dieser erzeugt bis zu 16 Farben. Da es sich jedoch um einen gelben Bildschirm handelt, ist es wahrscheinlich am einfachsten, mit "All-High" oder "All-Low" zu beginnen ... Weiß und Schwarz.

Das Problem ist also das folgende ... Ich könnte das Arduino wahrscheinlich sowohl verdrahten als auch codieren, um die TTL-Leitungen ein- und auszuschalten, aber ich bin mir nicht sicher, was ich mit den HSYNC- und VSYNC-Eingängen mache. Und wie man die TTL-Flips zeitlich so einstellt, dass sie den Pixeln auf dem Bildschirm entsprechen. (Die Standard-CGA-Auflösung beträgt 320 x 200).

Ich bin nicht sehr gut in Elektronik, aber ich bin sehr gut darin, Anweisungen zu befolgen und Hinweise zu nehmen

Hat das schon mal jemand versucht?

EDIT : Könnte ich vielleicht eine modifizierte Version davon verwenden? http://www.eosystems.ro/deogen/deogen_en.html

EDIT2 : Ich habe nicht brauchen ein Arduino zu verwenden. Aber ich möchte es so einfach wie möglich halten.

EDIT3 : Es scheint, dass der betreffende Monitor tatsächlich ein zusammengesetzter Monitor und kein "echter" CGA-Eingangsmonitor ist. Das macht die Sache wahrscheinlich etwas einfacher. Aber ich bin immer noch daran interessiert, wie man mit einem Mikrocontroller ein reines CGA-Signal erzeugt ...

Antworten:


7

Die hsync- und vsync-Signale sind nur relativ kurze negative Impulse, die den Elektronenstrahl der CRT nach links bzw. oben auf dem Bildschirm zurücksetzen.

Da CGA im Grunde nur NTSC (AKA RS-170) mit separater Synchronisation und Komponenten war, sollte das Timing der Impulse gleich sein. Der hsync würde ungefähr alle 63,5 Mikrosekunden und der vsync ungefähr alle 16,7 Millisekunden auftreten. Das vertikale Timing sollte innerhalb der Fähigkeiten eines Arduinos liegen, aber die Horizontalen könnten schwieriger sein.

Während des aktiven horizontalen Scans müssen Sie die Luminanz entsprechend der horizontalen Auflösung aktualisieren, auf die Sie entwerfen. Um 640 Pixel zu erhalten, müssen Sie etwa alle 82 ein neues Pixel ausgeben, vorausgesetzt, Sie verwenden ungefähr 53 us der horizontalen Verfolgungszeit, um die HS-Dauer und die Ränder zu berücksichtigen, um sicherzustellen, dass Ihre Ausgabe nicht an den Rändern der CRT abläuft nanos,. Jetzt sind 82 ns (wahrscheinlich) viel zu schnell, um direkt von einem Arduino zu gelangen. Wenn Sie jedoch ein externes 8-Bit-Schieberegister verwenden, müssen Sie dieses nur etwa alle 660 ns laden, dh in der Größenordnung einer halben Mikrosekunde. Natürlich können Sie sich für 320 Pixel entscheiden und das Timing weiter vereinfachen.

Wenn es für Sie vernünftig klingt, diese Art von Timing einzuhalten, können Sie die genauen Zahlen leicht durch leichtes Googeln ermitteln. Zum Beispiel diese aussieht wie ein ziemlich gutes Beispiel.


3

Bist du auf einem Arduino?

Der Parallax Propeller kann alle Arten von Videosignalen nativ erzeugen. Für die Generierung von VGA- und Composite-Videosignalen steht Code zur Verfügung. Alle Quellen sind ebenfalls verfügbar, sodass Sie sie bei Bedarf anpassen können. Intern verfügt es über eine Reihe spezialisierter Logik zur Erzeugung von Video-Timing. Es sollte möglich sein, das System so zu konfigurieren, dass es diesen Bildschirm ohne allzu große Probleme steuert. Es kann jedoch ein wenig externes SRAM erforderlich sein, wenn Sie in der Lage sein möchten, die volle Bewegung vollständig anzuzeigen (so voll es auch sein mag, wenn man bedenkt, dass es gelb ist Anzeige) Farbe.

Außerdem ist es Art und Weise mächtiger als ein Arduino.


Nein, ich bin nicht auf ein Arduino eingestellt :) Und ich werde kein Fullmotion-Video anzeigen. Ich möchte das Display genauso verwenden wie ein LCD für Systeminformationen.
Christian Wattengård

2
Nun, der Propeller verfügt über eine interne Rasterzeichenkarte im ROM zur Anzeige von Text auf Bildschirmen, sodass es genau so klingt, wie Sie es möchten.
Connor Wolf

0

http://code.google.com/p/arduino-tvout/ ist wahrscheinlich das, was Sie brauchen. Wenn Sie Glück haben, akzeptiert der interne Monitor ein NTSC-Signal.


Nun, vielleicht ... Aber ich möchte wirklich die Auflösung 320x200, und vielleicht auch nicht ...
Christian Wattengård

Dieser Code erzeugt genau die von Ihnen erwähnten Frequenzen, die mit einem NTSC-Signal identisch sind. Das Original-CGA verfügt über einen Composite-Video-Ausgang und einen Monitorstecker. Es ist ziemlich wahrscheinlich, dass der interne Monitor für diese Dinge das zusammengesetzte Signal gemäß Abzug und flüchtiger Überprüfung von Vintage-Hardware-Foren verwendet. Warum sollten sie sich überhaupt die Mühe machen, ein Vollfarbsignal an einen gelben Bildschirm zu senden?
Joeforker

Eine Erweiterung von Joes Kommentar wäre, dass es wahrscheinlich am einfachsten wäre, eine Grafikkarte zu bekommen, die bereits zusammengesetzt ist, und das Arduino zu überspringen :(
Kevin Vermeer

Ihnen allen fehlt der Punkt ... Ich möchte nicht, dass ein zufälliger Monitor ein zusammengesetztes Signal anzeigt ... Ich möchte ein "natives" CGA-Signal erzeugen und es mit einem CGA-Monitor verwenden.
Christian Wattengård

3
Sie denken, der interne Monitor ist CGA. Ich denke, Sie sind sehr wahrscheinlich falsch. Komm zurück, wenn du die Ausrüstung hast.
Joeforker

0

Ich habe noch nie CGA verwendet, aber Sie können möglicherweise eines der (vielen) Arduino VGA-Projekte an Ihren Zweck anpassen.

Ich habe ein VGA-Pong-Spiel um einen ATMega168 gebaut, das ein guter Ausgangspunkt sein könnte (Links 1 2 ). Ich habe die AVGA-Bibliothek verwendet , die das gesamte VGA-Timing unter Unterbrechung ausführt , sodass sich Ihr Vordergrundcode nur mit dem Verschieben von Sprites befassen muss.

Eine andere Möglichkeit könnte darin bestehen, eine YBox zu ändern .


2
Eigentlich ist es überhaupt kein VGA. VGA ist eine analoge Komponente RGB, während CGA eine digitale TTL-RGBI ist.
Christian Wattengård

0

Der IBM Portable PC verhielt sich so, als wäre der interne Monitor mit dem Composite-Ausgang einer Standard-CGA-Karte verbunden. Einer der Nebenwirkungen davon war, dass Farben, wenn der Modus auf "Farbe" von 80 Spalten eingestellt war, eher als graue Streifenmuster als als Graustufen angezeigt wurden. Dies wiederum würde viele Vordergrund-Hintergrund-Kombinationen (z. B. Blau auf Schwarz) fast vollständig unleserlich machen. Dies war ziemlich lästig, da (1) der interne Monitor monochrom war und daher Chroma-Informationen für ihn nutzlos wären; (2) Selbst wenn ein externer Composite-Monitor verwendet wurde, wurde das Colorburst-Signal im 80-Spalten-Modus falsch eingestellt, sodass ohnehin keine Farbe erhalten werden konnte.

Übrigens scheint der interne Monitor des Compaq einzigartig zu sein; Es wird die horizontale NTSC-Abtastrate verwendet, die vertikale Abtastrate kann jedoch entweder 60 Hz oder 30 Hz betragen. Ich bin mir nicht sicher, warum Compaq sich für die Verwendung von 30 Hz ohne Interlaced entschieden hat, anstatt den vertikalen Schaltkreis des Monitors zu verhexen, um mit dem nicht ganz richtigen Interlaced-Ausgang des 6485 zu arbeiten, aber es ist die einzige Maschine, die ich jemals mit einem gesehen habe 30Hz Display Scan.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.