Mini-Terminal mit ARDUINO und TFT-Display
StandAlone-Unit zum Senden und Empfangen serieller Daten
10. Mai 2014

  QST, April 2014 did publish article "D-Terminal Arduino meets D-STAR" written by Abraham Smith, N3BAH. While he was using a standard 2x16 characters LC-Display, i decided to modify the available code, so low cost 1.8" TFT graphic display could be used instead.

Here is automatic translation by GOOGLE:
https://translate.google.de/translate?sl=de&tl=en&js=y&prev=_t&hl=de&ie=UTF-8&u=http%3A%2F%2Fwww.kh-gps.de%2Fminiterm.htm&edit-text=


Abb.1  Musteraufbau mit Arduino "UNO", TFT-Display auf Proto-Shield und Mini-Tastatur im Hintergrund

Schon länger interessierte ich mich für eine einfache, PC-unabhängige Einrichtung zum Aussenden und Empfangen serieller Daten. Meine Aufmerksamkeit erweckte deshalb ein Beitrag mit dem Titel: "D-Terminal Arduino meets D-STAR". Er stammt aus der Feder von Abraham Smith, N3BAH und erschien in der US-Zeitschrift "QST" vom April 2014. Das dort beschriebene Konzept verwendet ein Arduino UNO-Board oder aequiv. Zur Zeicheneingabe lässt sich daran eine handelsübliche Tastatur mit PS/2-Schnittstelle anschliessen. Die Ausgabe der über sie eingegebenen und ggf. auch der über die serielle Prozessorschnittstelle empfangenen Zeichen erfolgt über ein Standard-16x2-Zeichen-LC-Display.   

Unter Verwendung eines UNO-Boards war das Terminal nach N3BAH schnell nachgebaut. Z
ur Vereinfachung des Hardwareaufwandes wollte ich dabei allerdings abweichend vom Originalkonzept ein fertig erhältliches, direkt auf die Prozessorplatine steckbares LCD-Shield nach [1],[2] verwenden. Das bedingte einige Änderungen bei der Portbelegung und hatte dadurch zwangsläufig auch Auswirkungen auf den benutzten Programmcode. Die aufgebaute Terminalanordnung funktionierte ansonsten soweit problemlos, wobei man sich für die Zukunft allerdings auch noch einige Verbesserungen und Verfeinerungen in der Bedienbarkeit ( z.B. eine Backspace-Funktion ) vorstellen könnte. Was mich allerdings doch störte, war die sehr begrenzte Anzeigekapazität des verwendeten 2x16 Zeichen-Displays. Mit relativ wenig zusätzlichem Aufwand hätte man an dieser Stelle zwar auch eine etwas größere Displayversion mit Darstellungsmöglichkeit von z.B. 4x20 Zeichen wählen können, aber ich beschritt einen anderen Weg. Zum Einsatz kam stattdessen ein 1.8"-Grafikdisplay mit einer Auflösung von 128x160 Pixeln ( siehe Abb.2 ). Derartige Displays sind z.B. via EBAY oder auch hier [3],[4] preiswert erhältlich und lassen sich unkompliziert einsetzen. Sie gestatten u.a. alphanumerische Zeichendarstellungen in unterschiedlichen Größen, wobei ich mich für eine achtzeilige Darstellung von je max. 13 Zeichen pro Zeile entschied. Durch eine kleine Änderung im Programmcode ist an dieser Stelle aber auch eine Umstellung auf Darstellbarkeit von 16 Zeilen mit je max. 26 Zeichen möglich. Bereits in der gegenwärtigen Konstellation und der sich dabei ergebenden Gesamtzahl von max. 104 Zeichen kommt man aber auf das mehr als Dreifache gegenüber dem ursprünglichen Konzept. Dennoch ist anzumerken, dass die Anordnung nur zur Übermitlung von Kurztexten geeignet ist. 
Für mein erstes Musterexemplar wurde erst einmal wieder ein UNO-Board benutzt ( siehe Abb.1 und 2 ). Denkbar ist aber auch die Verwendung anderer Arduino-Varianten. So können  z.B  auch die gegenüber dem "UNO" wesentlich kleineren NANO-Boards zum Einsatz kommen ( siehe Abb.3 ). Die verfügbaren Ports sind bei beiden Versionen weitgehend identisch und nachdem in beiden Fällen auch der gleiche Prozessortyp zum Einsatz kommt, ergeben sich auch für die zu verwendende Software keine nennenswerten Unterschiede.
Die seriellen Ein- und Ausgangsdaten stehen an den Ports "RX0" ( Eingang ) und "TX1" ( Ausgang ) mit TTL-Pegel zur Verfügung. Die Anordnungen mit den Transistoren "Tr1" und "Tr2" bewirken eine Anpassung an mit RS-232-Schnittstelle ausgestattete Peripherie. Selbstverständlich lassen sich an dieser Stelle aber auch Pegelwandlerbausteine wie z.B. "MAX232" o.ä. verwenden. Ein Wort noch zur von mir benutzten Tastatur. Es handelt es sich bei ihr um eine sehr kompakte Ausführung, die aus folgender Quelle stammt [5]. Grundsätzlich sollten an dieser Stelle aber alle Tastaturen mit PS/2-Schnittstelle nutzbar sein.



Abb.2  Beispiel für eine TFT-Displayanzeige

Bedienfunktionen

Nach dem Einschalten der Terminal-Anordnung wird für einige Sekunden eine Startmeldung sichtbar. Mit ihrer Hilfe lässt sich die grundsätzliche Betriebsbereitschaft kontrollieren. Danach verlischt die Bildschirmanzeige wieder. Das Ausführungsprogramm wartet jetzt auf ankommende Zeichen. Diese können entweder über die serielle Schnittstelle gelesen oder über die angeschlossene Tastatur eingegeben worden sein. Letztere sind dabei sofort auf dem Display sichtbar und lassen sich durch Betätigung der ENTER-Taste seriell aussenden. Standardmäßig wird dabei eine Datenrate von 9600bps verwendet, wobei sich dieser Wert im Bedarfsfall aber auch sehr leicht im Programmcode ändern lässt. Nachdem ein häufiger Wechsel der verwendeten Datengeschwindigkeit nicht der üblichen Betriebspraxis entspricht, wurde auf die in der ursprünglichen Version vorhandene Routine zur Baudratenauswahl verzichtet. Die Programmbedienung vereinfacht sich hierdurch deutlich.
Über die ESC-Taste lassen sich komplette Bildschirminhalte ( z.B. nach Fehleingaben ) jederzeit löschen. Eine Backspace-Funktion ist hierbei derzeit noch nicht realisiert, sollte für spätere Programmerweiterungen aber angestrebt werden.    
Seriell empfangene Daten werden nicht direkt angezeigt, sondern vorerst nur in einem Eingangspuffer ( Kapazität: 128 Zeichen ) zwischengespeichert. Damit wird auf einfache Weise verhindert, dass es  zwischen empfangenen und via Tastatur eingegebenen Zeichen zu einem Darstellungskonflikt kommen kann. Eine LED signalisiert dabei das Vorhandensein eingetroffener Daten. Wird danach die MESSAGE-Taste betätigt, so werden zuerst eventuell noch vorhandene Bildschirminhalte gelöscht und das Display dann mit den Daten aus dem Eingangspuffer beschrieben.


Abb.3  Gesamtschaltbild der Terminalanordnung mit Verwendung eines Boards: Arduino "NANO"
  Portbelegung gilt auch für andere Arduino-Boards, die den gleichen Prozessor ( ATMEGA328P ) verwenden; z.B.: Arduino "UNO"


WICHTIG!  Die Verbindung "JP1" muss geöffnet sein, wenn Programme via USB-Schnittstelle zum Prozessor hochgeladen werden sollen. Durch Doppelnutzung des seriellen Prozessoreingangs kommt es ansonsten zu einer Konfliktsituation, die auch zu einer Fehlermeldung von Seiten der Arduino-IDE führt.

Arduino-Software

Neben der Softwareversion V1.1, die sowohl Sende, als auch Empfangsbetrieb zulässt, wurde auch noch eine Version V2.1 realisiert. Sie erlaubt NUR Empfangsbetrieb, so dass hierbei die mit der Eingabetastatur in Verbindung stehenden Bauteile, die Signal-LED und Transistor "Tr2" entfallen können. Seriell empfangene Daten werden jetzt direkt auf dem Display sichtbar und die  MESSAGE-Taste dient nur noch als Löschtaste für die Bildinhalte.

V1.1:  MINI-Terminal  TFT-Displayversion für den Sende- und Empfangsbetrieb
V2.1:  MINI-Terminal  TFT-Displayversion nur für den Empfangsbetrieb
Beide Versionen lassen sich hier herunterladen

Linkliste

[1]  http://www.dfrobot.com/index.php?route=product/product&product_id=51#.U2vEuYF_uwQ
[2]  http://www.komputer.de/zen/index.php?main_page=product_info&cPath=0&products_id=33
[3]  http://www.sainsmart.com/sainsmart-1-8-spi-lcd-module-with-microsd-led-backlight-for-arduino-mega-atmel-atmega.html
[4]  http://www.sainstore.de/sainsmart-1-8-tft-farb-lcd-schirm-modul-mit-spi-interface-microsd-fur-arduino-raspberry-pi.html?gclid=COT56N7unL4CFc6WtAoddx8ADg
[5]  http://www.adafruit.com/products/857

E-Mail contact via: