Sparkfun bietet verschiedene LCDs, welche einen UART-Anschluss besitzen und somit über serielle Verbindungen angesprochen werden können. Unter Linux kann man mit einer Perl-Bibliothek Daten an die LCD-Anzeige schicken, was viele interessante Möglichkeiten eröffnet.

Inspiration

In meinem Artikel LED am USB-Port: Neue E-Mails anzeigen lassen habe ich gezeigt, wie man mit einem einfachen FTDI-Breakout-Board ein LED zum Leuchten bringen kann. Toller wäre es natürlich, wenn man beim Eingang der Mails nicht nur ein LED sieht, sondern auch gleich die Nachricht auslesen kann.

Dieser Beitrag behandelt den Bau der Anzeige. Ein späterer Beitrag wird sich mit dem Perl-Skript zur Anzeige beschäftigen. Die benötigte Hardware ist im Prinzip die selbe wie im obigen Artikel – plus eine LCD-Anzeige von SparkFun:

  • FTDI-Breakout-Board mit 5V (wichtig für die Anzeige!)
  • LED matt
  • Widerstand 220 Ω
  • SparkFun Serial Enabled LCD: Es gibt hier verschiedene. Ich benutze im Beispiel das Modell „20×4, Black on Green” (s. Abb. 1). Wichtig ist nur, dass man eine „Serial Enabled”-Version benutzt und keine „Basic”!
  • USB-Kabel, passend zum Breakout
Abbildung 1: SparkFun Serial Enabled LCD (Link)

Abbildung 1: SparkFun Serial Enabled LCD (Link)

Aufbau

Das LCD ist nur mit drei Kabeln verbunden: 5V, Masse und das Datenkabel RX. Letzteres muss am TxD- bzw. TX-Anschluss des Breakouts angeschlossen werden, die beiden ersteren an 5V und GND. Wird der USB am Computer angeschlossen, aktiviert sich die Anzeige normalerweise sofort und zeigt das Splash-Screen. Falls nur das Backlight anspringt und kein Text zu sehen ist, keine Panik! Vermutlich ist lediglich der Kontrast des LCDs zu schwach eingestellt (Zumindest war das bei mir der Fall und ich habe Stunden mit der Fehlersuche verbracht…). In diesem Fall befindet sich ein Potentiometer hinten am LCD, welches gedreht werden kann. Es ist nicht so leicht zu erkennen: Es befindet sich auf der Zusatzplatine von Sparkfun direkt neben dem Aufdruck RX und sieht aus wie eine kleine Metallschraube.

Da am Breakout noch ein paar Anschlüsse frei sind, kann man zusätzlich zum LCD eine Leuchtdiode anschließen. Beim SparkFun-Breakout ist nur noch der DTR als Ausgangsport frei, so dass dieser Benutzt wird. Die Kathode der Diode (kurzer Fuß/abgeflachte Seite) wird mit dem DTR-Anschluss verbunden, die Anode (langer Fuß) mit 5V. Nicht zu vergessen ist der Vorwiderstand für die LED. Abb. 2 zeigt den Schaltplan.

Abbildung 2: Schaltplan für das LCD/LED-Gerät

Abbildung 2: Schaltplan für das LCD/LED-Gerät

Am besten testet man das Ganze an einem Steckbrett, wie in Abb. 3.

Abbildung 3: Testaufbau des Schaltplans.

Abbildung 3: Testaufbau des Schaltplans.

Hat man die Einstellungen mit dem unten stehenden Skript getestet, könnte man das Ganze verlöten und in ein Gehäuse einbauen (s. Abb. 4).

Abbildung 4: Fertige USB/LCD/LED-Appliance.

Abbildung 4: Fertige USB/LCD/LED-Appliance.

Zum Verlöten wurde eine kleine Lochrasterplatine verwendet, auf welche das Breakoutboard mit Heißkleber befestigt wurde. Das Gehäuse habe ich von Conrad Electronics besorgt und entsprechende Öffnungen gebohrt/gedremelt. Heißkleber kommt auch zur Befestigung der weiteren Teile zum Einsatz – nur bei der LED sollte man vorsichtig sein! Da das Gehäuse durchsichtig ist, habe ich die Diode einfach ohne Verklebung im Gehäuse auf der Platine angebracht. Der Effekt lässt sich durchaus sehen.

Erster Test

Doch zurück zum Testen!  Um das Setup zu prüfen, steckt man den USB an einem freien Port ein und prüft die Verbindung. Dazu testet man zuerst, ob ein Gerät /dev/ttyUSBx angelegt wurde, wobei x für eine Zahl steht. Im Regelfall wird das die 0 sein, außer man hat weitere Geräte eingesteckt. Fehler oder Probleme lasse sich mit Hilfe von sudo minicom eingrenzen. Im Idealfall sollte etwas in der Art „FTDI USB Serial Device converter now attached to ttyUSB0” im Log stehen. Falls nicht, müssen möglicherweise weitere Kernelmodule installiert werden.

Zum ersten Test startet man am besten Minicom (ggf. das gleichnamige Paket installieren): sudo minicom -s. Der Start als root ist deshalb nötig, weil man als Standardbenutzer vermutlich noch nicht über die entsprechenden Rechte verfügt, den Port anzusprechen – dies werden wir weiter unten korrigieren.

Minicom ist nicht sehr intuitiv zu bedienen, aber sehr mächtig. Wird Minicom mit dem Parameter „-s” gestartet, wird sofort die Konfiguration aufgerufen. Unter dem Punkt „Eintellungen zum seriellen Anschluss” muss man durch Drücken von „A” den richtigen Port auswählen. In der Regel muss hier /dev/ttyUSB0 eingetragen werden. Mit „E” kommt man auf die Auswahl der Datenübertragungsrate. Diese ist beim LCD standardmäßig 9600 Baud mit 8N1 (8 Bit, keine Paritätsprüfung, 1 Stopbit). In der Standardeinstellung von Minicom genügt das Drücken von „C”, um die korrekte Einstellung zu erzielen. Als letzten Einstellungspunkt schaltet man die Flusskontrolle aus, indem man im vorherigen Menü „F” drückt. Im Anschluss kann man die Einstellungen verlassen. Minicom initialisiert nun das „Modem” und  es sollten einige AT-Steuerbefehle dazu auf dem LCD-Display erscheinen. Buchstaben und Zahlen können einfach über den Bildschirm eingegeben werden. Voilà, es funktioniert! Minicom kann man über „Strg+A Q” verlassen.

Treiber installieren

Die D2XX-Treiber und die entsprechenden Perl-Bindings müssen installiert sein, damit das Perl-Skript unten funktioniert. Eine detaillierte Anleitung findet man in meinem Artikel LED am USB-Port: Neue E-Mails anzeigen lassen unter den Überschriften „D2XX-Treiber installieren” und „FTD2XX-Bindings für Perl installieren”.

Testskript (Perl)

Nun endlich zum Testskript: Es ist sehr einfach aufgebaut und prüft nur die Funktion der Anzeige. In Zeilen 13–20 werden die Geräte gesucht, in Zeile 22 das erste Gerät der Liste verwendet. Falls mehrere Geräte gefunden werden müsste man hier das richtige auslesen und verwenden. Da fast alle FTDI-Chips eine Seriennummer zurückgeben, könnte man über diesen Weg gehen.

In Zeilen 25–28 wird eine serielle Verbindung aufgebaut. Würde man die LED nicht verwenden, könne man in Perl andere Möglichkeiten beschreiten, um mit der LCD-Anzeige zu kommunizieren. Die einfachste davon wäre wohl, die Daten einfach den den /dev/ttyUSB0 -Port zu schicken. Die F2XX-Bibliothek übernimmt jedoch die korrekte Übertragungsrate und ermöglicht das Ansprechen anderer serieller Pins.

Das siehe man beispielsweise in Zeile 31. An dieser Stelle wird ein Signal über den Aschnuss DTR gesendet. Die Diode sollte daraufhin anfangen zu leuchten. Das darauf folgende sleep verhindert das kurze Aufblitzen der Diode, da wir sie in Zeile 61 wieder ausschalten. Das Blinken der LED wird bis Zeile 65 getestet.

Die Ausgabe auf dem LCD-Bildschirm befindet sich in den Zeilen 39–54. Zunächst wird der Bildschirm mit Hilfe eines in Dokumentation des LCD angegebenen Steuerkommandos gelöscht. Ich hatte beim Test manchmal trotzdem komische Zeichen auf dem Bildschirm. Zweimaliges Löschen hilft!

Im Anschluss daran soll die Zeile „Hallo Welt!” ausgegeben werden. Dazu definieren wir zunächst eine Zeichenkette. Diese wird in den Zeilen 49 und 50 in ASCII-Text umgewandet. Im Beispiel macht dies zwar keinen Unterschied – für spätere Mail-Nachrichten ist dies jedoch wichtig. Wer will, kann zum Prüfen statt „Hallo Welt!” Umlaute ausgeben lassen. Text::Iconv wandelt diese um.

Die eigentliche Ausgabe der Zeichenkette vollzieht sich in den Zeilen 53–57. Die Zeichenkette muss in ein Array umgewandelt werden, dessen Länge ausgelesen wird. Erst dann kann die D2XX-Bibliothek die Daten zeichenweise an den FTDI-Chip schicken. Abb. 4 zeigt das Ergebnis des Testskripts.

Nun ist es an der Zeit, ein Perl-Programm zu schreiben, welches die im Postfach liegenden Mails auch auf dem LCD-Bildschirm anzeigt. Dazu in einem weiteren Artikel mehr!