Die Darstellung von lesbaren Daten, die über Sensoren erfasst werden, kann auf viele verschiedene Arten erfolgen. Wer zu Hause ein digitales Thermometer hat, weiß wovon ich spreche. Es enthält einen Temperatursensor, einen Mikrokontroller und eine kleine Flüssigkristallanzeige (LCD), die die gemessene Körpertemperatur anzeigt.
Mit Hilfe einer BASIC Stamp und einem Parallax Serial LCD Display (Abb. 1) stehen zwei der drei genannten Komponenten zur Verfügung. Diese Minimalkonfiguration eignet sich auch gut zur Darstellung von Daten, die in Feldversuchen aufgenommen werden, ohne das eine Verbindung zum PC besteht.
In diesem Kapitel lernst du die Grundlagen über ein LCD Display kennen. Du erfährst:
Wie im Display ein Verlaufstext dargestellt wird.
Wo werden LCD eingesetzt?
In Abb. 2 werden ein paar Beispiele von elektronischen Geräten mit einem LCD Display gezeigt. Sie lassen sich leicht ablesen und sind, besonders die kleinen Displays, sehr sparsam im Energieverbrauch. Überlege einmal, wie viele Geräte in eurem Haushalt über ein solches LCD verfügen.
Das Parallax Serial LCD – ein mobiles Debug Terminal
Das Debug Terminal ist uns bereits als Informationssystem aus dem Einsteigerkurs BASIC Stamp (BS) bekannt. Es stellt Informationen dar, die von der BASIC Stamp versandt werden. Es ist sehr hilfreich bei der Fehlersuche im Programmcode, indem man sich Zwischenwerte einzelner Variablen im Display anzeigen lässt und ebenso hilfreich, wenn es um die Darstellung von Messwerten oder Ergebnisstexten geht.
Ein Nachteil ist, dass immer eine Kabelverbindung zu einem Laptop oder PC bestehen muss. Das ist bei Messaufnahmen in Feldversuchen lästig und umständlich und lässt sich leicht umgehen durch den Einsatz eines LCD (Abb. 3). Mit Hilfe einer Batterie, einem Board of Education, einem Serial LCD und einer Sensorschaltung auf dem Steckbrett lassen sich Messwerte an jedem beliebigen Ort aufnehmen, kontrollieren und auswerten.
Du lernst in dieser Übung die elektrischen Anschlüsse, einige einfache PBASIC Testprogramme für das LCD Display und den Befehl SEROUT kennen. Damit wird auch gezeigt, dass der Befehl DEBUG ein Spezialfall von SEROUT ist. Das ist besonders hilfreich für deine Arbeit mit dem seriellen LCD, da sich viele Argumente des DEBUG-Befehls auf den SEROUT Befehl übertragen lassen und die Darstellung im LCD kontrollieren und beeinflussen.
Material |
|
Aufgabe |
|
Wir benötigen neben der o.g. Hardware auch die Dokumentation zum Parallax Seriell LCD Display., die im Internet downloadbar ist. Sie enthält eine komplette Liste der Steuercodes für das LCD, mit der sich viele Funktionen umsetzen lassen, die wir schon von Darstellungen im Debug Terminal kennen. Zeilenrücklauf, Bildschirm löschen, Cursorkontrolle u.a.m. haben alle eigene Steuercodes. In einigen Fällen sind sie identisch mit denen des Debug Terminals.
Ein Parallax-LCD anschließen
Der Anschluss ist einfach und wird in Abb. 4 gezeigt. Es gibt nur drei Anschlüsse: einen für den Pluspol der Spannungsversorgung, einen für den Minuspol und einen dritten für das Signal. Der LCD RX Pin überträgt das Signal und wird mit einem I/O Pin der BASIC Stamp verbunden. Der Anschluss für den Minuspol (GND) wird mit Vss und der 5V Pin mit Vdd auf dem BoE verbunden.
Test eines seriellen Parallax-LCDs
Das Parallax Serial LCD verfügt über einen Selbsttest-Modus, über den man die Arbeitsbereitschaft und den Kontrast des Displays überprüfen kann. Abb. 5 zeigt die Rückseite der LCD Platine. Die beiden Schalter SW1 und SW2 sind für den Selbsttest-Modus und die Baudrateneinstellung gedacht. Dort befindet sich ebenfalls ein Potenziometer Increase Contrast zur Einstellung des Kontrastes.
Aufgabe |
|
Wird jetzt der PWR Schalter auf 1 gesetzt, sollte auf dem LCD der Text Parallax, Inc. in der oberen Zeile (Zeile 0) und www.parallax.com in der unteren Zeile (Zeile 1) erscheinen (Abb. 7).Verbleibt das LCD etwas länger in diesem Modus, erscheint als Reminiszenz an ein Videospiel aus den 80-ern ein bekannter Character und isst den Text auf.
Regel den Kontrast ggf. nach.
Das LCD so einstellen, dass es von der BASIC Stamp Nachrichten empfängt
Zur seriellen Kommunikation gehört immer die Angabe einer Baudrate. Sie gibt an, wie viele Bits pro Sekunde (bps) der Sender verschickt; der Empfänger muss bereit sein, Daten mit der gleichen Geschwindigkeit zum empfangen. In der folgenden Übung programmieren wir die BASIC Stamp so, dass sie an ein LCD mit 9600 bps Nachrichten überträgt. Mit Hilfe der Schalter SW1 und SW2 für den LCD Selbsttest stellen wir auch die Baudrate ein.
Aufgabe |
|
Das Display bleibt solang dunkel, bis die BASIC Stamp 2 so programmiert ist, dass sie Informationen an das LCD schickt.
Abb. 9 zeigt die einstellbaren Modi für das LCD. Die Tabelle befindet sich auf der Rückseite. Andere Baudraten erfordern andere Schalterstellungen, wie in der Tabelle angegeben.
Der DEBUG Befehl leitet sich vom SEROUT-Befehl her und ist zuständig für das Übertragen von Mitteilungen an ein serielles LCD, mehrere BASIC Stamp Module und an Rechner.
In dieser Übung werden wir mit Hilfe des Befehls SEROUT die BASIC Stamp …
Mit dem SEROUT-Befehl werden Texte, Zahlen, Steuercodes und Formatierungsanweisungen an das Parallax Serial LCD übertragen; sie ähneln denen, die wir bereits vom DEBUG Befehl kennen, mit Ausnahme der Steuercodes.
Die Syntax des Befehls SEROUT lautet:
SEROUT pin, baudModus, [DataItem, (DataItem, …)]
pin
In allen unseren Beispielprogrammen ist das LCD mit dem I/O Pin 14 der BASIC Stamp verbunden, deshalb wird das Argument pin im SEROUT Befehl stets 14 sein.
baudModus
baudModus teilt der BASIC Stamp mit, wie schnell die Datenübertragung erfolgen soll und bestimmt ebenso einige der seriellen Signal-Spezifika. Im Help Editor, der über das Hauptmenü aus dem BASIC Stamp Editor aufrufbar ist, findest du baudModus-Werte für gängige Baudraten aufgelistet (Abb. 10). In der Liste ist für eine Übertragung von 9600 Bits pro Sekunde (bps), 8 Databits, no parity ein Argument für baudModus von 84 angegeben. Das entspricht genau den Herstellerangaben des Parallax Serial LCD.
DataItem
DataItem kann ein Text in Anführungszeichen sein, wie zum Beispiel "Was ist los?". Es können aber auch Steuerzeichen wie CR, CLS oder Zahlenwerte mit oder ohne Formatierungsanweisungen sein wie DEC, BIN oder ?. Werden Zahlen ohne Formatierungsanweisung übertragen, geschieht dies als Wert wie 22, 12 oder 13. Unformatierte Werte, die an ein LCD übertragen werden, werden von diesem als Steuercode interpretiert.
Einfache Textnachrichten und Steuerzeichen
Anders als im Debug Terminal muss ein serielles LCD von der BASIC Stamp vor jeder anderen Aktion erst einmal mit dem Zahlencode 22 eingeschaltet werden. Der Befehl dazu lautet:
SEROUT 14, 84, [22]
Die Zahl 22 fungiert hier als Steuercode, die das LCD einschaltet. Weitere Steuerbefehle sind:
12 löscht den Text in der Anzeige. Hinweis: nach dem Steuercode sollte ein Pausenbefehl folgen, der dem LCD Zeit gibt die Aktion auszuführen.
13 Zeilensprung mit Rücklauf; der Cursor steht in der nächsten Zeile.
17 Schaltet die Hintergrundbeleuchtung eines LCD ein (optional).
18 Schaltet die Hintergrundbeleuchtung eines LCD aus (optional).
21 Schaltet ein LCD aus.
22 Schaltet ein LCD ein.
In PBASIC ist die Variable CR mit dem Wert 13 vorbelegt. Wird CR in einem DEBUG Befehl benutzt, wird der Wert 13 an das Terminal gesendet. Die beiden folgenden Befehle sind identisch in ihrer Wirkung:
SEROUT 14, 84, ["Schau mal.", CR, "Das LCD ist an."]
SEROUT 14, 84, ["Schau mal.", 13, "Das LCD ist an."]
Aufgabe |
|
Programmbeispiel LCD1.bs2
Gibt es Probleme bei der Darstellung auf dem LCD?
Überprüfe noch einmal die Verdrahtung und die Schaltereinstellungen auf der Rückseite der LCD. Stimmt die Baudrate, ist der Kontrast richtig eingestellt? Schalte die Energiequelle über den PWR-Schalter auf dem BoE aus und wieder an. Ist das Programm fehlerfrei übertragen worden?
Jetzt kommst du! - Der Text flashed
Wir wissen, dass die LCD Anzeige mit dem Steuercode 21 aus- und 22 wieder eingeschaltet wird. Also machen wir das!
Aufgabe |
|
Das Program LCD_02.bs2
Die meisten Formatierungsanweisungen des Debug Terminals lassen sich auch beim LCD verwenden. Die am häufigsten verwendete ist wohl DEC, sowie DIG, REP, ASC, BIN, HEX, SDEC und viele andere. Nehmen wir ein Beispiel:
Der Dezimalwert einer Zahl der Variablen zaehler erfolgt über den Befehl
SEROUT 14, 84, [DEC zaehler]
Programmbeispiel - LCD_03.bs2
Im folgenden Programm wird gezeigt, dass man die Inhalte von Variablen auf einem LCD darstellen kann und was passiert, wenn mehr als 16 Zeichen in die Zeile 0 übertragen werden. In einem weiteren Beispiel wird gezeigt, was passiert, wenn mehr als 16 Zeichen in die Zeile 1 übertragen werden.
Aufgabe |
|
Es ist offensichtlich, dass uns ein paar Zahlen "abhanden gekommen" sind. Der Grund liegt darin, dass das LCD in jeder Zeile neben den 16 sichtbaren noch 4 zusätzlich verborgene Speicherplätze hat, also statt 16 Stellen pro Zeile sind es 20 Stellen. Und wir merken uns, dass ein Zeilenvorschub mit Rücklauf nach der 20. Stelle erfolgt und in der 2. Zeile ganz links weitergeschrieben wird.
Halten wir fest: insgesamt stehen uns 8 Stellen auf dem Display zur Verfügung, die nicht sichtbar sind, auf die aber von außen zugegriffen werden kann.
Steuercodes zur Cursor Positionierung
Der komplette Umfang der Steuercodes für ein LCD kann man über das Datenblatt des Herstellers erhalten - Parallax LCD Datenblatt. Einige gebräuliche Codes sind:
8 Cursor links
9 Cursor rechts
10 Cursor nach unten
128 bis 143 Cursorposition in Zeile 0, Character 0 bis 15 148 bis 163 Cursorposition in Zeile 1, Character 0 bis 15
In Abb. 13 sind die Cursorpositionen für jede Zahlenangabe eingetragen. Die Werte 128 bis 143 platzieren den Cursor an den Positionen 0 bis 15 in Zeile 0 des LCD. Entsprechendes gilt für die Werte 148 bis 163 und die Positionen 0 bis 15 in Zeile 1.
Beispiel
Der Befehl
SEROUT 14, 84, 200, [128, „Z“, 131, „E“, 134, „I“, 137, „L“, 140, „E“, 143, „0“]
gibt in der oberen Zeile des LCD nacheinander im Takt von 200ms die Buchstaben des Wortes ZEILE0 aus.
Im zweiten Beispiel zeigt der Befehlsblock einer FOR...NEXT Schleife, wie der Text Zeile1 langsam von rechts nach links über das LCD gleitet.
FOR index = 9 to 0 SEROUT 14, 84, [148 + index, „Zeile1 “] PAUSE 100 NEXT
Programmbeispiel LCD_04.bs2
Aufgabe |
|
Programm LCD_04.bs2
In dieser Übung benutzen wir die Techniken aus Übung 2.
Die abgelaufene Zeit anzeigen
Die folgenden Programmzeilen erledigen die folgenden Aufgaben:
SEROUT 14, 84, [22, 12] PAUSE 5
SEROUT 14, 84, ["Verstrichene Zeit...", 13] SEROUT 14, 84, [" h m s"]
Für die Stunden-, Minuten- und Sekundenausgabe wird der Cursor über Steuercodes nacheinander in Zeile 1, Position 0, 5 und 10 gebracht.
SEROUT 14, 84, [148, DEC2 h, 153, DEC2 m, 158, DEC2 s]
Die Genauigkeit des Timers ist nicht vergleichbar mit der einer normalen Stoppuhr, aber sie ist hoch genug, um zu zeigen, wie Uhrzeit und Zeichen-Positionierung zusammenarbeiten. Eine höhere Genauigkeit erreicht man mit dem Echtzeituhr-Modul DS1302.
Programmbeispiel LCDUhr.bs2
In diesem Programmbeispiel wird die verstrichene Zeit auf dem LCD angezeigt. Der Timer kann jederzeit mit einem Reset über das BoE neu gestartet werden.
Aufgabe |
|
Das Programm LCDUhr.bs2
Wenn du alles richtig eingegeben hast, sollte die Anzeige die bereits abgelaufene Zeit anzeigen (Abb. 14).
Jetzt kommst du! - Steuercodes mit Konstanten
Bisher haben wir die Steuercodes für das LCD als Dezimalzahlen eingegeben. Lesbarer werden Programme, wenn Steuercodes, BaudModus und PIN Direktiven über eine Konstantendeklaration am Anfang eines Programms erfolgen.
LcdPin PIN 14 ' LCD I/O Pin T9600 CON 84 ' true, 8-bit, no parity, 9600 LcdCls CON 12 ' Form feed -> clear screen LcdCr CON 13 ' carriage return LcdOff CON 21 ' LCD aus Lcdon CON 22 ' LCD an Line0 CON 128 ' Zeile 0, Position 0 Line1 CON 148 ' Zeile 1, Position 0
Damit wird ein Programm lesbarer, spätere Änderungen lassen sich einfacher durchführen und Fehler schneller auffinden. Der erste SEROUT Befehl kann jetzt so umgeschrieben werden:
SEROUT LcdPin, T9600, [LcdOn, LcdCls]
Der SEROUT Befehl, mit dem die Zahlen in Zeile 1 im LCD dargestellt werden, sieht nun so aus:
SEROUT LcdPin, T9600, [(Line1 + 0), DEC2 h, (Line1 + 5), DEC2 m, (Line1 + 10), DEC2 s]
Aufgabe |
|
Das veränderte Programm LCDUhr.bs2 sollte jetzt so aussehen. Alle Zahlen wurden durch Variable und Konstante ersetzt.