PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR ASCII Video Terminal 40x25 - Atmega8 - BAS Signal



JanB
03.10.2006, 18:18
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.

Angefangen hat das Ganze in diesem Thread:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=5880

Ein Hinweis für Gäste: Bilder und Attachments kann man hier nur sehen oder Downloaden,
wenn man im Forum eingeloggt ist.

Gruß Jan

GKCS
03.10.2006, 18:51
Hallo Jan,

ich teste gerade die neue Version. Alles läuft SUPER !!!! Der "Positionierungsfehler" ist auch weg ....

Viele Grüße

Gerry

JanB
03.10.2006, 19:55
Hallo,
ein kleiner Fehler ist schon aufgetaucht:

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

Sorry !

Gruß Jan

GKCS
04.10.2006, 13:21
Hallo Jan,

hier noch ein weiteres kleines Feedback.

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 ....

Viele Grüße

Gerry

Johannes G.
04.10.2006, 13:34
Hallo,

wäre es auch möglich den Code nach C zu portieren oder ist C dafür zu langsam?


Viele Grüße,
Johannes

JanB
04.10.2006, 21:17
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.

Gruß Jan

GKCS
10.10.2006, 12:14
Hallo Jan,

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"

Viele Grüße

Gerry

Bluesmash
10.10.2006, 14:19
wow! super projekt! sobald ich zeit habe werde ich es mal eingehend testen!

gruss bluesmash

chr-mt
10.10.2006, 16:20
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" ? ;)

Gruß
Christopher

JanB
11.10.2006, 18:18
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.

Gruß Jan

GKCS
12.10.2006, 10:41
Hallo Jan,

bin seit Gestern dabei die neue Version zu testen. Alles läuft super und fehlerfrei ... Nochmals ein Riesenkompliment für ein exzellentes Stück Code ....

Viele Grüße

Gerry

JanB
13.10.2006, 17:37
Hallo,
hier wieder eine neue Version des Programmes.
Gerry hat unermüdlich getestet und tatsächlich noch ein paar
Bugs aufgedeckt. Die sind jetzt auch korrigiert. Insbesonders ist
die Darstellungsqualität der Grafikzeichen verbessert worden.

Vielen Dank an Gerry, und ich hoffe, das jetzt alle Fehler beseitigt sind.

Gruß Jan

avr57
15.10.2006, 19:27
Hi,

habe heute als aelterer "noch Neuling" das Video-Terminal aufgebaut. Funktioniert soweit ganz gut. Als Testbildschirm einen 7" TFT an einem portablen DVD-Player mit Video-Eingang. Datenuebertragung 9600,8,N,1.
Am Anfang waren die Start-Schriftzuege sehr schwach zu sehen, den Widerstand von 1 kOhm geaendert auf 150 Ohm und die Schriftzuege sind viel heller.
Kleine "Flimmereien" sind auch zu sehen, liegt wohl am Bildschirm wegen der fehlenden "winzigen" Nachleuchtdauer.
Muss die Story mit einem "Analog" - Fernseher demnaechst noch probieren.

Ansonsten ein grosses Lob fuer den Code an Jan und an Gerry fuer die Testerei. Fuer Mikrokontroller-Experimente bestimmt ein relativ einfaches nuetzliches Zubehoer.

Viele Gruesse

Karl

robby-fant
16.10.2006, 19:44
ist ein billigbildschirm, da kannst du keine gute qualität verlangen...

avr57
16.10.2006, 20:28
Hi "robby-fant",

ist mir auch bewusst, dass dieser "Glotzscreen" keine Spitzenqualitaet ist.
Na ja, dann werde ich beim naechsten Bildschirmkauf wohl dieses Terminal als "Testinstrument" mitnehmen. Einen zweiten programmierten AVR als "ASCII-Generator" davor und es muesste dafuer wohl gut geeignet sein. O:)

Viele Gruesse

Karl

avr57
21.10.2006, 14:42
Hi zusammen,

habe das Video-Terminal mit mehreren Baudraten probiert. Bis einschl. 9600 Bd. alles ok. 19200 Bd. klappt bei mir nicht, egal was ich anstelle.

JanB
22.10.2006, 10:52
Hallo,

19200 Bd. klappt bei mir nicht, egal was ich anstelle

Bei mir funktioniert es einwandfrei auch mit 19200 Baud.
Ich hab es gerade eben noch mal ausprobiert.

Was ist denn genau dein Problem bei 19200 ? Was klappt nicht ?

Gruß Jan

gonzo_6
22.10.2006, 11:14
Hallo JanB,
das ist wirklich eine tolle Leistung. Habe mir das Ding eben schnell zusammengebastelt und läuft sofort ohne wenn und aber.
Wirklich super Arbeit!

LG
gonzo_6

ps: Habe es nur mit 9600,8N1 getestet bisher

avr57
22.10.2006, 11:34
Hi Jan,

vorab, ich benutze einen USB-Seriell-Adapter. Warum bei mir beim ersten Male ueberhaupt nichts bei 19200 Bd. funzte, kann ich mir nicht erklaeren, es wurde bis auf den 1kOhm Widerstand nichts geaendert. Hatte einen 150 Ohm eingesetzt, da der ehemalig benutzte Monitor sonst kaum eine Anzeige brachte. Heute, mit einem anderen Monitor ist wieder der 1 kOhm eingesetzt.
Am Adapter kann es eigentlich nicht liegen, habe PC-gesteuerte Modellbahnzentralen unter 19200 Bd. mit ihm in Betrieb.

Bis 9600 Bd. wird alles korrekt uebertragen, auch Texte.

Bei 19200 Bd.

12 Zeichen - "123456789012" - korrekt auch in schneller Folge mit der Maustaste

14 Zeichen - , "12345678901234" -, man muss kleine Pause zwischen den Mausklicks einlegen, gefuehlsmaessig so um die 200 -250 ms.

16 Zeichen -"1234567890123456" -, es werden Zeichen in vermehrtem Maße verschluckt, Leerzeilen eingefuegt und unregelmaessige Reaktion, auch bei laengeren Sendepausen.

Ansonsten habe ich auch den Text probiert - "Programm der Hello World-Klasse" - . bis einschl. "der" wirds uebertragen.

Nichts fuer ungut, ist eigentlich super fuer die Uebertragung von wenigen Bytes. Moechte zwar gern einen String von 40 Zeichen mit 19200 Bd. uebertragen um die Baudraten nicht aendern zu muessen. Wenn´s nicht geht, davon geht die Welt auch nicht unter.

Mit vielen Gruessen

Karl

vajk
22.10.2006, 12:46
Tipp von mir, wenn das Timing über Timing-Ints gestuert wird, wird ein Dantenempfng zerkloppt. Abhilfe: Bei Eintreffen von Zeichen auf der seriellen, lieber das Bild dunkeltasten, Daten empfangen .. und gut ...
Könnte ja ein Steuerzeichen sein, für viel Text ...

JanB
22.10.2006, 12:57
Hi Karl,
du hast Recht, wenn man 19200 mit "Volldampf", also ohne Unterbrechung sendet,
werden einzelne Zeichen verschluckt.
Das liegt daran, das während des Bildaufbaues für 25x9 Zeilen,
also für 14,4mS die eintreffenden Zeichen nicht verarbeitet werden können.
Die werden dann in einem Buffer zwischengespeichert. Dieser Buffer ist 16 Zeichen groß.
Bei 9600 können in 14.4 ms ca. 14 Zeichen eintreffen. Passt also so eben in den Buffer.
Bei 19200 sind es 28 Zeichen.
Das ist zuviel, da können dann welche verschluckt werden.

Lösung:
Den Buffer vergrössern auf 32 Zeichen ?
Geht nicht, dafür hat der Mega-8 nicht genug RAM.
Der Bildspeicher braucht ja schon 40x25 = 1000 Bytes.
Ich könnte höchstens auf eine Zeile verzichten, also 40x24.
Da würden 40 Bytes frei.

Einen XON-XOFF Mechanismus einbauen ? Unschön und aufwendig.

Bild Dunkeltasten wie vorgeschlagen ?
Dann würde das Bild Flackern wenn Zeichen gesendet werden.
Das gefällt mir überhaupt nicht. Sieht einfach Sch... aus.

Mal sehen, was mir noch einfällt.
Wie gesagt, bis 9600 Baud klappt es ja.

Gruß Jan

avr57
22.10.2006, 19:15
Hi Jan,

vielen Dank fuer die Aufklaerung.

Um die Abwaertskompatibilitaet zu der jetzigen Darstellung zu halten, wuerde ich es selbst mal mit einem Mega32 - 16 probieren, der hat ja 2 k RAM. muesste doch eigentlich funktionieren. Leider bin ich in Assembler ueberhaupt nicht bewandert, was muesste ich, wenn ueberhaupt, in dem Listing aendern - nur die Pin-Zuordnungen evtl. hardwaremaessig beim Verschalten?

Klar, der Mega32-16 DIP 40 ist mehr als doppelt so gross sowie noch keine zwei Euro teurer, duerfte bei dem Hobby-Bauteilebedarf doch keine allzu grosse Rolle spielen.

Eine weitere Moeglichkeit beim Mega8 waere eine Umschaltung auf 24 Zeilen bei 19,2 kBaud, entweder softwaremaessig automatisch oder durch "Legen eines Pins" z. B. auf Masse.

Und das Zeichenbild auf dem jetzigen 8" TFT - 4 : 3 ist sehr gut und klar, Farbe "zurueckgedreht" auf SW-Darstellung, sowie Helligkeit und Kontrast angepasst.

stefan_Z
28.06.2007, 00:09
Super Projekt.. werde ich die Tage mal nachbauen!
Eine Frage dazu noch: Könnte man die Farbigkeit der Schrift/des Hintergrundes ändern? Würde etwas Pep ins triste s/w bringen ;-)

Stefan Z

Softboy1
23.09.2016, 13:12
Wo finde ich hex-file und Schaltbild?

Unregistriert
23.09.2016, 13:18
Wo finde ich hex-file und Schaltbild?

Funktioniert der download der zip Dateien nicht?

Softboy1
23.09.2016, 13:39
XIch finde keine _.zip Datei.

Oder brauche ich eine neue Brille oder Fernglas

Unregistriert
23.09.2016, 19:24
In diesen thread weiter vorne oder sehe ich Geister?

https://www.roboternetz.de/community/threads/21342-AVR-ASCII-Video-Terminal-40x25-Atmega8-BAS-Signal?p=198084&viewfull=1#post198084

https://www.roboternetz.de/community/threads/21342-AVR-ASCII-Video-Terminal-40x25-Atmega8-BAS-Signal?p=200146&viewfull=1#post200146

https://www.roboternetz.de/community/threads/21342-AVR-ASCII-Video-Terminal-40x25-Atmega8-BAS-Signal?p=200562&viewfull=1#post200562

Softboy1
23.09.2016, 22:40
Ist 6.4 die letzte Version?