LCD Display

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 Anschluss Beispiel für ein LCD-Display, das einmal direkt mit dem Arduino verbunden wird und als zweites Beispiel ein LCD-Display mit einer I2C Bus Schnittstelle.

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 2004 (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 ein LCD mit 4 Zeilen und je 20 Zeichen zum Einsatz kommen
  lcd.setCursor(0, 0); //1. Wert = Cursor Position, 2. Wert = 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
}

Zweites Beispiel:

LCD mit I2C Schnittstelle

Mit einem LCD, entweder nachgerüstet oder direkt mit der I2C Schnittstelle verbunden, ist die Verdrahtung mit nur 4 Anschlüssen deutlich einfacher. Auch der Regler (blau) für die Hintergrundbeleuchtung ist mit an Board.

Nachrüsten mit einem I2C Adapter

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 nach LiquidCrystal i2c suchen.

Beispiel-Script aus der Library.:
Diese benötigt noch die I2C Adresse des Display. Eine große Menge an Standard I2C Modul Adresse 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);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.init();
  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()
{
}

Ausgabe des Text auf dem Display

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:

,