In den vergangenen drei Tagen haben Sie Grundkenntnisse zum Thema Aufbau einer kleinen Schaltung, Löten und Inbetriebnahme eines Micro Controllers bekommen. Was bisher die Weihnachtswichtel nicht herausgegeben haben, war Peripherie für den Micro Controller. Dies wollen die Weihnachtswichtel heute korrigieren und haben gleich 6 Bauteile hinter Tür vier versteckt.
Was ist drin hinter Türchen Nummer 4
Hinter Türchen Nummer vier befinden sich:
- 3 x HD44780 1602 LCD Modul Display (grüne Beleuchtung)
- 3 x I2C-Schnittstellenadapter zum Anlöten
Zusätzlich benötigen Sie für die Arduino IDE die Programm-Bibliotheken LiquidCrystal und/oder LiquidCrystal_I2C. Wie das geht, zeigen wir u.a. hier.
Generell haben Sie drei verschiedene Möglichkeiten, das Display mit einem Micro Controller zu verbinden, siehe Abbildung 1.
Abbildung 1: HD44780 1602 LCD Modul Displays Anschlussvarianten
Die erste Variante, im Bild oben, ist die Ursprungsvariante mit angelöteter Stiftleiste (nicht im Lieferumfang). Dies bedeutet aber auch, dass auf einem Micro Controller mindestens 6 Pins belegt werden, gleich mehr dazu.
Die andere Variante ist mit dem angelöteten I2C-Schnittstellenadapter, der wahlweise vorne oder hinten angelötet werden kann. Achten Sie darauf, dass die vier Stiftleisten zum Anschluss an den Micro Controller immer nach außen zeigen, da sonst das HD44780 1602 LCD Modul Display zerstört werden kann.
Verbindung klassisch
In der klassischen Variante wird das LCD-Display an insgesamt 6 Pins mit dem Micro Controller verbunden. Abbildung 2 zeigt eine solche Verbindung, wobei das 10kOhm Potentiometer für den Kontrast am Display genutzt wird.
Abbildung 2: LCD-Anschluss paralleles Interface
Der entsprechende Code dazu, siehe Code 1, ist schlank und gibt in zwei Zeilen die Nachricht „LCD-Display without ic2“ aus.
//-----------------------------------------------------
// LiquidCrystal parallel interface
// Autor: Joern Weise
// License: GNU GPl 3.0
// Created: 24. Nov 2020
// Update: 24. Nov 2020
//-----------------------------------------------------
#include <LiquidCrystal.h> //include the LiquidCrystal library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//define LCD pins (RS, E, D4, D5, D6, D7)
void setup() {
lcd.begin(16, 2); //initializes the LCD and specifies the dimensions
lcd.home();
lcd.print(" LCD-Display ");
lcd.setCursor(0, 1);
lcd.print(" without i2c ");
}
void loop()
{
}
Code 1: Simple Ausgabe
Die Zählung für die Cursorposition und die Zeile beginnt übrigens jeweils bei 0, also lcd.setCursor(0,1); ist die erste Stelle in der zweiten Zeile.
Verbindung mit I2C-Schnittstellenadapter
Wollen Sie das Display mit I2C betreiben, müssen Sie den I2C-Schnittstellenadapter an das Display löten. Vom Prinzip können Sie, sofern sie über die Adresspads verschiedene Hex-Adressen einstellen, bis zu 8 LCD-Displays betreiben. Tabelle 1 zeigt, wie Sie welchen Adresspad löten müssen, um die gewünschte HEX-Adresse zu bekommen, siehe Abbildung 3. „X“ steht für verbunden, „0“ für nicht verbunden.
Pos |
A0 |
A1 |
A2 |
Hex-Adresse |
1 |
X |
X |
X |
0X20 |
2 |
0 |
X |
X |
0X21 |
3 |
X |
0 |
X |
0X22 |
4 |
0 |
0 |
X |
0X23 |
5 |
X |
X |
0 |
0X24 |
6 |
0 |
X |
0 |
0X25 |
7 |
X |
0 |
0 |
0X26 |
8 |
0 |
0 |
0 |
0X27 |
Tabelle 1: Hex-Adresse für Adresspads
Abbildung 3: Position Adresspads zum Ändern der HEX-Adresse
Die Basisadresse ist also 0x27, alle drei Löt-Brücken sind offen.
Der Anschluss an ein z.B. Mikrocontroller Board kompatibel mit Arduino Uno R3 ist recht simpel, da die I2C-Pins des Micro Controllers verwendet werden, also SDA an A4, SCL an A5, VCC an 5V und GND an GND, siehe Abbildung 3. Hier auf Abbildung 3 auch gut zu erkennen das Poti für den Kontrast des LCD.
Abbildung 4: Anschluss HD44780 1602 LCD mit I2C an Mikrocontroller Board
Code 2 gibt auch auf zwei Zeilen eine Nachricht aus; hier ist es der Satz „LCD-Display with i2c“. Hier verwenden wir die zweite Bibliothek für LiquidCrystal mit dem Zusatz I2C.
//-----------------------------------------------------
// LiquidCrystal I2C connection
// Autor: Joern Weise
// License: GNU GPl 3.0
// Created: 24. Nov 2020
// Update: 24. Nov 2020
//-----------------------------------------------------
#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.backlight(); // backlight on
lcd.home(); // set cursor to 0,0
//Write some text
lcd.print(" LCD-Display ");
lcd.setCursor(0, 1);
lcd.print(" with i2c ");
}
void loop()
{
}
Code 2: Simple Ausgabe via i2c
Natürlich ist auch die Kombination beider Anschlussvarianten möglich, dazu müssen Sie die Schaltung aus Abbildung 2 und Abbildung 4 gleichzeitig aufbauen und natürlich beide Bibliotheken inkludieren.
In diesem Sinne….
Abbildung 5: We wish a Merry Christmas
Damit haben Sie Türchen Nummer 4 in Betrieb genommen und noch ein bisschen Hintergrundwissen erhalten. Sie wollen Projektideen, dann hier einige Projekte:
Weitere Projekte für AZ-Delivery von mir, finden Sie unter https://github.com/M3taKn1ght/Blog-Repo.
Das Team von AZ-Delivery wünscht eine schöne Adventszeit!
5 Reacties
Andreas Wolter
@Wolf Fietz: auf Abbildung 1 sind zwei Möglichkeiten abgebildet. Ansonsten könnten Sie noch einen Blick auf diese Beiträge werfen:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/binaerumrechner-mit-arduino-und-i2c-lcdisplay
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/mein-i2c-display-adapter-geht-nicht
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/verschiedene-varianten-einer-anzeige-fuer-messwerte-am-beispiel-einer-fuellstandsanzeige
Im Grunde funktioniert der Adapter wie ein Shield. Die Pins passen genau übereinander. Man muss nur darauf achten, dass die vier Anschlüsse nach außen zeigen.
Grüße,
Andreas Wolter
AZ-Delivery Blog
wolf fietz
hi, ich habe heute – 14.07.2022 – bekommen :
HD44780 2004 LCD Display Bundle 4×20
Zeichen mit I2C Schnittstelle – 1x Bundle
Leider ist die Schnittstellenkarte Nicht mit dem
Display verbunden sondern muß noch angelötet werden.
Es liegt Keine Anweisung dazu bei, wie herum das gemacht werden muß !
Wo finde ich dazu etwas ?
Yannic Thiel
Guten Tag
Ich bin absoluter Neuling im Bereich Arduino und Co. Ich hangele mich derzeit von Forum zu Forum und kleine, einfach Programme zum laufen zu bekommen. Ich habe aber ein Problem, dass mich seit Freitag Abend beschäftigt und ich keine vernünftige Lösung dazu finde. Wie kann ich Text, der länger als 16 Zeichen ist, durchscrollen lassen?
Bernd Albrecht
Unser französischer Freund fragt nach Unterschieden bei den Programm-Bibliotheken und wie man die tatsächliche I2C-Adresse eines Bauteils überprüft.
1. Der einzige Unterschied, den ich festgestellt habe, war bei der Initialisierung des Display-Objekts lcd. Wer bei lcd.init() eine Fehlermeldung erhält, sollte es mit lcd.begin() probieren.
2. Zur Überprüfung der I2C-Adresse benötigt man einen Micro Controller, auf dem die Programm-Bibliothek SoftwareSerial funktioniert, z.B. unseren Nano, sowie einen geeigneten Sketch, z.B. aus unserem Blog-Beitrag vom 5. Oktober 2020: https://www.az-delivery.de/en/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/ein-praktischer-und-kostengunstiger-i2c-scanner.
Notre ami français demande quelles sont les différences dans les bibliothèques de programmes et comment vérifier l’adresse I2C réelle d’une pièce.
1. La seule différence que j’ai remarquée était l’initialisation de l’objet d’affichage lcd. Si vous obtenez un message d’erreur avec lcd.init (), vous devriez essayer lcd.begin ().
2. Pour vérifier l’adresse I2C, vous avez besoin d’un microcontrôleur sur lequel fonctionne la bibliothèque de programmes SoftwareSerial, par ex. notre nano, ainsi qu’un croquis approprié, par ex. de notre article de blog du 5 octobre 2020: https://www.az-delivery.de/en/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/ein-praktischer-und-kostengunstiger-i2c-scanner.
Reitzer
Bonjour, merci pour votre partage!
Je démarre dans le “hobby” Arduino et il est difficile pour moi de savoir si toute les bibliothèques “LiquidCrystal_I2C.h” sont équivalentes (en fonction des auteurs) ou non, comment les choisir et ou les trouver…
D’autre part je ne suis pas sur de comprendre… L’adresse du LCD (ici 0×27) est un paramètre ‘physique’ du composant, je me trompe? si oui comment puis-je vérifier si l’adresse est effectivement correcte?
Merci a l’avance pour votre aide,
et bonne fête a vous aussi!