Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Das serielle LCD von Parallax

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.

 

 

Abbildung 1 - BASIC Stamp, Board of Education mit Serial LCD Display - Courtesy of Parallax Inc.

In diesem Kapitel lernst du die Grundlagen über ein LCD Display kennen. Du erfährst:

  • Wie ein LCD Display mit einer BASIC Stamp verbunden wird.
  • Wie ein LCD Display ein- und ausgeschaltet wird.
  • Wie im Display der Cursor gesetzt wird.
  • Wie im Display Text und Zahlen dargestellt werden.
  • Wie im Display selbst entworfene Zeichen dargestellt werden

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.

Abbildung 2 - Geräte mit LCD Display: Smartphone, GPS Finder, Taschenrechner, Digital-Multimeter, Bürouhr, Laptop, Oszilloskope, Bürotelefon (im Uhrzeigersinn) - Courtesy of Parallax Inc.

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.

Abbildung 3 - Parallax Serial LCD (2x16) - Courtesy of Parallax Inc.

2 - Anschluss und Test eines LCD

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
  • 1x  Board of Education mit BASIC Stamp2
  • 1x  Steckernetzteil
  • 1x  mini-USB Kabel
  • 1x  Parallax 2x16 serielles LCD Display
  • 3x  Steckdraht
Aufgabe
  • Setze den PWR-Schalter auf dem BoE auf 0.
  • Verbinde die Vss Buchse mit dem GND-Anschluss des LCDs.
  • Verbinde den RX Anschluss des LCDs mit P14 auf dem Board
  • Verbinde den Vdd Anschluss auf dem Board mit dem 5V Pin am LCD.
  • Der PWR-Schalter bleibt auf 0.

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.

Abbildung 4 - Anschlussbelegung und Verdrahtungsplan mit Parallax-LCD Display - Courtesy of Parallax Inc.

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.

Abbildung 5 - Ansicht der Rückseite des LCD - Courtesy of Parallax Inc.
Aufgabe
  • Der PWR-Schalter muss auf 0 stehen.
  • Schau auf die Rückseite des LCD und finde die beiden Schalter SW1 und SW2.
  • Setze SW1 auf OFF.
  • Setze SW2 auf OFF.
  • Setze den PWR-Schalter auf 1.

 

 

 

Abbildung 6  -  Schalter für die Baudrate auf Selbsttest einstellen

Courtesy of Parallax Inc.

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.

  • Bleibt das Display schwarz oder schwach lesbar, lässt sich das über den Kontrastregler auf der Rückseite beheben. Es sollten die Buchstaben sauber zu sehen sein; sind sie von dunkleren Rechtecken eingerahmt, muss der Kontrast nachgeregelt werden.

Regel den Kontrast ggf. nach.

 

 

Abbildung 7  -  Kontrastregler

Courtesy of Parallax Inc.

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
  • Stelle den PWR-Schalter auf 0.
  • Setze SW1 auf OFF.
  • Setze SW2 auf ON (Abb. 8).
  • Stelle den PWR-Schalter auf 1.

Das Display bleibt solang dunkel, bis die BASIC Stamp 2 so programmiert ist, dass sie Informationen an das LCD schickt.

 

 

 

Abbildung 8  -  Einstellung der Baudrate auf 9600 bps

Courtesy of Parallax Inc.

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.

 

 

 

 

Abbildung 9  -  Baudrateneinstellungen mit Schaltern SW1 und SW2

Courtesy of Parallax Inc.

3 - Darstellung einfacher Nachrichten

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

  • so programmieren, dass ein Text und nummerische Werte im Display erscheinen.
  • Texte und Zahlen blinkend im Display dargestellt werden.

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.

Abbildung 10 Baudmodi für verschiedene Baudraten (Auszug aus dem BASIC Stamp Help Editor)

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
  • Gibt das Programm LCD_01.bs2 ein den Editor ein und speichere es ab.
  • Starte das Programm.
  • Überprüfe, ob der Text auf dem LCD erscheint. Was ist los? in der oberen Zeile und Geht doch! in der zweiten (Abb. 11).

Programmbeispiel  LCD1.bs2

Programm LCD_01.bs2
Abbildung 11 - LCD Ausgabe

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
  • Gibt das Programm LCD_02.bs2 ein den Editor ein und speichere es ab.
  • Starte das Programm.
  • Überprüfe, ob der Text auf dem LCD blinkt.

Das Program LCD_02.bs2

Programm LCD_02.bs2

4 - Zahldarstellung mit Formatierungsanweisung

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
  • Gib das Programm LCD_03.bs2 ein und speichere es ab.
  • Starte das Programm.
  • Überprüfe, ob die Ausgabe im Display mit der in Abb. 12 identisch ist.
  • Ersetze anschließend in Zeile 11 die Formatierungsanweisung DEC durch DEC2 und starte das Programm neu. Was zeigt das Display jetzt an? Gib eine Erklärung.
  • Ersetze DEC2 durch ? und betrachte die Displayausgabe. Gib auch dazu eine Erklärung.
Abbildung 12 Ausgabe im LCD
Programm LCD_03.bs2

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.

Abbildung 13 - Cursorpositionen - Courtesy of Parallax Inc.

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
  • Gib das Programm LCD_04.bs2 ein und speichere es ab.
  • Versuche vorherzusagen, was das Programm im Einzelnen tut.
  • Versuche auch etwas über das Zeitverhalten auszusagen.
  • Starte erst jetzt das Programm.
  • Vergleiche deine Vorhersagen mit dem tatsächlichen Verhalten.
  • Füge in Programmzeile 20 hinter "..Zeile 1 " ein Leerzeichen ein und speicher das Programm ab. Versuche zu beschreiben, wie sich dadurch die Darstellung des Textes im LCD verändert.
  • Starte das Programm und vergleiche deine Vorhersage mit dem tatsächlichen Verhalten.

Programm LCD_04.bs2

Programm LCD_04.bs2

5 - Eine Uhr/Einen Timer programmieren

In dieser Übung benutzen wir die Techniken aus Übung 2.

Die abgelaufene Zeit anzeigen

Die folgenden Programmzeilen erledigen die folgenden Aufgaben:

  • LCD initialisieren
  • Bildschirm löschen
  • einen Rahmentext auf LCD ausgeben

 

  • 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
  • Gib das Programm LCDUhr.bs2 ein und speicher es ab.
  • Überprüfe, ob das Programm so funktioniert, wie eben besprochen.

Das Programm LCDUhr.bs2

Programm LCDUhr.bs2

Wenn du alles richtig eingegeben hast, sollte die Anzeige die bereits abgelaufene Zeit anzeigen (Abb. 14).

Abbildung 14 - LCD Darstellung der Zeit

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
  • Speicher das Programm LCDUhr.bs2 unter dem Namen LCD_5.bs2 ab.
  • Füge die beschreibenden Konstanten in das Programm ein.
  • Ersetze möglichst viele Zahlen durch beschreibende Konstanten.
  • Starte das Programm und beseitige ggf. noch auftretende Fehler.

Das veränderte Programm LCDUhr.bs2 sollte jetzt so aussehen. Alle Zahlen wurden durch Variable und Konstante ersetzt.

Programm LCD_5.bs2

Kommentar schreiben

Kommentare

  • olaf (Sonntag, 10. Dezember 2017 08:35)

    wow...die mit Abstand beste Site, die ich bisher zu diesem Thema gesehen habe :-))
    Vielen Dank dafür. Hilft super beim Erklären!!

  • David Eisenblätter (Sonntag, 11. Februar 2018 13:38)

    Sehr schön erklärt, und zufällig heute, wo ich nochmal nach einer detailierten Gedankenstütze diesbezüglich gesucht habe!

    Vielen vielen Dank!

    David.

Bitte geben Sie den Code ein
* Pflichtfelder
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf