Guten Abend,
der Code im Anhang erzeugt ein 640x400 70Hz VGA Signal. Darstellbar sind
24x25 Zeichen. Die Spannung an den eingängen PC0 bis PC3 wird am
Bildschirm dargestellt. Das SPI Modul braucht normalerweise 18 Takte.
Jedoch füllt PB0 durch im Hintergrund laufende rol, lsl und swap
Operationen das fehlende Pixel auf. Es entsteht ein Bild ohne Leerpixel
wie z.B. bei Beitrag "AVR Videogenerator, 40x25 Zeichen, nur 60% CPU Auslastung !"
Die Schaltung ist denkbar einfach. Man benötigt einen 16MHz Quarz.
Weiters wird PB0 mit PB3 (MOSI) verbunden. Über einen ca. 600 Ohm
Widerstand wird PB3 (MOSI) mit den R,G,B Leitungen des VGA-Ports
verbunden. Die vsync PB2 und hsync (PB1) Leitungen können direkt
verbunden werden.
Das Macro spi übernimmt die Bildausgabe. Die Logik dieser Funktion ist
im Anhang zu finden. Das erste Byte (in der Tabelle Z genannt) wird
ausgegeben. Die nächsten zwei Byte - Byte 0 und Byte 1 - werden geladen.
Bit 7 von Byte0 Wird ins Carry geschoben. Jetzt wird PB0 in Abhängigkeit
vom C Flag gesetzt. Danach wird Bit7 von Byte 1 in Bit0 von Byte0
geschoben. Nach dem 16ten Zyklus wird MOSI (PB3) als Eingang gesetzt und
PB0 als Ausgang. Dadurch wird der Wert aus dem C Flag auf dem Bildschirm
geladen. Nach 2 Zyklen (16+2=18) wird PB0 wieder als Eingang
Konfiguriert und MOSI als Ausgang.
Das Ganze wiederholt sich nach dem 9ten Byte. Durch den lückenlosen
Pixelstream sind 24 statt 22 Zeichen in einer Zeile möglich. Oder auch
Bitmap bilder. Die Funktion kann natürlich auch für ein PAL Video Signal
verwendet werden. Wenn die Anzahl der Zeichen nicht exakt durch 9
Teilbar ist z.B 24 Zeichen pro Zeile geht man wie folgt vor:
1. 2x spi makro aufrufen = 18 Zeichen und 6 Zeichen rest.
2. Makro adaptieren sodass nach dem 6ten Zeichen abgebrochen wird.
Die Funktion ist sehr Zeitkritisch. Daher ist eine Schleife mit Abfragen
nicht möglich.
Grundlage für den Source Code ist
Beitrag "AVR Videogenerator, 40x25 Zeichen, nur 60% CPU Auslastung !"
Die Font kommt von
http://searle.hostei.com/grant/MonitorKeyboard/index.html
Falls ich eine Quellenangabe vergessen habe bitte melden!
Schöne Grüße
Stefan