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
Update: Ausgabe von 192x200 Pixel Bitmap Files.
Diese Version unterstützt PS/2 Tastaturen. Der Scancode der Tastatur wird am Bildschirm in Hex angezeigt. Die Tastatur wird an INT0 (CLK) und INT1 (DATA) angeschlossen. Während des Bildaufbaus wird geprüft ob neue Daten an der Tastatur anliegen. Außerhalb des sichtbaren Bildes wird eine Interrupt Routine aufgerufen falls ein neues Bit von der Tastatur übertragen wird. Das Timing ist recht zeitkritisch. Kommandos zur Tastatur werden nicht unterstützt. Falls es noch ideen gibt den Code zu optimieren, bitte posten. Schöne Grüße
Hallo Stefan, ein sehr schönes Projekt und sehr gut erklärt, werde es die nächsten Tage mal testen. Bernhard
:
Bearbeitet durch User
Hallo Stefan, mit diesem kleinen Projekt konnte ich schnell ein paar Tests an diversen Monitoren durchführen. Vermutlich muss die Horizontal- und Vertikal-Frequenz bei den heutigen Monitoren nicht so exakt sein. Den 16 MHz Prozessortakt konnte ich bei einem Monitor-Exemplar zw. 15,3...17,6 MHz varieren ohne das der Monitor einen Fehler meldet oder sogar abschaltet. Bernhard
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.