I²C-Adapter für 1602-LCDs

I²C-Adapter für 1602-LCDs

In einem früheren Beitrag wurde ein LCD mit 16×2 Zeichen über die herkömmliche Schnittstelle (16 Anschlüsse) gesteuert. Die Verkabelung ist dabei recht aufwendig. Mit dem hier verwendeten Adapter kann dasselbe LCD mit nur 4 Pins per I²C angesprochen werden. Die I²C-Signale werden über den IO-Expander PCF8574 auf die entsprechenden Display-Pins des LCD geroutet.

Verwendete Bauteile

I²C-Adapter

Den Adapter für das I²C-Protokoll zu verwenden bietet einige Vor- und Nachteile. Ein Nachteil des I²C-Protokolls ist auf jeden Fall, dass die Adresse 0x27 standardmäßig für den Adapter vergeben ist und mit anderen Module in Konflikt geraten könnte.
Ein Vorteil ist, dass es einen einfachen Jumper gibt, mit dem man die Hintergrundbeleuchtung des LCDs je nach Bedarf an- oder ausschalten kann. Außerdem kann über einen kleinen Trim-Potentiometer der Kontrast des Displays eingestellt werden, es ist also kein separater Potentiometer notwendig.
Die I²C-Adresse des Moduls kann durch die Lötstellen (A0, A1 und A2 auf der Platine) geändert werden. (bisher nicht ausprobiert; evtl. kann hier der I²C Scanner nützlich sein)

Aufbau und Anschlüsse

Das LCD und der Adapter werden entweder direkt verlötet oder wie im folgenden Bild auf einem Breadboard zusammengesteckt. Die vier Pins werden nach folgender Tabelle verbunden.

I²C-Adapter Arduino Uno
VCC 5V
GND GND
SCL (serial clock) A5
SDA (serial data) A4
Aufbau mit I²C-Adapter und 16x2 LCD

Programmierung

Der Einfachheit halber habe ich die Library Arduino-LiquidCrystal-I2C-library verwendet, die viele nützliche Funktionen zur Bedienung des LCDs zur Verfügung stellt. Das folgende Beispiel lässt den Cursor abwechselnd blinken und nicht blinken:

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

LiquidCrystal_I2C lcd(0x27, 16, 2);
bool blinking = true;

void setup()
{
    lcd.begin();
}

void loop()
{
    lcd.cursor();
    lcd.clear();

    if (blinking) {
        lcd.print("No cursor blink");
        lcd.noBlink();
    } else {
        lcd.print("Cursor blink");
        lcd.blink();
    }
    blinking = !blinking;
    delay(3000);
}
Anzeigebeispiel auf einem 16x2 LCD
zurück