Inhaltsverzeichnis
Allgemeines zu Terminals
Ein Terminal dient dazu, Daten, die z.B. an einen COM-Port geschickt wurden, zu empfangen, oder Daten zu versenden. Die Daten sind meist in Textform (ASCII).
Man kann ein Terminal u.a. für folgendes verwenden (neben dem simplen Senden und Empfangen):
- Debugginginformationen protokollieren
- Daten aufzeichnen (loggen)
- Daten auswerten
Es sind einige Terminalprogramme für die unterschiedlichsten Betriebsysteme vorhanden (siehe Terminalprogramme).
Was hat ein Terminal mit Robotik zu tun? Eigentlich nichts. Aber wer nicht ein LCD-Display und eine Tastatur auf seinem Board eingebaut hat, ist darauf angewiesen, mit einer Terminal-Emulation Kontakt mit seinem Controllerboard aufzunehmen.
Gleich vorweg: Da kaum ein Bastler mit einem richtigen "physischen" Terminal zu tun hat, werde ich den Zusatz "Emulation" in Zukunft streichen. Das verwirrt nur und bringt nichts. Bei so einem Terminal sind ein paar Dinge einzustellen und auf die sollte man auch achten. Häufig verwendet werden
BasCom Terminal
Die Entwicklungsumgebung Bascom bringt ein eigenes, in die Entwicklungsumgebung integriertes, Terminalprogramm mit - Bascom Terminal. Die Möglichkeiten des Programms beschränken sich auf das Wichtigste.
Options » Communications
http://www.roboternetz.de/wiki/uploads/Main/basterm1.jpg
Es ist nicht viel einzustellen, die gezeigten Werte sind der Normalfall.
Hyperterm Terminal
Das Hyperterm Terminal wird standardgemäß mit jeder Windowsversion mitgeliefert. Es bietet auch nur Grundfunktionen, ist aber als einfaches Terminalprogramm mit GUI gut zu gebrauchen.
Nach dem Programmstart erscheint:
Neue Verbindung
Da gibt man irgendeinen Namen für die Verbindung ein, z.B. "Roboternetz".
Es erscheint: Verbinden mit
Wir geben den COM-Port ein (der Port also, über den die Daten gesendet/empfangen werden sollen):
Nun können wir einige COM-Port Einstellungen wählen. Damit es zu einer Verbindung kommt müssen die gewählten Einstellungen mit den Einstellungen des Endgeräts (das über eine COM-Port Schnittstelle am Computer hängt) übereinstimmen. Sonst empfängt man nur Datenmüll oder gar nichts.
Anschlusseinstellungen
- Baudrate (Bits pro Sekunde) - Beliebt ist 9600, dass muss aber mit den Einstellungen des Controllers übereinstimmen
- Datenbits - Normalerweise "8"
- Parität - Normalerweise "keine"
- Stoppbits - Normalerweise "1"
- Flusssteuerung - Normalerweise "kein"
Jetzt ist das Hyperterm soweit zufrieden, wir aber nicht.
Es geht weiter bei:
Einstellungen
Datei » Eigenschaften » Einstellungen
Interessant sind:
- Rücktaste sendet*
- CAN (Ctrl-H) --> Terminalsteuerung
- DEL --> Terminalsteuerung
Emulation wird hier Verschiedenes angeboten
- Auto Detect
- TTY
Solange man nur "print" und "input" sagt, ist dies völlig ausreichend.
- VT100 / VT220 und evt. andere
Diese Typen verstehen die normalen "ANSII-Steuersequenzen" und einige mehr ANSII-Sequenzen.
Das reicht, um mit dem Roboter (oder einem anderen Endgerät) eine kommunizieren zu können.
ASCII-Konfiguration
Um das Interesse zu wecken, einmal ein Bild der Einstellungen. Beim Thema "Terminalsteuerung" gibt es dazu mehr Information.
Terminalsteuerung ANSII
Ein Terminal bietet aber auch einiges mehr als das, was bei der allgemeinen Terminalsteuerung besprochen wurde.
- Volle Kontrolle über den Bildschirm
- Alle Tasten können verwendet werden
Dazu werden ANSII-Sequenzen verwendet (dass sind Zeichenfolgen mit ganz bestimmtem Aufbau). Und auch die werden noch von verschiedenen Herstellern um zusätzliche Funktionen erweitert. Besonders hervorgetan hat sich hier DEC (Digital Equipment Corporation) mit seinen VTxxx-Terminals. Viele Terminal-Emulationen bieten solche Typen an, wobei besonders die VT220 und aufwärts interessant sind. Aber auch schon VT100 ist ganz nett.
Die ganzen Steuersequenzen sind auch im Internet zu finden und Power-User sind gebeten, sich dort über alle Feinheiten zu informieren.
Für Microcontroller ist wohl einiges zu aufwendig, aber einige Möglichkeiten möchte ich hier darstellen, da man damit doch von den unleserlich schnell durchlaufenden Einzelzeilen wegkommen kann.
Nicht jeder hat die Möglichkeit, und manchmal zahlt es sich auch gar nicht aus, eigens ein graphikfähiges PC-Programm zu schreiben, um mit seinem Microcontroller Dialog zu führen, oder ein bisschen Balkengraphik zu zeigen.
Den Typ VT100 bieten BasCom und Hyperterm an, wollen wir mal sehen
VT100
Was sendet das Terminal? (Auszug)
Bei der normalen Schreibmaschinen-Tastatur ändert sich nichts. Aber die anderen Blöcke werden nun lebendig.
Nur das erste Zeichen eine Sequenz ist ein Kontrollzeichen, und zwar:
<ESC>, Code 27, die anderen sind normal lesbare ASCII Zeichen
Pfeiltasten
- Pfeil oben
<ESC>[A
- Pfeil unten
<ESC>[B
- Pfeil rechts
<ESC>[C
- Pfeil links
<ESC>[D
EDIT Keys
- Pos 1 (Home)
<ESC>[1~
- Bild rauf
<ESC>[5~
- Bild runter
<ESC>[6~
Was kann man senden? (Auszug)
Wie beim Empfangen. Bei den "normalen" Zeichen ändert sich nichts. Ich will auch nur einige Beispiele aufzeigen, die einen auf den Geschmack bringen sollen.
Freie Positionierung des Cursors irgendwo am Schirm:
<ESC>[nn;mmH
dabei ist
- nn die Zeilennummer 1-24
- mm die Spalternummer 1-80 oder 1-132
BasCom Beispiel, das auch der C-Programmierer versteht:
PRINT chr(27);"[01;40H";
Stellt den Cursor in die oberste Zeile, genau in die Mitte.'- (führende Nullen können sein, müssen aber nicht)-'
Zeichen-Attribute:
<ESC>[paramm '-(das ist ein kleines "m" am Schluß)-'
Mögliche "param" sind:
- 0 = Normal
- 1 = Heller (bold)
- 4 = Unterstrichen
- 5 = Blinkend
- 7 = Reverse (dunkel auf hell bzw. umgekehrt)
Dabei können mehrere Attribute angegeben werden, dann aber mit semikolon getrennt:
<ESC>[param1;param2;param3m
Beispiel: will man bei einer Eingabe den Aufforderungstext verkehrt darstellen, sendet man
PRINT chr(27);"[7m"; ' setzt attribut "revers" PRINT "VORNAME ?>"; ' der Text PRINT chr(27);"[0m"; ' Attribut wieder normal
http://www.roboternetz.de/wiki/uploads/Main/Ansii_2.jpg
(Das geht natürlich auch in einem Print-Befehl auf einmal.)
Lösch-Befehle:
- Rechts vom Cursor die Zeile löschen
<ESC>[K
- Links vom Cursor die Zeile löschen
<ESC>[1K
- Vom Cursor abwärts den ganzen Schirm löschen
<ESC>[2J
- Oberhalb des Cursors den ganzen Schirm löschen
<ESC>[J
Beispiel: Beim Programmstart als Erstes den gesamten Schirm löschen und eine Überschrift in der Mitte
PRINT chr(27);"[1;1f"; ' Cursor ganz rauf PRINT chr(27);"[J"; ' den ganzen Schirm löschen PRINT chr(27);"[1;38f"; ' In die Mitte der ersten Zeile PRINT chr(27);"[7m"; ' setzt attribut "revers" PRINT "START"; ' Überschrift PRINT chr(27);"[0m"; ' setzt attribut normal PRINT ' (=neue Zeile) Cursor am Anfang der zweiten Zeile
Anmerkung:
Man kann mit diesen Sequenzen einiges tun. Auch einige Spiele aus der Urzeit lassen sich damit programmieren, vor allem aber kann man z.B. Sensorwerte übersichtlich an verschiedenen Stellen des Schirms so platzieren, dass man mehrere im Auge behalten kann.
Siehe auch
Artikel von PicNick, bearbeitet von Luma