Problème d'affichage - écran LCD 1602 I2C

Hello tout le monde :slight_smile:

Alors voilà, je suis un petit nouveau et j’ai voulu me lancer dans le monde de l’Arduino… Cependant j’ai un problème, impossible de faire fonctionner un écran LCD.

Ecran 16x02 + module I2C, raccordé à mon Uno R3 (+5V, GND, SDA sur A4 et SCL sur A5).
Bon l’écran branché s’allume. Avec un scanner I2C, il est bien détecté et est bien à l’adresse 0x27.

En revanche, j’ai beau essayer tous les codes que je trouve sur le net, avec plusieurs librairies (LiquidCrystal I2C, LiquidTWI…) il n’y a rien à faire : la première ligne de l’écran est remplie de carrés blancs, la deuxième est vide. Le contraste est correctement réglé.

Ce sont des codes de ce genre que j’essaie :

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

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()
{
lcd.begin (16,2); // for 16 x 2 LCD module
lcd.home (); // set cursor to 0,0
lcd.setBacklight(HIGH);
lcd.print(“test1”);
lcd.setCursor (0,1);
lcd.print(“test2”);
}

Pourtant tout compile correctement, les bibliothèques sont sur mon ordinateur, et l’adresse est bonne… Franchement je n’y comprends rien ! Si quelqu’un a un début de solution…

Merci d’avance :smiley:

Pour aller plus loin dans le diagnostic :

Ton système est en réalité un empilement de couches matérielles :
arduino
pcf8574
controleur LCD HD44780

L'arduino dialogue avec le PCF8574 via le bus I2C
Le PCF8574 a 8 sorties numériques, elles-mêmes reliées aux entrées du contrôleur HD44780

Les entrées du HD44780 sont les bornes soudées visibles en haut de ta photo.

Un LCD I2C est juste un LCD normal auquel on a ajouté un PCF8574 en guise d'interface I2C.

Ce PCF8574 est très repérable sur le petit circuit imprimé qui a été ajouté derrière l'écran.

Il y a donc un mapping entre les sorties du PCF8574 et les entrées du HD44780.

Je te suggère de vérifier que le mapping physique correspond bien au mapping logique paramétré à l'intérieur de la librairie LCD_I2C utilisée.

Le mapping physique peut être vérifié (hors tension) avec un simple ohmmètre. Voir le datasheet du pcf8574 pour vérifier quelle broche correspond à quelle sortie.

Le mapping logique doit être visible dans le code source de la librairie.

Après, peut-être que le problème n'est pas là, mais comme tu sembles déjà avoir fait le tour des autres points à vérifier...

Hello, merci pour ton message !

Je n’ai pas de multimètre sous le coude… Mais j’ai téléchargé une librairie LiquidCrystal_i2c depuis le site du fabricant de mon module (écran + i2c) qui fonctionne à peu près, donc sans doute un problème de mapping logique !

Par contre, je dis “fonctionne à peu près” parce que print n’affiche que le premier caractère de la chaine… Bon, j’en ai marre d’essayer toutes les librairies possibles, j’ai contourné le problème avec une fonction à deux balles :

void lcdprint(String s) { for (int i=0 ; i<s.length(); i++)  lcd.print(s[i]); }

Comme ça on en parle plus, problème résolu :smiley:
Merci beaucoup, je ne pensais pas m’en sortir si vite !

A la rigueur tu peux zieuter à l’intérieur de la lib qui marche “presque” comment sont mappées les broche EN RS D4 D5 D6 D7.

Si elle est bien faite il y a de fortes chances que tu les trouves sous ce nom là dans des #define

Certaines lib LCDI2C qui marchent bien permettent d’instancier l’objet en donnant ce mapping (voir le contructeur dans le header), sinon cela peut être aussi juste des #define à modifier.

NB : pour ton problème d’affichage limité au premier caractère, la cause habituelle est l’utilisation de la méthode lcd.write() au lieu de la méthode lcd.print()

Bonjour,

J’ai un problème avec mon afficheur LCD I2C branché sur Arduino: Il s’allume mais n’affiche absolument rien tout le temps.
Pourtant j’ai bien réalisé le câblage qui est : VCC = broche 2 GND = broche 1 SDA = A5 et SCL = A4
Je tiens à préciser que il n’y a pas écrit les noms des différentes broches sur mon afficheur.
Voici le manuel d’utilisation pour cet afficheur : http://djynet.net/wp/wp-content/uploads/2012/03/DataSheet_afficheur_I2C.pdf

Pour le programme il y a beaucoup de possibilitées et j’ai presque tout essayé,

Pour le moment j’utilise celui-ci :

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

LiquidCrystal_I2C lcd(0x3B,16,2);

void setup()
{
// Initialise l’ecran LCD
lcd.init();

// Affiche un message
lcd.backlight();
lcd.print(“Hello, MCHobby!”);
}

void loop()
{
}

Pour ce qui est du 0x3B , j’ai réalisé un scan I2C pour trouver l’adresse et 3B est le résultat que le programme m’a donné.

Je suis ouvert à toute réponses.
Merci

Pourtant j'ai bien réalisé le câblage qui est : VCC = broche 2 GND = broche 1 SDA = A5 et SCL = A4

SDA=A4
SCL=A5

@+

hello

pourtant notre ami a passé le scan. lequel lui a donné 0x3B
il a du se tromper en écrivant le post.

C'est vrai. Peut-être le potentiomètre de réglage du contraste ?