I2C Display zeigt keine Buchstaben an

Hallo,

Ich bin Schüler und schreibe für mein Abitur gerade eine Seminararbeit über die Stromspartechniken für den Arduino Uno.
Als Beispiel für die Anwendung von Stromspartechniken, möchte ich eine einfache Uhr bauen, die beim Betätigen eines Tasters die Uhrzeit anzeigt und sich den Rest der Zeit in einem Stromsparmodus befindet.

Allerdings habe ich ein Problem mit meinem 16x2 LCD Display, das ich für das Projekt nutze.
Dieses betreibe ich mit einem I2C Backpack von AZDelivery
(vgl. https://www.amazon.de/AZDelivery-Adapter-serielle-Schnittstelle-Display/dp/B078SVXZHN?th=1)

Mein Projekt sieht bisher folgendermaßen aus (siehe Anhang).

Als letztens mein Display samt I2C Modul ankam, wollte ich es mit einem ganz einfachen HelloWorld Sketch testen, da ich zuvor noch nie mit einem solchen Display gearbeitet habe.
Ich habe also eine <LiquidCrystal_I2C.h> Bibliothek heruntergeladen und folgenden Sketch auf meinen Arduino Uno geladen:

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

LiquidCrystal_I2C screen(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  //die Adresse habe ich vorher mit einem I2C Scanner ermittelt

void setup() {
  screen.begin(16,2); 
  screen.backlight();

}

void loop() {
  screen.setCursor(0,0); 
  screen.print("Test");

  delay(1000); 

}

Beim starten des Arduino leuchtet das LCD auf und die obere Reihe zeigt weiße Kästchen, aber keinen Text. (siehe Anhang)

Woran liegt das?

Danke schonmal für eure Antworten! :wink:

Hast du schon mal am Poti auf dem Backpack gedreht ?
Damit änderst du den Kontrast des LCD.
Und du solltest zwingend einen Beispielsketch aus der Library für deine Tests verwenden.

Hallo Dieter,

danke für die Antwort! :slight_smile:

Ja, das habe ich bereits probiert.
Dann zeigt das Display nicht einmal mehr die weißen Kästchen an.

Versuch mal

LiquidCrystal_I2C screen(0x27, 16, 2);

screen.begin(); statt screen.begin(16, 2);

Dann teste mal, ob dir der I2C-Scanner die richtige I2C-Adresse auswirft.

Und nicht immer einfach andere Libraries verwenden. Da verzettelst du dich noch mehr.

Nimm ein Beispiel aus deiner Lib.

herbalmickey:
Versuch mal

LiquidCrystal_I2C screen(0x27, 16, 2);

screen.begin(); statt screen.begin(16, 2);

Dann gibt die Konsole folgenden Error aus:

no matching function for call to 'LiquidCrystal_I2C::begin()'

b_geisb:
Dann gibt die Konsole folgenden Error aus:

no matching function for call to 'LiquidCrystal_I2C::begin()'

Ich hatte doch geschrieben, nicht einfach andere Libs nehmen. Deine Probleme werden nur größer.

HotSystems:
Ich hatte doch geschrieben, nicht einfach andere Libs nehmen. Deine Probleme werden nur größer.

Vielleicht stehe ich gerade auf dem Schlauch....aber muss ich bei einem I2C LCD nicht auf eine Drittanbieter-Bibliothek zurückgreifen?

b_geisb:
Vielleicht stehe ich gerade auf dem Schlauch....aber muss ich bei einem I2C LCD nicht auf eine Drittanbieter-Bibliothek zurückgreifen?

Bitte lies einfach, was wir/ich schreibe. Verwende das Beispiel aus der installierten Library.in deinem ersten Sketch.

Sobald du mehrere Libs mit gleichem Namen installierst, werden die Probleme größer.

Und hast du mal den I2C-Scanner verwendet ?

HotSystems:
Bitte lies einfach, was wir/ich schreibe. Verwende das Beispiel aus der installierten Library.in deinem ersten Sketch.

Sobald du mehrere Libs mit gleichem Namen installierst, werden die Probleme größer.

Wenn ich den Sketch aus der installierten Library verwende, dann blinkt das Display und zeigt nichts an.

Hier der Code:

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



#define BACKLIGHT_PIN     13

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

//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address


// 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);
}

HotSystems:
Und hast du mal den I2C-Scanner verwendet ?

Ja.
Hier das Ergebnis:

I2C Scanner
Scanning...
I2C device found at address 0x27 !
I2C device found at address 0x57 !
I2C device found at address 0x68 !
done

Ich verwende in meinem Projekt auch ein RTC DS3231 Modul.


Hier der Aufbau meines Projekts:

Dann poste mal den Hyperlink (zum anklicken) deiner Library.

Und externe Seiten sieht hier keiner gern an.

Also Bilder direkt im Forum posten.

HotSystems:
Dann poste mal den Hyperlink (zum anklicken) deiner Library.

Und externe Seiten sieht hier keiner gern an.

Also Bilder direkt im Forum posten.

Hier meine Library

Ok, diese Library verwende ich auch und funktioniert prima.

Du solltest nochmal 2 Pullup-Widersände am I2C-Bus anschließen.
Ich glaube zwar nicht, das dies dein Problem ist, aber besser ist.

Hast du mal alle Kabel geprüft auf Fehler oder Wackelkontakt.

Gerade gesehen:

Diese Zeile am Sketch-Anfang vermisse ich.

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD, I2C address

Und so sieht das Beispiel bei mir aus:

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



#define BACKLIGHT_PIN     13

//LiquidCrystal_I2C lcd(0x38);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x27, BACKLIGHT_PIN, POSITIVE);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD, I2C address

//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address


// 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);
}

HotSystems:
Gerade gesehen:

Diese Zeile am Sketch-Anfang vermisse ich.

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD, I2C address

Habe den Code angepasst, sodass er jetzt aussieht wie bei dir.
Leider ohne Erfolg. :frowning:

HotSystems:
Du solltest nochmal 2 Pullup-Widersände am I2C-Bus anschließen.
Ich glaube zwar nicht, das dies dein Problem ist, aber besser ist.

Nach dem Verbauen von 2 Pullup-Widerständen, leuchtet das Display jetzt dauerhaft.
Allerdings werden immer noch weiße Kästchen anstelle des programmierten Textes angezeigt.

HotSystems:
Hast du mal alle Kabel geprüft auf Fehler oder Wackelkontakt.

Habe gerade alle Kabel durch andere ersetzt. Leider hat auch das nichts geholfen.

Hallo,

Ich hab auch so ein Display, das funktioniert aus welchem Grund auch immer nicht mit einer lib (oder wars nur eine Zeile im Sketch) die aber bei anderen läuft.

Evtl. ist es auch nur ein Zeile die anders ist. Aber wie schon gesagt, nicht mehrere lib's auf einmal installieren.
Ich würde es mal mit dem Code versuchen und wenn das nicht funktioniert, mach ein backup der aktuelle lib(zip den Ordner, etc.) und lösch den ganzen Ordner aus dem arduino/libraries Verzeichnis. Dann kopiere die andere lib hinein und starte die IDE. Wenn das nicht funktioniert lösche den ganzen Ordner wieder!

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

// <set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27,16,2);  //<- Diese hier hab ich gemeint


void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("Hello, world!");
  lcd.setCursor(2,1);
  lcd.print("Ywrobot Arduino!");
   lcd.setCursor(0,2);
  lcd.print("Arduino LCM IIC 2004");
   lcd.setCursor(2,3);
  lcd.print("Power By Ec-yuan!");
}


void loop()
{
}

Ich häng die lib mal dran.

Grüße,
Donny

LiquidCrystal_I2C.zip (19.9 KB)

Ansonsten schaue Dir mal diese Seite an.
Und nicht vergessen: Aufräumen und die Beispiele der gerade getesteten Lib als Basis nehmen.

Gruß Tommy

b_geisb:
Nach dem Verbauen von 2 Pullup-Widerständen, leuchtet das Display jetzt dauerhaft.
Allerdings werden immer noch weiße Kästchen anstelle des programmierten Textes angezeigt.

Habe gerade alle Kabel durch andere ersetzt. Leider hat auch das nichts geholfen.

Da fehlt mir dann auch die Idee.
Zeig doch mal ein Foto deines Aufbaus.
Und wie sehen denn die Lötstellen am LCD zum Backpack aus ?