Wie bekomme ich ein LCD Display an einem Arduino zum laufen

LCD ist die Abkürzung von Liquid Crystal Display.
Einfach gesagt besteht eine LCD-Anzeige meistens aus zwei Glasscheiben, dazwischen mit speziellen Flüssigkeitskristallen und dahinter leuchtet die Hintergrundbeleuchtung. Die Scheiben mit ihren Polfilter, können die schwimmenden Kristalle in der Ausrichtung so ausrichten, das das Hintergrundlicht entweder durchscheint oder abgedeckt wird.

Hier zwei Anschlussbeispiele für ein LCD-Display, das einmal direkt mit dem Arduino verbunden ist und als zweites Beispiel ein LCD-Display, das mit einer zusätzlichen I2C-Bus-Schnittstelle betrieben wird, dann aber wesentlich einfacher eingesetzt werden kann.

Erstes Beispiel

LCD direkt mit Entwicklungsboard verbinden
In diesem Fall wird eine LCD1602 mit 2 Zeilen und je 16 Zeichen verwendet. Von den 16 Anschlüssen müssen 12 Anschlüsse verdrahtet werden. Auch muss hier bei, auch noch die Hintergrundbeleuchtung mit einem Potentiometer geregelt werden.

Immer vorab das passende Datenblatt des Herstellers nach Gerätenamen, Typ, Funktion, Spannungsversorgung, Auflösung prüfen.

Ganz schön viel Verdrahtung

Hardware:
Arduino Uno
LCD1602 (2 Zeilen mit je 16 Zeichen) oder LCD2004 (4 Zeilen mit je 20 Zeichen)
Potentiometer 10 kΩ (Kilo Ohm)

Verdrahtung:

LCD PinBezeichnungFunktionArduino oder PotiPIN
1VSSStromversorgung 0VArduinoGround
2VCC oder VDDStromversorgung 5VArduino+5V
3V0Stromversorgung LCDPotentiometer2
4RSRegister Select: H:Dateneingang L:BefehlseingangArduino12
5R/WH:Lesen L:SchreibenArduinoGround
6EEnable Signal Arduino11
7D(B)0Datenbus für 8 Bit ÜbertragungFrei
8D(B)1Datenbus für 8 Bit ÜbertragungFrei
9D(B)2Datenbus für 8 Bit ÜbertragungFrei
10D(B)3Datenbus für 8 Bit ÜbertragungFrei
11D(B)4Datenbus für 4 und 8 Bit ÜbertragungArduino5
12D(B)5Datenbus für 4 und 8 Bit ÜbertragungArduino4
13D(B)6Datenbus für 4 und 8 Bit ÜbertragungArduino3
14D(B)7Datenbus für 4 und 8 Bit ÜbertragungArduino2
15A oder LED+HintergrundbeleuchtungArduino+5V
16K oder LED-HintergrundbeleuchtungArduinoGround
Poti PinArduino oder LCD
1HintergrundbeleuchtungArduino+5V
2HintergrundbeleuchtungLCDV0
3HintergrundbeleuchtungArduinoGround

Passende Library / Bibliothek suchen und einbinden

  • Gehe ins Sketch Menü.
  • Drücke Bibliothek einbinden.
  • Öffne Bibliotheken verwalten.
  • Suche nach LiquidCrystal und installieren.

Quellcode: (Unter Beispiele / Liquid Crystal / zB. HelloWorld)

Das oben im Bild verwendete Skript:

#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2); // (20,4) Sollte bei einem LCD mit 4 Zeilen und je 20 Zeichen zum Einsatz kommen
  lcd.setCursor(0, 0); //1. Wert 0 = Cursor Position 1, 2. Wert 0 = Zeile 1
  lcd.print("Prilchen.de");
}

void loop() {
  lcd.setCursor(0, 1); //1. Wert = Cursor Position, 2. Wert = Zeile 2
  lcd.print(millis() / 1000); //Schreibe Sekunden in 2.Zeile
}

Im Sketch angeben welche LCD-Variante verwendet wird:
– lcd.begin(16, 2); = LCD mit 2 Zeilen und je 16 Zeichen
oder
– lcd.begin(20, 4); = LCD mit 4 Zeilen und je 20 Zeichen


Zweites Beispiel:

LCD mit I2C Schnittstelle

Mit einem LCD, das entweder mit einem I2C Adapter HW-061 nachgerüstet oder direkt mit der I2C Schnittstelle gekauft wurde, ist die Verdrahtung mit nur 4 Anschlüssen deutlich einfacher. Auch der Regler (blauer Poti) für die Hintergrundbeleuchtung ist mit an Board.

Nachrüsten mit einem I2C Adapter oder LCD direkt mit Adapter Platine

Der I2C-Adapter HW-061

Verdrahtung:
Die Verdrahtung ist deutlich einfacher.
LCD VCC = 5V
LCD GND = Ground
LCD SDA = A4 oder SDA
LCD SCL = A5 oder SCL

Library:
Hier in der Bibliotheksverwaltung aber nach einer neuen Library mit dem Namen LiquidCrystal i2c suchen.

Beispiel-Script aus der Library.:
Diese benötigt noch die I2C Adresse des Display. Standard ist 0x27.
Wer Standard I2C Modul Adresse sucht, diese sind bei https://i2cdevices.org zu finden.
Hier einfach nach HW-061 suchen und im Sketch einfügen.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // Adresse ist 0x27 für 16 Zeichen und 2 Zeilen display

void setup()
{
  lcd.init();                      // initialisiere lcd 
  lcd.backlight();
  lcd.setCursor(2,0); //Erste Zeile und 2 Zeichen freilassen
  lcd.print("Gesehen auf");
  lcd.setCursor(2,1); //Zweite Zeile und 2 Zeichen freilassen
  lcd.print("Prilchen.de"); 
}

void loop()
{
//hier steht nichts
}

Ausgabe des Text auf dem Display


Drittes Beispiel:

Laufschrift im LCD Display:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);  // LCD mit I2C-Adresse 0x27

void setup() {
  lcd.init();       // LCD initialisieren
  lcd.backlight();  // Hintergrundbeleuchtung einschalten
}

void loop() {
  const char* text = " Prilchen.de    ";  // Das Wort "Prilchen" beginnt mit Leerzeichen
  int textLength = 16;                    // Länge des Displays (16 Spalten)

  // Fließender Effekt: Charakterweise Scrollen von links nach rechts
  for (int offset = textLength; offset > 0; offset--) {
    lcd.clear();

    // Zeichne den Text mit einem Offset
    for (int i = 0; i < 16; i++) {
      int charIndex = (i + offset) % textLength;  // rennt nach rechts
      lcd.setCursor(i, 1);                        // Setze Cursor-Spalte
      lcd.print(text[charIndex]);                 // Drucke den entsprechenden Buchstaben
    }
    lcd.setCursor(2, 0);         // Setze Cursor-Spalte
    lcd.print("Gesehen auf ");  // Drucke Text
    delay(500);                  // Geschwindigkeit der Laufschrift anpassen
  }
}

Wenn I2C-Adresse unbekannt:

Der Arduino kann aber auch alternativ nach der I2C Adresse scannen.
Kleines Sketch um die I2C Adresse zu finden:

#include <Wire.h>
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

Scanner gibt im Seriellen Monitor dann Auskunft:


, , ,
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzerkomfort bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst und hilft uns zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.