Arduino Kurs – #7 – Textanzeige, LCD 2×16

Bis jetzt war unsere Kommunikation mit dem Arduino-Board relativ begrenzt. Wir konnten Leuchtdioden verwenden, um bestimmte Zustände zu signalisieren, oder den UART, um uns mit dem Computer zu verbinden.

 

Letzteres erlaubte relativ viel, war aber nicht sehr mobil. Nun ist es Zeit für das erste Programm mit einem LCD-Display.

Bestellen Sie ein Set mit Elementen und beginnen Sie mit dem Lernen in der Praxis! Hier gehts zum Shop >>

Eine kurze Einführung zu den Displays

Der Anschluss und die Steuerung eines Grafik- oder Textdisplays kann eine Menge Arbeit bedeuten. Schließlich haben wir eine große Anzahl von Pixeln auf dem Bildschirm und jedes einzelne muss irgendwie gesteuert werden. Schau dir noch einmal das Bild aus dem ersten Teil des Arduino-Kurses an:
Beispiel für eine LCD-Anzeige.

Jeder Buchstabe besteht aus einer Anzahl von Pixeln, die in Rechtecken mit je 16 Pixeln und zwei Reihen angeordnet sind. Dies ist die 2×16 (oder 16×2) LCD-Textanzeige. Diese Schreibweise bedeutet, dass wir jeweils 2 Zeilen mit je 16 Zeichen auf dem Bildschirm darstellen können.

 

Diese Einschränkung ist typisch für Textdisplays, die für die Darstellung von Buchstaben (und kleinen Symbolen) verwendet werden. Anders verhält es sich bei Grafikdisplays, wo wir mehr Freiheit haben, da alle Pixel in einem einzigen Rechteck angeordnet sind, z. B: 128×128. Dadurch ist es zusätzlich möglich, z. B. Linien oder Kreise zu zeichnen.

In diesem Kurs werden wir uns mit monochromen (einfarbigen) Textanzeigen beschäftigen.

Wie bringt man das Display zum Laufen?

Wie bereits erwähnt, bestehen die Buchstaben aus Pixeln. Die Steuerung jedes einzelnen Pixels würde eine große, nein, eine riesige Anzahl von Steuerleitungen erfordern. Natürlich funktioniert alles viel einfacher, weil die Displays mit eingebauten Controllern ausgestattet sind! Der beliebteste von ihnen ist der HD44780.

 

Meistens findet man in der Beschreibung des betreffenden LCDs den Hinweis „Display compatible with HD44780 driver“. Dann weiß man, dass die Bedienung kinderleicht sein wird!

Fertige Sets für Forbot-Kurse
 Satz von Elementen   Garantierte Unterstützung   Versand in 24 Stunden

Sie können jetzt ein Set von mehr als 70 Elementen, die für die Kursübungen notwendig sind, bei unseren Händlern kaufen!

Beliebtes Paket: Arduino MeisterRobotik Meister

Wie soll der Text an das Display gesendet werden? Es müssen etwa 12 Leitungen angeschlossen werden. Natürlich sind nur einige davon für die Kommunikation bestimmt, die anderen sind Strom und andere Signale, die sich während des Betriebs des Displays nicht ändern.

 

Meistens ist ein solches Display mit einem 16-poligen Stecker ausgestattet:

LCD-Textanzeige 2x16 Zeichen.

Von links gezählt, sehen die Anschlüsse wie folgt aus. Die Bedeutung aller Pins von 4 bis 12 ist nicht wesentlich, ich präsentiere sie für den neugierigen Leser:

  1. GND – Masse
  2. Vcc – Stromversorgung positiv, 5V
  3. V0 – Kontrasteinstellung
  4. RS – Auswahl des Registers (Befehl, Daten)
  5. RW – Lese-/Schreibauswahl
  6. E – Schreibberechtigung für Register
  7. D0 – Daten
  8. D1 – Daten
  9. D2 – Daten
  10. D3 – Daten
  11. D4 – Daten
  12. D5 – Daten
  13. D6 – Daten
  14. D7 – Daten
  15. Vpod – Stromversorgung positiv für die Beleuchtung
  16. GNDpod – Masse der Beleuchtung

Die Pins 1 bis 3 werden für die Stromversorgung der Schaltung verwendet, 4 bis 14 für die Steuerung, während sich unter 15 und 16 eine interne Leuchtdiode befindet, die das Display beleuchtet. Displays, die mit dem HD44780-Controller kompatibel sind, können im 4-Bit- und 8-Bit-Modus mit der Umgebung kommunizieren.

 

Der erste Modus erfordert 7 Arduino <-> Display-Verbindungen. Im Falle des 8-Bit-Modus hingegen sind bis zu 11 erforderlich. Bei Verwendung einer geringeren Anzahl von Anschlüssen bleiben praktisch alle Display-Optionen erhalten.

Daher schließen wir das LCD in fast jeder Situation im 4-Bit-Modus an. Dann sollten nur die fett dargestellten Pins in der obigen Liste verwendet werden.

Anschließen des Displays an den Arduino

Der Arduino wird mit einer speziellen Bibliothek geliefert, die für die Anzeige von Texten vorbereitet ist. Bevor wir jedoch mit dem Display arbeiten können, ist es an der Zeit, es zu verkabeln. Glücklicherweise wird es in diesem Teil des Kurses nicht viele Schaltpläne geben – ein paar wenige werden ausreichen. Der erste ist unten zu finden.

 

Benötigt werden: Arduino, Kontaktplatine, LCD, Potentiometer und natürlich Kabel.

Volle Kontrolle über das Display.

Das Potentiometer bedarf wohl einer Erklärung. Es ist als Spannungsteiler geschaltet, mit dem der Kontrast des Displays eingestellt wird. Der zweite wichtige Punkt ist die Hintergrundbeleuchtung. Die Spannung kann über einen strombegrenzenden Widerstand oder direkt angeschlossen werden (in der Regel ist in der Mitte des Displays bereits ein Widerstand eingebaut). Die Frage der Wahl der Helligkeit muss hier jeder für sich selbst ausprobieren. In meinem Fall habe ich einen schönen Effekt ohne Widerstand erzielt.

Wenn der Arduino eingesteckt ist (hier reicht USB-Strom), sollte der Bildschirm aufleuchten. Wie unten zu sehen.

Auswirkungen eines schlecht eingestellten Kontrasts (links).

Durch Drehen des Potentiometers für den Kontrast kann eine von zwei Varianten eingestellt werden. Entweder ein leerer Bildschirm oder die oberste Zeile ist mit Rechtecken gefüllt. Bedeutet dies, dass das Display defekt ist?

 

Nein! Das ist ein gutes Zeichen, ein funktionierendes Display, das an die Stromversorgung angeschlossen ist, sollte so aussehen. Stelle also das Potentiometer auf diesen Punkt ein, damit du die Rechtecke sehen kannst.

Die Displays sind in verschiedenen Farben erhältlich – oft grün oder blau. Ich habe dieses Mal ein rot/bernsteinfarbenes Display verwendet.

Jetzt können wir zur Programmierung übergehen…

Das erste Programm - Textdarstellung

Wie bei den Servos des Arduino gibt es auch hier eine eigene Bibliothek, die die Arbeit mit Textdisplays erleichtert. Diesmal heißt sie LiquidCrystal. Zuerst ein Beispiel und dann eine Besprechung des Programms. Ladet den Code noch nicht auf euren Arduino hoch!
				
					#include <LiquidCrystal.h> //Hinzufügen einer Bibliothek
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Information über den Anschluss eines neuen Displays

void setup() {
  lcd.begin(16, 2); //Deklaration des Typs
  lcd.setCursor(0, 0); //Einstellung des Cursors
  lcd.print("Arduino-Kurs"); //Anzeige des Textes
  lcd.setCursor(0, 1); //Einstellung des Cursors
  lcd.print("Auf Forbot!"); //Anzeige des Textes
}

void loop() {
}
				
			

Die Bibliothek für die Bedienung des Displays befindet sich in der Datei: LiquidCrystal.h. Um die Arbeit mit dem Display zu beginnen, muss ein neues Objekt initialisiert werden. Dies geschieht durch die Zeile:

				
					LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
				
			

Eine solche Angabe informiert darüber, dass wir das Display mit der Bezeichnung lcd an die Pins 2 bis 7 angeschlossen haben. Konkret wurden die Signale nacheinander an folgende Pins angeschlossen: 2 (RS), 3 (Enable), 4 (D4), 5 (D5), 5 (D6) und 7 (D7).

Die Wahl der Verbindung ist natürlich willkürlich.
Wichtig ist nur, dass sie mit den physikalischen Verbindungen übereinstimmt.

Die Funktion lcd.begin(Zeichen, Zeilen) legt die Anzahl der Zeichen und Zeilen fest, auf denen der Text angezeigt werden soll. In unserem Fall erlaubt die Anzeige 16 Zeichen in jeweils 2 Zeilen.

Eine weitere beliebte Größe für Displays ist 2×8.

Die Funktion lcd.setCursor(position, Zeile) setzt den Cursor an die angegebene Position. Zum Beispiel bedeutet die Notation (0,0) den Beginn des Textes ab dem ersten Zeichen, der ersten Zeile. Die Notation (0,1) hingegen ist der Text ab dem Beginn der zweiten Zeile.

 

Die wichtigste Funktion – lcd.print(Untertitel) – gibt den Text auf dem Display wieder. Wenn mehr Buchstaben angezeigt werden, bewegt sich der Cursor. Daher beginnt der nächste Aufruf von lcd.print an der Stelle, an der das Ende des vorherigen Textes war. Es sei denn, wir verwenden setCursor zwischen den Aufrufen. In den folgenden Beispielen wird alles klar.

 

Jetzt ist es an der Zeit, das Programm auf den Arduino zu laden! Das Ergebnis sollte wie das folgende aussehen:

Text, der auf dem LCD aus dem Arduino angezeigt wird!

Was, wenn es nicht funktioniert?

Wenn du keinen Text auf dem Bildschirm sehen kannst, überprüfe die folgenden 3 Punkte, sie lösen 99,99% der Probleme!

  1. Kein Strom am LCD angeschlossen
  2. Falsche Reihenfolge der Signalanschlüsse vom Arduino
  3. Falsche Kontrasteinstellung

Der letzte Punkt ist fett gedruckt, weil er am einfachsten zu überprüfen ist und von Anfängern oft vergessen wird! Nachdem die oben genannten Punkte überprüft wurden, hat hoffentlich alles funktioniert. Jetzt können wir mit der Besprechung der wichtigsten LCD-bezogenen Funktionen weitermachen. Zunächst aber eine einfache Hausaufgabe

Hausaufgabe 7.1

Schreibe ein Programm, das in der ersten Zeile deinen Namen auf dem Bildschirm anzeigt und in der zweiten Zeile die Adresse forbot.de

Den Cursor ein- und ausschalten - Arduino

Wie in einem Textverarbeitungsprogramm kann der Cursor auf dem LCD-Display ein- oder ausgeschaltet werden. Dies ist das Zeichen „_“, das nach dem letzten geschriebenen Zeichen steht. In der Standardeinstellung ist er deaktiviert. Es gibt zwei einfache Funktionen, um ihn zu steuern: lcd.cursor() und lcd.noCursor().

 

Wenn der Cursor eingeschaltet wird:

				
					#include <LiquidCrystal.h> //Hinzufügen einer Bibliothek
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informationen zum Anschluss eines neuen Displays

void setup() {
  lcd.begin(16, 2); //Deklaration des Typs
  lcd.setCursor(0, 0); //Einstellung des Cursors
  lcd.print("Arduino-Kurs"); //Anzeige des Textes
  lcd.setCursor(0, 1); //Einstellung des Cursors
  lcd.print("Auf Forbot!"); //Anzeige des Textes
  lcd.cursor(); //Aktivieren des Cursors
}

void loop() {
}
				
			

Man erhält folgendes Ergebnis:

LCD gesteuert von Arduino - Cursor eingeschaltet.

Natürlich können diese Effekte gemischt werden. Überzeuge dich selbst von der Wirkung des Programms, wenn du folgendes im Loop eingibst:

				
					void loop() {
  lcd.noCursor(); //Cursor ausschalten
  delay(250); //Warten
  lcd.cursor(); //Cursor einschalten
  delay(250); //Warten
}
				
			

Eine andere Version des Cursors...

Es gibt auch eine ähnliche Funktion, die den Cursor automatisch blinken lässt. Dieses Mal ist es jedoch ein gezeichnetes Rechteck. Die Funktionen zum Aktivieren und Deaktivieren dieser Option sind sehr ähnlich benannt: lcd.noBlink() und lcd.blink(). Die Verwendung dieser Funktion ist sehr einfach, Beispiel:

				
					#include <LiquidCrystal.h> //Hinzufügen einer Bilbiothek
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //
Information über den Anschluss eines neuen Displays

void setup() {
  lcd.begin(16, 2); //Deklaration des Typs
  lcd.setCursor(0, 0); //Einstellung des Cursors
  lcd.print("Arduino-Kurs"); //Anzeige des Textes
  lcd.setCursor(0, 1); //Einstellung des Cursors
  lcd.print("Auf Forbot!"); //Anzeige des Textes
  lcd.blink(); //Cursor einschalten
}

void loop() {
}
				
			

Effekt eines blinkenden Cursors:

Blinkender Cursor - Arduino und LCD

Ein- und Ausschalten des Displays

Wie der Titel schon sagt, können wir die Anzeige auf dem Bildschirm ein- oder ausschalten. Beachte jedoch, dass diese Funktionen nur die Anzeige des Textes deaktivieren.

Sie haben keinen Einfluss auf die Hintergrundbeleuchtung!

Auch hier sind die Funktionsnamen aufschlussreich: lcd.display() und lcd.noDisplay(). Wenn das Display aus- und wieder eingeschaltet wird, erscheint natürlich der vorherige Text auf dem Display. Es besteht keine Notwendigkeit, den Inhalt erneut zu senden, damit er sichtbar wird. Beispielprogramm:

				
					#include <LiquidCrystal.h> //Hinzufügen einer Bibliothek
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Information über den Anschluss eines neuen Displays

void setup() {
  lcd.begin(16, 2); //Deklaration des Typs
  lcd.setCursor(0, 0); //Einstellung des Cursors
  lcd.print("Arduino Kurs"); //Anzeige des Textes
  lcd.setCursor(0, 1); //Einstellung des Cursors
  lcd.print("Auf Forbot!"); //Anzeige des Textes
  lcd.blink(); //Cursor einschalten
}

void loop() {
  lcd.noDisplay(); //Ausschalten und warten
  delay(500);

  lcd.display(); //Einschalten und warten
  delay(500);
}
				
			

Und der Effekt:

Kurzzeitiges Ausschalten des Displays - LCD und Arduino.

Löschen von LCD-Inhalten

Wenn man die Anzeige von Texten auf dem LCD-Display testet, kann man feststellen, dass sie sich manchmal überschneiden. Die Anzeige löscht ihren Inhalt nicht automatisch (das hat seine Vorteile). Wenn du jedoch den gesamten Text entfernen möchtest, kannst du die Funktion lcd.clear() verwenden. Sieh dir selbst an, wie sie funktioniert!

Anzeige der ADC-Ergebnisse auf dem Display

Mit dem Programm wird der Wert der am Fotowiderstand anliegenden Spannung angezeigt. Der Fotowiderstand mit dem Widerstand bildet einen Spannungsteiler, und diese Spannung wird an den Analogeingang A0 angelegt.

Anschlussplan für Lichtsensor.
Wenn sich die Intensität des auf den Teiler einfallenden Lichts ändert, ändert sich der (ausgelesene) Spannungswert am Wandler. Das binäre Ergebnis wird in das entsprechende Spannungsergebnis umgewandelt. Diese Aufgabe sollte einfach zu lösen sein, wenn du zuvor den Abschnitt über ADCs gelesen hast.
				
					#include <LiquidCrystal.h> //Hinzufügen einer Bilbiothek
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informationen zum Anschluss eines neuen Displays

void setup() {
  lcd.begin(16, 2); //Deklaration des Typs
  lcd.clear();
  lcd.setCursor(0, 0); //Einstellung des Cursors
  lcd.print("Spannung ausgelesen");
  lcd.setCursor(0,1);
  lcd.print("0.00V"); 
}

double Ablesung;

void loop()
{
  Ablesung = analogRead(A0)*5.0/1024.0; //Spannungswert
  lcd.setCursor(0, 1); //Einstellung des Cursors im richtigen Moment
  lcd.print(Ablesung); //Anzeige des Textes
  delay(250); //Verzögerung
}
				
			

Beachte, dass wir in diesem Fall die Texte nur einmal anzeigen und sie nie wieder überschreiben. Wir ändern nur die ersten 4 Zeichen der unteren Zeile, die unsere Ablesung ist. Prüfe, ob das Programm korrekt funktioniert. In meinem Fall sah das Ergebnis z. B. so aus:

Tragbarer Lichtintensitätsmesser!

Wir haben also ein tragbares Gerät gebaut, das seine Ergebnisse präsentieren kann, ohne dass es an einen Computer angeschlossen werden muss!

Hausaufgabe 7.2

Die Anzeige hat eine gewisse Trägheit. Sieh dir an, was passiert, wenn wir versuchen, neue Daten zu schnell anzuzeigen (indem wir den Inhalt des Bildschirms jedes Mal löschen, wenn die Schleife läuft).

Hausaufgabe 7.3

Prüfe, was passieren würde, wenn wir den gesamten Text im obigen Voltmeter-Beispiel öfter aktualisieren würden. Wäre das Ergebnis immer noch so gut ablesbar, bis zu welchem Wert?

Hausaufgabe 7.4

Schreibe ein Programm, das eine einfache Stoppuhr ist. Wenn eine Taste gedrückt wird, beginnt die Messung und die aktuelle Zeit erscheint auf dem Bildschirm. Wenn die zweite Taste gedrückt wird, zeigt der Bildschirm „Ende“ und die gemessene Zeit in Sekunden an.

Was ist mit der Hintergrundbeleuchtung...

Zum Schluss noch eine Kuriosität. Ich habe vorhin erwähnt, dass wir nicht die Möglichkeit haben, die Hintergrundbeleuchtung zu steuern. Ist das wirklich so? Immerhin handelt es sich nur um eine Leuchtdiode. Was wäre, wenn wir sie an den Mikrocontroller anschließen würden? Dazu müssen wir nur ein Kabel umstecken:

Die Erfahrung kann sich negativ auf den Arduino auswirken. Prüfe, wie viel Strom deine Hintergrundbeleuchtung zieht. Informationen über Strommessungen findest du im Elektronikkurs. Es ist eine gute Idee, die Hintergrundbeleuchtung zur Sicherheit über einen Widerstand oder Transistor anzuschließen!

Volle Kontrolle über das Display.
Erinnerst du dich an die Möglichkeiten, die die Erzeugung eines PWM-Signals bietet? Prüfe, wie sich das LCD verhält, nachdem du das Programm unten hochgeladen hast. Ich glaube, du weißt bereits, warum das passiert!
				
					#include <LiquidCrystal.h> //Hinzufügen einer Bilbiothek
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Information über den Anschluss eines neuen Displays

void setup() {
  lcd.begin(16, 2); //Deklaration des Typs
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Willkommen auf");
  lcd.setCursor(0,1);
  lcd.print("FORBOT.com"); 
}
int Helligkeit = 0;    
int Änderung = 5;   

void loop()
{
  analogWrite(11, Helligkeit); //
Erzeuge ein PWM-Signal mit angegebener Füllung   
  Helligkeit = Helligkeit + Änderung; //Im nächsten Zyklus die Helligkeit um den Wert der Variablen Änderung ändern

  if (Helligkeit == 0 || Helligkeit == 255) { //Wenn die Füllung 0% oder 100% beträgt
    Änderung = 0-Änderung; //Ändere dann das Zeichen der Änderung (beginne in die entgegengesetzte Richtung zu ändern)
  }     
   
  delay(30); //Warten für einen besseren Effekt 
}
				
			

Du hast bereits die volle Kontrolle über das LCD-Display. Von nun an werden wir es für zukünftige Projekte verwenden. Bis dahin solltest du seine Funktionsweise gut beherrschen!

Zusammenfassung

In diesem Teil des Kurses haben wir die wichtigsten Informationen über Textanzeigen behandelt. Ihr werdet sie sicherlich in vielen Projekten verwenden. Sie sind nicht nur nützlich, sondern verbessern auch ganz erheblich die Wahrnehmung des gesamten Geräts, das viel professioneller aussieht!

Bestellen Sie ein Set mit Elementen und beginnen Sie mit dem Lernen in der Praxis! Hier gehts zum Shop >>

Im nächsten Teil des Kurses werden wir auf PWM-Signale zurückkommen. Ich werde zeigen, wie einfach es ist, einen Motor zu steuern.

Nach oben scrollen