LCD 20x4 (von Saintsmart) über I2C ansteuern

Hallo,

ich habe von Saintsmart (Bezug über Amazon) dieses "SainSmart IIC/I2C/TWI Serial 2004 Character 20x4 LCD Display Modul Shield Für Arduino Mega2560 1280 Duemilanove R3 AVR ATMEL Robot" gekauft und an einen Arduino UNO-clone angeschlossen.

Läuft erstmal grundsätzlich.

Mein Problem: ich kann nur die ersten 2 Zeilen und davon je die ersten 16 Zeichen ansteuern, der Rest wird "verschluckt".

Hier der Testsketch:

//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

int x = 1;

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 20 chars and 4 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
  //lcd.begin(20,4);
  lcd.clear();
  lcd.backlight();
}


void loop()  // Print a message to the LCD.
{
  lcd.setCursor(3,0);
  lcd.print("Hello, world!   ");
  lcd.setCursor(2,1);
  lcd.print("robot ");
  lcd.print(x);
  x=x+1;
  lcd.setCursor(1,2);
  lcd.print("Ard");
  lcd.setCursor(2,3);
  lcd.print("Power By Ec-yuan!");
  delay(1000);
}

Im Anhang die verwendete (und gefixte -> flascher returnwert) library.

Kommentar rein oder raus in Zeile "lcd.beginn(20,4)" hat keinen Effekt.

Ist das Modul defekt, die Lib fehlerhaft, ich zu blöd (sehr wahrschienlich)?

IDE 1.6.6 läuft unter Windows 10.

LiquidCrystal_I2C.cpp (8.64 KB)

LiquidCrystal_I2C.h (3.35 KB)

Du solltest die Beispiele die der Library beigefügt sind, ausprobieren. Damit wird es funktinieren.
Oder eine andere Library verwenden.
Evt. ist die, die du verwendest nicht für das Display geeignet evtl. auch zu alt.

Meist ist es ein Library-Problem.

Und was meinst du mit "gefixter Library"?

larry_berlin:
Ist das Modul defekt, die Lib fehlerhaft, ich zu blöd (sehr wahrschienlich)?

Vielleicht fragst Du deswegen nochmal in einem Hellseher-Forum nach?!

Mein Tipp wäre: Du verwendest nicht die LiquidCrystal_I2C library, die SainSmart zu seinen Produkten empfiehlt und zum Download anbietet, sondern Du verwendest irgendeine andere LiquidCrystal_I2C Library mit demselben Namen, die für ein recht ähnliches, aber nicht 100% baugleiches Display geschrieben worden ist.

Wo hast Du denn Deine LiquidCrystal_I2C Library her?
Über einen von SainSmart verlinkten Download-Link heruntergeladen?

Erstmal danke das Ihr geantwortet habt.

Gefixte lib ist gemeint in der Sektion der *.ccp

#define printIIC(args) Wire.write(args)
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);
return 1;

habe ich in der letzten Zeile "return 0" in "return 1" geändert, sonst wird immer nur das erste Zeichen der lcd.print()-Funktion ausgegeben. Dies ist ein bekannter BUG als Ergebnis einer Internetsuche.

Zum Thema Bibiotheken:
Ich habe nicht die von Hersteller (Saintsmart) verlinkte verwendet, da diese gemäß Internetrecherche nicht funktioniert.
Habe nach langer Suche 3 Libs ausprobiert, und nur die beigefügte bringt überhaupt etwas aufs Display.
Selbst die viel gelobte neue "NewliquidCrystal_1.3.4.zip" von fmalpartida läuft nicht.

Du solltest dir immer die aktuellste lib von GitHub holen und nicht irgend eine und dann auch noch selber dran rumbasteln. Das funktioniert nie.

Hier noch ein Foto wie das Display mit dem Sketch aussieht.

larry_berlin:
Zum Thema Bibiotheken:
Ich habe nicht die von Hersteller (Saintsmart) verlinkte verwendet, da diese gemäß Internetrecherche nicht funktioniert.

Ah ja, verstehe.
Hauptsache, die "andere" und "gefixte" (was immer das heißt) Library funktioniert!

Im übrigen schreibt der Hersteller sich "Sainsmart", und der Buchstabe 't' kommt im Namen exakt einmal vor, und zwar als letzter Buchstabe des Herstellernamens.

Es sei denn, Du hast Dein Display von einem Heiligen ('saint') gekauft.

Einen "Sankt Schlau" kenne ich nicht als Heiligen.
Aber demnächst hat dieser hier seinen Namenstag: Saint Nicholas = Sankt Nikolaus.

  1. Versuch fürs Foto (bin noch neu hier).

larry_berlin:
2. Versuch fürs Foto (bin noch neu hier).

Ja, du musst noch viel lernen.

Nimm die aktuelle von GitHub und du wirst Erfolg haben.

Danke für den Tip.

Habe die aktuelle von GitHub genommen: GitHub - boutboutnico/LCD_I2C_lib: This a library to drive a LCD by I2C protocol.

Funktioniert im Gegensatz zu meiner verwendeten Lib leider überhaupt nicht (keine Anzeige auf dem LCD).

Habe den Verdacht ist ein Hardwareproblem mit der LCD, weil ich ja eine bestimmten Teil (2 Zeilen x16 Spalten) korrekt adressieren und beschreiben kann.

Du must auch die Konfiguration anpassen oder ein Beispiel aus der lib nehmen.
Dein Display ist bestimmt nicht kaputt.
Das falsche Beschreiben liegt an der falschen Lib.

Es gibt einige I2C LCD Libs. Die gibt es immer wieder mal Ärger.
Ich verwende die:
http://www.dfrobot.com/image/data/TOY0046/LiquidCrystal_I2Cv1-1.rar
Kann natürlich sein, dass die hier nicht geht

Dieses Problem ist sowieso seltsam, da die Kommunikation zum LCD selbst ja anscheinend geht. Nur die Größe passt nicht.

@HotSystem

Habe natürlich jedes mal ein Example aus der aktuell installierten Lib verwendet (und zuvor alten Libs weggesichert und IDE neu gestartet).

Und jetzt kommt der Witz, hab jetzt noch eine zweite Lib im Web gefunden, die genauso funktionert bzw. nicht funktioniert (nur 2 x 16 können angesteuert werden) wie eine andere.

Für mich verdichtet sich der Verdacht eines Hardwareproblems. Habe eine neue LCD-Anzeige (gleicher Hersteller) bestellt, wenn die da ist wird diese ausprobiert.

larry_berlin:
Für mich verdichtet sich der Verdacht eines Hardwareproblems.

Für mich verdichtet sich der Verdacht, dass Du keine Ahnung von der Hardware hast, die Du da ansteuerst.

Wenn Du beispielsweise eine eine Library gefunden hast, die zwei Zeilen a 20 Zeichen ansteuern kann, hast Du dann vielleicht mal folgendes ausprobiert:

1.) Gib in der ersten Zeile 40(!) Zeichen aus
2.) Gib in der zweiten Zeile 40(!) Zeichen aus

Je nach interner Speicherorganisation und Mängeln in der Library könnte dann möglicherweise das passieren:

  • die ersten 20 Zeichen aus Zeile 1 erscheinen in Zeile 1
  • die nächsten 20 Zeichen aus Zeile 1 erscheinen in Zeile 3
  • die ersten 20 Zeichen aus Zeile 2 erscheinen in Zeile 2
  • die nächsten 20 Zeichen aus Zeile 2 erscheinen in Zeile 4

Schon mal ausprobiert, ob es sich vielleicht so verhält?
Ggf. das LCD dazu per lcd.begin(20,4); oder lcd.begin(40,2); oder auch lcd.begin(20,2); initialisieren und die Kombinationen mal durchtesten. Wenn zwei Zeilen des Displays funktionieren, kann ich mir jedenfalls eher Mängel in der Library/Ansteuerung als Fehlerursache vorstellen als einen Hardwarefehler.

Und wohl auch nicht genug Erfahrung mit der IDE.
hast du die alte Lib rausgelöscht. Die muss unbedigt raus aus dem IDE Ordner.

HotSystems:
Und wohl auch nicht genug Erfahrung mit der IDE.
hast du die alte Lib rausgelöscht. Die muss unbedigt raus aus dem IDE Ordner.

Nicht genug Erfahrung mag ja sein und auch nicht verwunderlich, wenn man hier als Newbie auftaucht und nach Hilfe sucht.
Aber zu deiner Frage , ich hatte in Post #12 genau das beschrieben.

larry_berlin:
Nicht genug Erfahrung mag ja sein und auch nicht verwunderlich, wenn man hier als Newbie auftaucht und nach Hilfe sucht.
Aber zu deiner Frage , ich hatte in Post #12 genau das beschrieben.

Ja, ok, aber man kann in der Dokumentation zu den Libraries alles nachlesen. Auch dass die "alten" Libraries aus dem Ordner entfernt werden müssen, nicht nur weggesichert, wie du im Post #12 geschrieben hast.

So lange die "alten" Libs noch im Ordner stehen, greift die IDE darauf zu und dann bleiben die Probleme weiterhin bestehen.

HotSystems:
Ja, ok, aber man kann in der Dokumentation zu den Libraries alles nachlesen. Auch dass die "alten" Libraries aus dem Ordner entfernt werden müssen, nicht nur weggesichert, wie du im Post #12 geschrieben hast.

So lange die "alten" Libs noch im Ordner stehen, greift die IDE darauf zu und dann bleiben die Probleme weiterhin bestehen.

Sorry, da hab ich mich wohl verquer ausgedrückt mit "wegsichern", gemeint war ausschneiden und an einen anderen Speicherort bringen.

larry_berlin:
Sorry, da hab ich mich wohl verquer ausgedrückt mit "wegsichern", gemeint war ausschneiden und an einen anderen Speicherort bringen.

Ok, kann ja mal passieren.

Ich würde die ganze Schaltung mit dem Sketch nochmal überprüfen.

Ich habe zwar kein Display von Sainsmart, aber diverse andere 20x4 oder 16x2 hier und auch mit div. Libraries ausprobiert und noch keine gleichartigen Probleme gehabt.

So wie das bei dir auf dem Display aussieht, ist es sicher ein Library-Problem und in der Konfiguration auf 2 Zeilen 16 Zeichen begrenzt.

Evtl. solltest du die IDE V1.6.5 mal nehmen, von der 1.6.6 habe ich schon mehrfach gelesen, dass die Fehler macht. Ein Versuch ist es Wert.

Hallo zusammen

Habe deinen Code aus dem Post #1 ausprobiert (auf Leonardo und UNO IDE V1.0.6 Win 7) hat sofort

Probiere das einmal ändern

LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display

LiquidCrystal_I2C lcd(0x3F,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display

Gruß Martin