AVR ASCII Video Terminal 40x25 - Atmega8 - BAS Signal
Hallo,
hier ist der Source-Code für mein AVR ASCII Video-Terminal
mit 40x25 Zeichen auf Basis von AtMega8-16.
In der angehängten Zip-Datei findet ihr den Source-Code,
den Schaltplan, und das Hex-File.
Das Terminal kann 25 Zeilen mit je 40 Zeichen auf jedem
SW- oder Farbfernsehgerät mit Videoeingang darstellen.
Die ASCII Zeichen werden die serielle Schnittstelle
mit 300 - 19200 Baud mit TTL-Pegel übertragen.
Eine genauere Beschreibung der Terminalfunktionen steht am
Anfang im Source-Code.
In der Beschreibung der Terminal-Funktionen
ist bei der Cursorpositionierung Spalte-Y und Zeile-X vertauscht.
Richtig muss es heissen:
Ctrl-N oder dez 14 setzt den Cursor auf ZEILE-Y
und
Ctrl-O oder dez 15 setzt den Cursor auf SPALTE-X
Die Positionierkoordinaten beginnen ja ab 0, d.h. X von 0 bis 39 und Y von 0 bis 23.
Wenn ich ein ASCII 12 sende, wird der Bildschirm gelöscht, der Cursor befindet sich auf Position 0,0.
Beim Kommando ASCII 13 wird auch auf Position 0,Y korrekt positioniert.
Wenn ich aber ASCII 15,0 absetze, beginnt die ganze weitere Ausgabe durcheinander zu kommen.
Also
Serout 0,2400,[15,0,14,5] sollte den Cursor auf Position 0,5 setzen und die weitere Ausgabe genau dort erfolgen. Aber genau ab diesem Zeipunkt ist die Ausgabe "unkontrolliert" wirr, d.h. an unterschiedlichsten Screenpositionen ohne erkennbares Schema.
Dies passiert nur, wenn ich auf Zeile/Spalte 0 positioniere, mittels ASCII 14/15. Bei Werten größer 0 funktioniert Alles blendend.
Dieses Verhalten gibt es übrigens auch bei der 8MHZ Version ....
Hallo,
@Gerry: Du hast absolut Recht !
Mit Null als X oder Y Koordinate funktioniert es nicht.
Ich hab auch schon lokalisiert wo es hakt.
Blöder Fehler - wie immer...
Die Null wir erstmal im Input-Buffer abgelegt. Das klappt.
Aber an anderer Stelle im Programm steht Null für einen "leeren" Platz im Buffer.
Das heisst, die Null wird nie verwendet.
Darüber hinaus kommt dabei auch noch die "Bufferverwaltung" durcheinander.
Ich werde das morgen korrigieren, heute ist es schon zu spät.
Klasse, das du so aufmerksam bist, und das du dir die Mühe machst,
das Programm zu testen und mit die Bugs zu melden.
Vielen Dank dafür.
@Johannes:
Das geht sicher auch in C, vorausgesetzt jemand beherrscht
den C-Compiler sehr gut, so das er abschätzen kann,
was da an Code bei rauskommt. Da muss man schon
sehr "optimiert" Programmieren. Aber gehen tut das.
Hat bestimmt auch schon irgendwer gemacht.
Ich hab allerdings noch keine "reine" C-Lösung (ohne ASM-Teile)
mit dieser Zeichen/Zeilenzahl gesehen.
ich habe die letzten paar Tage Dein Programm sehr eingehend getestet. Und bis auf das oben bereits genannte Problem der Cursopositionierung auf Spalte/Zeile 0 ist mir bis dato nichts weiter untergekommen.
Es läuft und läuft, und das "saugut".
Eine Sache ist mir noch aufgefallen, was ich aber nicht als Fehler bezeichnen würde. Du hast die Grafikzeichen auf ASCII 0 bis 15 gelegt. Da gibts natürlich Überschneidungen mit den Steuersequenzen ASCII 10,12,13,14 und 15.
Abhilfe schafft einfach, die Grafikzeichen auf ein anderen Bereich, z.B. 129-144 zu legen, was ohne großen Aufwand funktioniert.
An dieser Stelle wirklich ein Riesenkompliment für eine "Reife Leistung"
Hi,
hab's gerade mal auf Lochraster aufgebaut.
Funktioniert Perfekt!
Auch von mir ein Riesen kompliment für diese Arbeit!
Wie wär's den mit einem "RN-Video" Board" ?
Hallo,
jetzt bin ich endlich mal dazu gekommen die bekannten Bugs zu beseitigen.
Die Cursorpositionierung funktioniert jetzt auch mit Null als Positionsangabe,
und die Grafiksymbole habe ich wie von Gerry vorgeschlagen in den Bereich
vom 129 bis 143 verschoben.
Vielen Dank nochmal an Gerry für das Testen und für seine Hinweise.
Wenn euch noch Fehler auffallen, gebt bitte Bescheid.
Ich versuche dann, das in Ordnung zu bringen.
Lesezeichen