Nr.06 – Zwei I²C Displays

Zwei I²C Displays am Arduino gleichzeitig verwenden.

zweiLCDergebnis

Materialbeschaffung: www.funduinoshop.com

Achtung:

Dieser Aufbau und die damit verbundene Änderung der I²C Adresse ist nur bei Displays möglich, die über eine Jumper-funktion verfügen. Die erkennt man auf dem folgenden Bild an dem rot markierten Bereich. Auf den Stellen  A0,A1 und A2 kann eine Kontaktbrücke aufgelötet werden.

zweiLCDrueckseite

Außerdem wird für diese Anleitungen die NewliquidCrystal_1.3.4 Library benötigt, welche hier heruntergeladen werden kann: NewliquidCrystal_1.3.4

Die Library muss in der Arduino Software hinzugefügt werden (siehe vorherige Anleitungen z.B. I²C Display).

Material: Arduino / 2 Displays mit I²C Modul / Breadboard / Kabel

Aufgabe: Zwei LCDs mit I²C Modul sollen gleichzeitig von einem Arduino Mikrocontroller angesteuert werden und zwei verschiedene Texte anzeigen. Dazu sollen die I²C Adressen der Displays vorher herausgefunden werden und die Adresse eines der Displays geändert werden.

Als erstes eine kurze Erläuterung zu der I²C Adresse:

Jedes I²C Modul hat eine sogenannte „HEX Adresse“. Über diese Adresse reagiert das I²C-Modul auf die Daten, die vom Arduino auf dem Datenbus an genau diese Adresse gesendet werden. Viele I²C-LCDs auch die gleiche HEX-Adresse. Das bedeutet, dass beim verwenden von zwei Displays beide Displays auf die gesendeten Daten vom Arduino-Board reagieren würden. Man könnte also auf zwei Displays keine unterschiedlichen Daten darstellen.

Die HEX-Adresse kann bei dem Display mit Hilfe der A0, A1 und A2 Lötstellen jedoch verändert werden. Im unveränderten Zustand sind alle drei Lötstellen nicht verbunden. Je nach Kombination, welche der Stellen man mit einer Lötstelle überbrückt, sind also 8 verschiedene Adressen möglich. Abhängig vom Display Typ kann diese Adresse anfangs 0x27 oder 0x3F sein (kann mit dem Adressen „Scanner“ herausgefunden werden, dazu später mehr).

Tabellen zu HEX Adressen je nach verlöteten Stellen( I = verbunden, : = nicht verbunden):

A0

A1

A2

HEX Adresse

HEX Adresse

:

:

:

0x27

0x3F

I

:

:

0x26

0x3E

:

I

:

0x25

0x3D

I

I

:

0x24

0x3C

:

:

I

0x23

0x3B

I

:

I

0x22

0x3A

:

I

I

0x21

0x39

I

I

I

0x20

0x38

Kommen wir zum I²C Adressen „Scanner“:

Der „Scanner“ ist im Prinzip nur ein Code der auf den Arduino hochgeladen wird an dem das LCD Modul angeschlossen ist und dann am seriellen Monitor die HEX Adresse anzeigt.

Schrittweise Anleitung zum I²C Adressen „Scanner“:

1. Entsprechendes LCD Modul mit dem Arduino verbinden:

I²C LCD Modul >> Arduino

VCC >> 5V

GND >> GND

SDA >> A4

SCL >> A5

2. Folgenden Sketch auf den Mikrocontroller laden:

 

// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011
#include <Wire.h>
void setup() {
Serial.begin (115200);
// Leonardo: wait for serial port to connect
while (!Serial)
{
}
Serial.println ();
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;
Wire.begin();
for (byte i = 8; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1); // maybe unneeded?
} // end of good response
} // end of for loop
Serial.println ("Done.");
Serial.print ("Found ");
Serial.print (count, DEC);
Serial.println (" device(s).");
} // end of setup
void loop() {}

3. Seriellen Monitor in der Arduino Software öffnen

4. Baudrate auf 115200 ändern

5. Ggf. Reset Knopf auf dem Arduino drücken

In dem seriellen Monitor sollte folgendes zu sehen sein (HEX Adresse ist rot markiert):

zweiLCDscanner

 

Wieder zur eigentlichen Anleitung:

Um nun auf zwei I²C Displays gleichzeitig zwei verschiedene Texte anzeigen lassen zu können müssen die Displays natürlich auch verschiedene HEX Adressen haben. Also verlöten wir in unserem Beispiel bei einem der Displays den A1 Kontakt, sodass dieser nun die Adresse 0x3D hat (kann mit dem Adressen Scanner nochmal geprüft werden). Wir nennen diesen Display ab jetzt Display 2 und den anderen Display 1.

Aufbau: Die Displays müssen nun mit dem Arduino verbunden werden:

ZweiLCDaufbau

Code:

#include <Wire.h> //Wire.h Bibliothek einbinden

#include <LiquidCrystal_I2C.h> //LiquidCrystal_I2C.h Bibliothel einbinden

LiquidCrystal_I2C lcd1(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //Hier wird

//Display 1 als lcd1 benannt, die Adresse angegeben „0x3F“ und die

//Pinnbelegung durch das I²C Modul angegeben

LiquidCrystal_I2C lcd2(0x3D, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);//Hier wird

//Display 2 als lcd2 benannt, die Adresse angegeben „0x3D“ und die

//Pinnbelegung durch das I²C Modul angegeben

void setup()

{

lcd1.begin(16,2); //Display 1 wird gestartet und die Größe des Displays

//wird angegeben(16 Zeichen, zwei Zeilen)

lcd1.backlight(); //Beleuchtung Display 1 einschalten

lcd2.begin(16,2); //Display 2 wird gestartet und die Größe des Displays

//wird angegeben(16 Zeichen, zwei Zeilen)

lcd2.backlight(); //Beleuchtung Display 2 einschalten

}

void loop()

{

lcd1.setCursor(0,0); //Text soll beim ersten Zeichen in der ersten Reihe

//bei Display 1 beginnen..

lcd2.setCursor(0,0); //bei Display 2 auch..

lcd1.print("Display 1"); //Display 1 soll oben „Display 1“ anzeigen

lcd2.print("Display 2"); //Display 2 soll oben „Display 2“ anzeigen

delay(1000); // Eine Sekunde warten

lcd1.setCursor(0,1); //Text soll beim ersten Zeichen in der zweiten Reihe

//bei Display 1 beginnen..

lcd2.setCursor(0,1); //bei Display 2 auch..

lcd1.print("Funduino GmbH"); //Display 1 soll unten „Funduino GmbH“

//anzeigen

lcd2.print("www.funduino.de"); //Display 2 soll unten „www.funduino.de

//anzeigen

}