Mikrocontroller-Projekte
Ronald Daleske

Startseite Impressum Warenzeichen

CPD-VGAGEN - einfache VGA-Grafikkarte (256x240 Pixel)

Für das CP/M-Projekt CPD3 wurde eine einfache VGA-Grafikkarte auf der Basis von http://lucidscience.com gebaut. Die Grafikkarte ist voll grafikfähig, kann aber auch als farbiger Textmonitor genutzt werden. Das VGA-Signal wird durch einen ATMEGA 644P erzeugt. Der Anschluss des Monitors erfolgt über einen analogen VGA-Anschluss.

Inhaltsverzeichnis

1. Beschreibung der Grafikkarte
2. Technische Daten
3. Hardware
4. Assembler-Quelltext
5. Beschreibung der Software
6. Lizenz (Quelltext und Schaltplan)

1. Beschreibung der Grafikkarte


Die Grundidee wurde von http://lucidscience.com dem Projekt VGA Video Generator übernommen (Lizenz: GNU General Public License).

Ziel war die Realisierung einer VGA-Grafikkarte mit einem ATMEGA (möglichst in PASCAL). Im Internet gibt es mehrere Ansätze und Diskussionsforen dafür:

Aus den Projekten kann man einige Ideen übernehmen, aber eine Schaltung mit Programm zum sofortigen Nachbauen ist nicht so richtig zu finden. Hinzu kommt, dass CP/M eigentlich zwar nur eine Textdarstellung benötigt, aber standardmässig sind 80 Zeichen pro Zeile und 24 Zeilen pro Bildschirm üblich. Für diese relativ hohe Zeilen-Auflösung ist der ATMEGA mit maximal 20 MHz überfordert.

Für die Ausgabe eines Byte-Feldes werden mindesten 2 Takte benötigt werden. Also bleiben bei 10 MHz (2 Takte) nur 256 Byte pro Zeile übrig. Hinzu kommt, dass der Arbeitsspeicher der ATMEGAs mit 1 bis 4 KByte recht klein ist. Das reicht nur für eine niedirge Textauflösung. Vollgrafik ist mit dem internen Speicher nicht machbar (und schon gar nicht in Farbe, da jede Farbinformation pro Pixel den erforderlichen Speicher vergrößert).

Die Software musste in Assember geschrieben werden, da die Generierung der Horizontal- und Vertikalimpulse sowie die Bereitstellung der Zeileninformationen den ATMEGA 64 voll ausgereitzt wird. Zeitweise wird wirklich mit den CPU-Takten gearbeitet.

2. Technische Daten


3. Hardware

Die Lösung von http://lucidscience.com bietet bei relativ geringen Hardwareanforderungen ein recht gutes Ergebnis. Die Grundhardware wurde vom Autor übernommen. Nur die Portbelegung wurde geändert um die beiden Ports für die serielle Schnittstelle frei zu bekommen.

Um die Performance etwas zu verbessern, wurde der ATMEGA 644P mit 22 MHz übertaktet.

Während der Generierung der Zeileninformationen legt der ATMEGA 644P die Adressen an den RAM (WS628128 128K x 8Bit) an und aktiviert ihn. Am Ausgang des RAMs stehen nun die Byte-Werte für das jeweilige Pixel an. Die beiden Puffer (74HC244) werden aktiviert (G auf Low). Nun liegt der Bytewert am R-2R-Netzwerk an. Das R-2R-Netzwerk setzt das digitale Signal des Pixels in die 3 analogen Signale (Rot, Grün, Blau) um.

Schaltplan im PDF-Format: VGAGEN.pdf

Schaltplan im EAGLE-Format: VGAGEN.zip

Gegenüber dem Originalentwurf wurde die Pinbelegung etwas geändert um die Pins für den UART (RXD und TXD) frei zu bekommen (eine Steuerung des Monitors von Außen war im Original nicht vorgesehen).


4. Assembler-Quelltext

Assembler-Quelltext: VGAGEN.ZIP

In der Datei befindet sich nur der Quelltext "VGAGEN.asm". Zur Übersetzung wurde der Assembler des AVR-Studio 4 genutzt (ein Projekt kann man schnell selbst erzeugen).


5. Beschreibung der Software

Das Grundgerüst wurde, wie oben schon beschrieben, von VGA Video Generator übernommen. Die Generierung der Zeileninformationen und der Horizontal- und Vertikalimpulse werden innerhalb einer Interruptroutine (ISR) abgearbeitet. Diese ISR wird alle 31,75 µS aufgerufen. Die ISR ist relativ lang, so dass zwischen dem Beenden der ISR und dem nächsten Aufruf nur wenige Takte liegen. Alle Zeiten sind recht kritisch, so dass das Programm nur in Assembler umgesetzt werden kann.

Erst nach dem Ausgeben aller Zeilen eines Bildschirmes ist innerhalb der "Schwarzschulter" etwas Zeit um andere Aufgaben abarbeiten zu können (wie z.B. neues Zeichen schreiben, Bildschirm löschen, Paramerer ändern usw.).

Für das Beschreiben des RAMs müssen fast immer die Portadressen verändert werden. Dazu muss aber bis zur "Schwarzschulter" gewartet werden. Dann können einige Befehle abgearbeitet werden. Diese müssen aber sicher bis zum Beginn des Schreiben der ersten Zeile beendet sein. Damit sind alle Aktionen recht zeitkritisch, was die Programmierung in Assembler recht kompliziert macht. Es wird geschätzt, dass weniger als 10 Prozent der Prozessorleistung für das Beschreiben des RAMs und damit des Bildschirms zur Verfügung stehen.

Das Löschen oder das Scrollen des Bildschirms dauern für eine Bildschirmseite fast eine Sekunde. Das bedeutet bei 2 Bildschirmseiten deutlich mehr als eine Sekunde. Ist man bei CP/M am Ende des Bildschirms und gibt DIR ein, muss man unerträglich lange auf ein Ergebnis warten.

Das hier angebotene Assemblerprogramm wurde vom Autor mit vielen ESC-Sequenzen zur Steuerung erweitert. Es ist aber noch lange nicht vollständig.

Qualität der Software

Der Quelltext wurde bis zum heutigen Zeitpunkt nur für die Nutzung als CP/M-Monitor genutzt. Die Softwareentwicklung befindet sich noch in der Alpha Phase.

Der Quelltext ist für die kommerzielle Entwicklung nicht geeignet, da noch zu viele Teile nicht implementiert und nicht getestet sind. Daher wird eine kommerzielle Nutzung ausgeschlossen (siehe Lizenzbedingungen).

Für kleinere private Projekte kann er aber mit Einschränkungen genutzt werden.

Eine Softwarepflege und eine Unterstützung bei Problemen wird nicht gewährleistet. Die Weiterentwicklung der Software ist sehr unwahrscheinlich, da es inzwischen einen Nachfolger gibt: VGAGEN2.


6. Lizenz (Quelltext und Schaltplan)

Grundidee

Die Grundidee wurde von http://lucidscience.com dem Projekt VGA Video Generator übernommen (Lizenz: GNU General Public License).

Erweiterungen

Die Erweiterungen unterliegen ebenfalls der GNU General Public License

keine Mängelgewähr

DIESE SOFTWARE WIRD VOM URHEBERRECHTSINHABER "OHNE MÄNGELGEWÄHR" BEREITGESTELLT. ALLE AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN, EINSCHLIESSLICH DER STILLSCHWEIGENDEN GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT UND EIGNUNG FÜR EINEN BESTIMMTEN ZWECK (JEDOCH NICHT DARAUF BESCHRÄNKT), WERDEN AUSGESCHLOSSEN. DER URHEBERRECHTSINHABER IST IN KEINEM FALL UND NACH KEINER HAFTUNGSTHEORIE (SEI ES AUF VERTRAGSBASIS, AUF DER BASIS STRENGER HAFTUNG ODER UNERLAUBTER HANDLUNGEN, EINSCHLIESSLICH FAHRLÄSSIGKEIT) FÜR BELIEBIGE VERURSACHTE DIREKTE, INDIREKTE, ZUFÄLLIGE, BESONDERE, EXEMPLARISCHE SCHÄDEN ODER FOLGESCHÄDEN (EINSCHLIESSLICH, JEDOCH NICHT BESCHRÄNKT AUF BESCHAFFUNG VON ERSATZPRODUKTEN ODER -LEISTUNGEN, NUTZUNGSAUSFALL, DATEN- UND GEWINNVERLUST ODER GESCHÄFTSAUSFALL) HAFTBAR, DIE AUFGRUND DER VERWENDUNG DIESER SOFTWARE ENTSTEHEN KÖNNEN. DIES GILT AUCH, WENN AUF DIE MÖGLICHKEIT SOLCHER SCHÄDEN HINGEWIESEN WURDE.


THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.



Startseite Impressum Warenzeichen