Problem mit LCD-I2C Display

Hallo,
habe ein LCD Display, welches ich über eine I2C Schnittstelle betreiben möchte. Anschluss: GND, +5V, SCL und SDA am Arduino Uno. Ans Display ist eine I2C Platine PCF8574 angelötet von C-Control.
Der I2C Scan identifiziert das Display unter der Nummer 0x20. Bis auf ein paar unklare Zeichen und einem blinkenden Curser am Ende der ersten Zeile sieht man auf dem Display nichts. Leuchten tut es.

Hier ist der Code:

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

#define I2C_ADDR 0x20 // <<----- Add your address here. Find it from I2C Scanner
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

int n = 1;

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
lcd.begin (16,2); // <<----- My LCD was 16x2

// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home

lcd.print("Hallo");
}

void loop()
{
// Backlight on/off every 3 seconds
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print(n++,DEC);
lcd.setBacklight(LOW); // Backlight off
delay(3000);
lcd.setBacklight(HIGH); // Backlight on
delay(3000);
}

Woran könnte denn das liegen, dass das Display nicht das ausgibt, was im Code steht? Liegt es am Code?
Villeicht kann jemand einen Sketch posten, den er schon probiert hat und der funktioniert.

Hallo, wenn du das Display über i2c ansprichst, brauchst du keine Pin´s weiteren mehr angeben.
versuch den mal:

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

LiquidCrystal_I2C lcd(0x20);  // Set the LCD I2C address

#define BACKLIGHT_PIN     13

// Creat a set of new characters
const uint8_t charBitmap[][8] = {
   { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
   { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
   { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
   { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
   { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
   { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
   { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
   { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }
   
};

void setup()
{
   int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));

  // Switch on the backlight
  pinMode ( BACKLIGHT_PIN, OUTPUT );
  digitalWrite ( BACKLIGHT_PIN, HIGH );
  
  lcd.begin(16,2);               // initialize the lcd 

   for ( int i = 0; i < charBitmapSize; i++ )
   {
      lcd.createChar ( i, (uint8_t *)charBitmap[i] );
   }

  lcd.home ();                   // go home
  lcd.print("Hello, ARDUINO ");  
  lcd.setCursor ( 0, 1 );        // go to the next line
  lcd.print (" FORUM - fm   ");
  delay ( 1000 );
}

void loop()
{
   lcd.home ();
   // Do a little animation by writing to the same location
   for ( int i = 0; i < 2; i++ )
   {
      for ( int j = 0; j < 16; j++ )
      {
         lcd.print (char(random(7)));
      }
      lcd.setCursor ( 0, 1 );
   }
   delay (200);
}

MfG Marco

http://garagelab.com/profiles/blogs/tutorial-lcd-using-only-2-arduino-pins-with-pcf8574-and-i2c

Grüße Uwe

Und wenn alles nichts hilft, nimm diesen hier (Adresse anpassen) :smiley:

// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

Das Display alle diese Sketches probiert, das Display zeigt nichts bzw. komische Zeichen an, es leuchtet nur :frowning:
Habe diese Library hier runtergeladen:
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
Kann das an der Bibliothek liegen?

Bei mir geht diese Lib:
http://www.dfrobot.com/wiki/index.php/I2C/TWI_LCD1602_Module_(SKU:_TOY0046)
www.dfrobot.com/image/data/TOY0046/LiquidCrystal_I2Cv1-1.rar

Da muss man wirklich nur dir Adresse einstellen und keine sonstigen Pins:

LiquidCrystal_I2C lcd(0x27, 16, 2);

void loop()
{
     lcd.init();
     lcd.backlight();
     lcd.home();   
}

Kann das sein, dass es noch eine extra Library für PCF8574 installiert werden soll?
Auch Jumper umstecken hilft nichts.

Nein. Der PCF8574 wird über die Wire Lib angesprochen.

Versuch mal mit I2C Skanner Sketch die Adresse des PCF8574 herauszubekommen. So siehst Du ob er über I2C angesprochen wird.

Grüße Uwe

Der Code funktioniert nicht, mit der Bibliothek stimmt was nicht. .
C:\Program Files (x86)\Arduino\libraries\Wire/utility/twi.h: In function 'void scanI2CBus(byte, byte, void ()(byte, byte))':
C:\Program Files (x86)\Arduino\libraries\Wire/utility/twi.h:44: error: too few arguments to function 'uint8_t twi_writeTo(uint8_t, uint8_t
, uint8_t, uint8_t, uint8_t)'
sketch_jan19a:17: error: at this point in file

Hatte mit dem Scanner von der Arduino Seite das schon gemacht. Wenn alle Jumper gesteckt sind, hat das Display die Adresse 0x20.

Die Lib ist schon in Ordnung.
Poste doch mal ein Foto von Deinem LCD und den Anschlüssen - frage mich nämlich die ganze Zeit, was Du für Jumper meinst

Also die Jumper sind auf dem PCF8574 drauf. Es sind 3 Adressierungsjumper und PullUps Jumper

Oha, die Fotos sind ziemlich unscharf....werden denn beim Einschalten des LCD noch nicht einmal in Zeile 1 und 3 schwarze Balken angezeigt ? (wenn es ein 4x20 ist, bei 2x16 natürlich nur in der 1. Zeile).
Bevor dass nicht der Fall ist ist das Teil nicht korrekt angeschlossen.

Vielleicht hast Du noch die Bezeichnung und Typ des LCD (evtl. link zum Datenblatt) sowie nähere Infos über den Shield der da beinahe zu sehen ist ?

Sorry, ich versuch es noch mal. Jetzt kannman mehr erkennen.
Könnte es sein, dass die Pullups mit 10 kOhm u hoch sind? Habe bisher immer von 2 kOhm gehört

Das Display auch noch.

Blöde Frage aber bevor es wirklich daran liegt und keiner gefragt hat:
Hintergrundbeleuchtung ja, Zeichen Nein?
Passt denn die kontrasteinstellung?

Grus

Blöde Frage aber bevor es wirklich daran liegt und keiner gefragt hat:
Hintergrundbeleuchtung ja, Zeichen Nein?
Passt denn die kontrasteinstellung?

Gar nicht, wäre jetzt meine Nächste gewesen - denn von Poti und schwarzen Balken hat er ja noch nichts gesagt :wink:

Ansonsten sieht die Hardware erstmal OK aus, obwohl ich dieses I2C Display Shield nicht kenne.
A4 und A5 sind ja wohl SDA/SCL, da wirds beim Anschluss keine Probleme geben.

"Sorgen" machen mir das da Shield mit seinen jede_menge_Möglichkeiten zum Jumpern, Verkabeln usw...

Das LCD sieht auch gut aus (ist ein 2x 16), zumindest sind die richtigen Pins verbunden (WENN es denn eine Standardbelegung UND einen HD44780-kompatiblen Chip drauf hat) - von daher wäre genauer Typ und Bezeichnung (evtl. mit Datenblatt) ebenfalls sinnvoll.

Wo haste denn die PullUps connected ?
Ist die Beleuchtung LED ? Die scheint ja hell genug zu sein und zu funktionieren....

Und wenn das da auf dem Shield ein Poti ist: haste da schon mal dran gedreht ? 8)

Am Poti drehen hilft auch nichts. Die Balken kommen, wenn das Poti am Anschlag ist.
Auf Seite 24 ist ein Datenblatt dazu.

198330-an-01-de-I2C_LC_Display_Modul.pdf (838 KB)

Na, das ist doch schon mal was. :smiley:
Dann lass das Poti mal so stehen dass der schwarze Balken zu sehen ist....und dann nochmal versuchen :fearful:

Also das ist abhängig von der Bibliothek, ob die Baklen kommen. Manchmal sind die zu sehen, manchmal nicht.
Aber mehr als Balken ist nie zu sehen.