Meine ersten Gehversuche mit Arduino waren eher kläglich. Anscheinend habe ich mir eine nicht so ganz einfach Sache vorgenommen:
Der Uno sollte ein 4*20 HD44780 LCD über einen i2c Adapter ansprechen. Wie sich im Nachinein herausgestellt hat, gibt es wohl unterschiedliche Adapter, die dann auch unterschiedlich angesprochen werden.
Zuerst aber mal die Verdrahtung:
i2c Adapter | Arduino |
---|---|
GND | GND |
VCC | 5V |
SDA | A4 |
SCL | A5 |
Als Software wird folgendes benötigt:
- Arduino IDE (Version 1.6.4 )
- Liquid Crystal Library (Version 1.2.1)
WICHTIG: Die Liquid Crystal Library ersetzt die von Arduino vor installiert. d.h. im Ordner libraries der Arduinoinstallation muss zuerst der Ordner LiquidCrystal gelöscht werden. Anschließend wird der gleichnamige Ordner aus dem Liquid Crystal Library Paket dorthin kopiert. |
---|
Danach müssen wir zuerst einmal die Adresse des Displays herausfinden. Dazu können wir folgenden Code nutzen. Erklärungen dazu gibt es hier.
Mein kleiner Freund mit der “vielsagenden” Bezeichnung UC-146 hat anscheinend die “default” Adresse 0x27.
Anschließend kann man mit folgendem Code Text zum Display schicken:
#include <Wire.h> #include <LiquidCrystal_I2C.h> // define variables #define I2C_ADDR 0x27 // Set the pins on the I2C chip used for LCD connections: // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address // setup void setup() { lcd.begin(20,4); // initialize the lcd for 20 chars 4 lines and turn on backlight lcd.backlight(); // finish with backlight on } void loop() { lcd.setCursor(3,0); lcd.print("Hello, world!"); lcd.setCursor(0,1); lcd.print("--------------------"); lcd.setCursor(1,3); lcd.print("http://pcspinnt.de"); }
Der Code ist bewusst sehr simpel gehalten. Das eigentlich spannende ist diese Zeile:
LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
Hier erklärt die Doku der Liquid Crystal Library sehr gut, wofür diese Werte stehen:
Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD. Parameters: lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers. En[in] LCD En (Enable) pin connected to the IO extender module Rw[in] LCD Rw (Read/write) pin connected to the IO extender module Rs[in] LCD Rs (Reset) pin connected to the IO extender module d4[in] LCD data 0 pin map on IO extender module d5[in] LCD data 1 pin map on IO extender module d6[in] LCD data 2 pin map on IO extender module d7[in] LCD data 3 pin map on IO extender module
Die Pin Belegung des Displays dazu im Vergleich:
01 GND 02 +5V 03 Contrast 04 RS 05 RW 06 E 07 Data 0 08 Data 1 09 Data 2 10 Data 3 11 Data 4 12 Data 5 13 Data 6 14 Data 7 15 +5V 16 GND
Eine große Hilfe war diese Seite. Hier sind auch die verschiedenen i2c Adapter incl. entsprechendem Code erklärt.