LCD per I2C am Uno betreiben

Hallo zusammen,

ich möchte an meinem Arduino UNO ein LCD betreiben und es per I2C ansprechen. Dazu habe ich einen "Konverter" gekauft, den ich bereits am LCD angeschlossen habe. Außerdem habe ich den "Konverter" auch am Arduino angeschlossen. Nun nutze ich den folgenden Code, um ein "Hallo-Welt"-Programm zu schreiben:

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

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);

void setup ()
{
    lcd.begin(16, 2);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("hallo");
    lcd.setCursor(0,1);
    lcd.print("welt");
}

void loop()
{ 
    lcd.setBacklight(HIGH);
    delay(1000);
    lcd.setBacklight(LOW);
    delay(1000);
}

Allerdings zeigt mein Display immer nur Kästchen in der ersten Zeile an (siehe angehangenes Foto). Ich habe schon am Poti für den Kontrast gedreht und die Verkabelung mehrmals geprüft: GND und VCC an GND 5V sowie SDA an A4 und SDL an A5.

Weder beim Kompilieren noch beim Hochladen bekomme ich Fehler, allerdings komme ich auch nach vielem Testen und Probieren nicht weiter. Habe ich vielleicht eine falsche Bibliothek heruntergeladen und importiert? Da habe ich nun so viel getestet, dass ich nicht mehr weiß, welche die richtige ist.

Hat jemand eine Idee, woran es bei mir liegen könnte?

PS: Orientiert habe ich mich am "Tutorial" von AZ-Delivery (klick), weil ich den "Konverter" auch dort gekauft habe. Das mit der Hintergrund-Beleuchtung benötige ich nicht, weil ich das später über einen Schalter statt dem Jumper machen möchte. Trotzdem habe ich es für den ersten Test vorerst drin gelassen.

Viele Grüße,
berryfox

Schritt 1:

  • suche einen I2C Scanner und schau zunächst ob du überhaupt die richtige I2C Adresse hast, wenn du die richtige Adresse aus dem I2C Scanner ausgelesen hast, melde dich wieder.

P.S.: der "Konverter" ist eigentlich ein I2C Portexpander...

Schau Dir mal diese Seite an. Es gibt leider mehrere LiquidCrystal_I2C-Libs, die nicht miteinander kompatibel sind.
Denke auch daran, erst die alte Lib deinstallieren/löschen und dann die neue installieren.

Gruß Tommy

Ein I2C Scan wäre auch nützlich um sicherzustellen, dass I2C funktioniert und
der Adapter auch an der erwarteten Adresse erscheint. :wink:

Ich wollte nicht nachplappern, war ein Versehen.

Hi

Zu den 'Klötzchen' - Die sind normal, so meldet sich das Display, wenn Es NICHT Initialisiert wurde.
Ganz klar: Du sprichst derzeit gar nicht mit Deinem Display.

MfG

PS: PullUPs an dem Adapter vorhanden?

@noiasca: Der Portexpander hat tatsächlich die Adresse 0x27, das sagt auch der I2C-Scanner. Was meinst du mit "genaues Bild"? Was genau soll auf dem Foto zu sehen sein?

@postmaster-ino: Ich weiß zwar was PullUps sind, aber was genau muss ich da noch tun?

Hi

Wenn Du die Adresse auslesen kannst, funktioniert der I²C-Bus, somit sind die Pull-UP Widerstände vorhanden (ziehen (pull) das Signal nach oben (up) - sind 4K7-Widerstände, Die jeweils SCL und SCA nach +5V 'ziehen', damit der Busteilnehmer (Adruino bzw. der Expander) Diese nach GND 'ziehen' können)

Oha - Das wusstest Du bereits - bleibt trotzdem :wink:

Versuche verschiedene Librarys - ggf. hast Du aber auch nur einen Zahlendreher im Aufruf der Lib - denke, die einzelnen Ziffern deuten die Reihenfolge der Daten und Steuerbits an.

Das Backlight, sofern Das Dein Display unterstützt, müsste blinken, wenn zumindest der BL-Pin stimmt.
Am Display selber müsste einer der Pins im Sekundentakt high/low schalten - wenn dieser Pin nicht der BL-Pin ist: Zahlendreher

MfG

@postmaster-ino: Ich habe schon verschiedene Libraries ausprobiert, auch von der Seite, die @Tommy56 gepostet hat. Ich denke mit "Zahlendreher" meinst du dies Zeile?

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);

Die Zeile habe ich leider einfach so aus den Tutorials übernommen, da ich keine Ahnung habe, wie genau die Zahlen zustande kommen? Wie kann ich prüfen, ob die Zahlen stimmen?

berryfox:
@postmaster-ino: Ich habe schon verschiedene Libraries ausprobiert, auch von der Seite, die @Tommy56 gepostet hat. Ich denke mit "Zahlendreher" meinst du dies Zeile?

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);

Die Zeile habe ich leider einfach so aus den Tutorials übernommen, da ich keine Ahnung habe, wie genau die Zahlen zustande kommen? Wie kann ich prüfen, ob die Zahlen stimmen?

Das mit dem Tutorial kann schon dein Fehler sein.
Du musst dann auch sicher sein, die richtige Library zu verwenden.

Du solltest zum Testen immer ein Beispiel der eingesetzten Library verwenden.

Auch sehe ich die zusätzliche Zeile "#include LCD.h" als überflüssig.

Hi

Siehe Dir ein Beispiel Deiner Library an, also Nichts, was Du irgendwo im Netz gefunden hast.
(Leider ?) kann Jeder Seine eigene Lib abkupfern, Die dann bei Ihm auch passt.
Netterweise gibt Er Diese dann der Allgemeinheit ab, damit Diese auch 'was zurück bekommt' - also eigentlich genau der Sinn, Der hinter Nehmen UND Geben steckt.
Und leider gibt es somit zig Librarys, Die halt nur auf spezieller Hardware laufen (ok, Das gilt wohl für so ziemlich Alle Lib's, wenn man bei Einigem aber auch ein großes Spektrum einstellen kann).

Der Expander ist 'richtig herum' aufgelötet? (wenn NEIN schrei aarrgg - die Zahlenreihe umdrehen, wenn der Expander 8 Bit hat, müsste Das funktionieren)

MfG

postmaster-ino:
Der Expander ist 'richtig herum' aufgelötet? (wenn NEIN schrei aarrgg - die Zahlenreihe umdrehen, wenn der Expander 8 Bit hat, müsste Das funktionieren)

Wenn ich mir das Bild vom TO ansehe, ist der I2C-Adapter elektrisch richtig aufgelötet, mechanissch würde ich sagen, auf der falschen Seite, weil so das Display schlecht zu montieren ist. Aber so sollte es funktionieren, wenn alle Lötstellen ok sind.

noiasca:
jein ... ich glaube zu wissen dass dieser Expander nicht 8 bit rausschickt ... wollte den mal für was anderes verwenden, irgend ein Bit hat gefehlt...

Das wurde hier kürzlich von ESspanol getestet. Da ist Bit 7 mit einem Pullup-Widerstand beschaltet, somit gibt er falsche Infos raus. Am Display ist er tatsächlich nur als 4-Bit angeschlossen.

Also die Lötstellen sehen alle gut aus, damit denke ich, die elektrische Verbindung passt. Dass er mechanisch anders herum befestigt ist wie vielleicht erwartet, ist so gewollt, sollte ja kein Problem sein. Elektrisch müsste er auf jeden Fall richtig herum angebracht sein.

Aus dem Ordner für die Libraries habe ich nun alles entfernt, was nicht zu LCD gehört (Zwei Time-Libraries sollten ja nicht stören.)

Anschließend habe ich den Code aus der Anleitung des Herstellers (klick) des Portexpanders in die IDE kopiert und die dort beschriebene Bibliothek installiert (Newliquidcrystal_1.3.5).

Ohne weiteres Zutun gibt es beim kompilieren und Hochladen keine Fehler, aber es passiert weiterhin nichts. Wenn ich zusätzlich noch die erwähnte Bibliothek einbinde, wird in der IDE folgender Block hinzugefügt:

#include <LiquidCrystal_SR3W.h>
#include <LiquidCrystal_SI2C.h>
#include <LiquidCrystal_SR2W.h>
#include <SoftI2CMaster.h>
#include <LiquidCrystal_SR1W.h>
#include <FastIO.h>
#include <LiquidCrystal_I2C_ByVac.h>
#include <I2CIO.h>
#include <LCD.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <SI2CIO.h>

Soll das so passieren? Nun werden beim kompilieren kilometerlange Fehlermeldungen ausgegeben.

Hi

4 Bit + 3 Steuer-Bits + BL würde ja zu 8Bit passen.
Der PullUp - hatte Mal gelesen, daß man diesen Expander auslesen kann (also als I/O nutzen kann), man aber zuvor für ein H-Pegel sorgen muß - war etwas komplizierter, an die Eingänge zu kommen, hatte Das auch nur überflogen.

Davon ab - könnte mir ja Mal eines meiner LCDs angucken - da sind. wundersamerweise, auch Diverse mit Expandern versehen :wink:

MfG

PS: Denke mir, daß die verschiedenen gleichartigen Librarys sich irgendwie gegenseitig in die Suppe spucken - wenn, Die einzeln durchtesten.

PPS: SCA und SCL vertauscht? (SCA=A4, SCL=A5)

HotSystems:
Das wurde hier kürzlich von ESspanol getestet. Da ist Bit 7 mit einem Pullup-Widerstand beschaltet, somit gibt er falsche Infos raus. Am Display ist er tatsächlich nur als 4-Bit angeschlossen.

Verstehe ich nicht ganz. Betrifft mich das bzw. ist das ein Problem für mich?

Beliebige Headerdateien einbinden ist nicht der Weg.
Nimm Dir das I2C-Beispiel aus der Lib. Das ist der einzig sinnvolle Weg.

Gruß Tommy

Tommy56:
Beliebige Headerdateien einbinden ist nicht der Weg.
Nimm Dir das I2C-Beispiel aus der Lib. Das ist der einzig sinnvolle Weg.

Gruß Tommy

GENAU DAS habe ich grad gemacht. Bibliothek "Newliquidcrystal_1.3.5" eingebunden, dann das Beispiel "HelloWorld_i2c" direkt in der IDE geöffnet. Adresse angepasst (vorher per Scanner nnichmal überprüft). Kompilieren und Hochladen ohne Fehler. Trotzdem nur weiße Kästchen in der ersten Zeile.

Habe ich doch ein anderes Problem? Ich denke, ich messe jetzt mal die Verbindung zwischen LCD und Portexpander durch.

Auch wenn ich das Beispiel der Seite Funduino mit der dort genutzten Library "NewliquidCrystal_1.3.4" nutze, komme ich nicht weiter.

Vielleicht liegt es wirklich an etwas völlig anderem?! Ich bin ratlos!

Es könnte auch was an den beiden Teilen defekt sein. Das können wir von Ferne nicht sehen.

Gruß Tommy

berryfox:
Verstehe ich nicht ganz. Betrifft mich das bzw. ist das ein Problem für mich?

Nein, das betrifft noiasca, den ich in dem Post auch zitierte.