Décalage de lignes sur LCD 16x4 i2C

Bonsoir à tous.
il y a quelque temps déjà j'ai rencontré un phénomène étrange en pilotant un LCD 20x4 et un autre en 16x4 en i2c par un Mega 2560 via la librairie LiquidCrystal_I2C.h
Le problème concerne les 2 afficheurs 4 lignes.
Aucun problème pour positionner le curseur en début de lignes 0 et 1
lcd1.setCursor(0,0);
lcd1.setCursor(0,1);
Par contre si j'écris lcd1.setCursor(0,2) à la 3ème ligne, le curseur se positionne au 4ème caractère, idem pour la ligne suivante.
A l'époque j'ai feinté et positionnant le curseur en début de lignes 2 et 3 par
lcd1.setCursor(-4,2) ou
lcd1.setCursor(-4,3)
Je n'ai pas cherché plus loin mais aujourd'hui je rencontre le même problème avec un LCD 16x4 toujours en i2c et couplé cette fois à un 16x2 mais conduits par un ESP32.
La même feinte a fonctionné, mais comme je rencontre d'autres soucis sur cet afficheur (et pas sur son collègue 16x2), je pose ici la question.
L'autre souci n'a probablement pas de rapport avec ce phénomène. Il s'agit d'un brouillage total de l'afficheur récurrent (plusieurs fois par jour) qui impose un reset de l'ESP, ce qui m'irrite car il est alimenté en mixe (secteur + batterie) pour conserver des données de Log sur qq jours.
Le second afficheur ne pose aucun problème, pas plus que le module ADS1115 d'acquisition de valeurs analogiques, sur le même "bus" i2c.
Les 2 afficheurs sont situés à la même distance de l'ESP (environ 300mm), tout comme l'ADS1115.
Quelqu'un aurait il un début d'explication ?

Essayez de mettre une résistance de pullup (4,7k) sur les 2 lignes I2C

Bonjour jackjean

Pourrais tu mettre ton programme en ligne?

Cordialement
jpbbricole

@J-M-L
Cette précaution a toujours été prise chez moi pour toute application I2C.

@jpbbricole
Pas compliqué, n'importe quel exemple pioché dans la librairie LiquidCrystal_I2C.h fait apparaître le problème. Comme celui-ci :

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

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

void setup()
{
  lcd.init();          
  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()
{
}

Les lignes 2 et 3 (donc 3ème et 4ème) sont décalées vers la droite de 4 caractères, et donc tronquées en final à 4 caractères de la fin.

ça sent le composant défaillant...

Bonsoir jackjean

Je te montre le résultat sur mon affichage

Fait sur un UNO et cette bibliothèque.

Cordialement
jpbbricole

chez moi le problème apparaît systématiquement, soit sur Mega 2560, soit sur ESP32, un ou plusieurs afficheurs sur la ligne i2c...
Par contre, les problèmes de brouillage intempestif ne sont pas liés à ce phénomène. Je suis en train de vérifier le niveau de pollution et de stabilité du 5V.

Les afficheurs ont tous été achetés en même temps ? (Lot défectueux. Certains vendeurs peu scrupuleux vont acheter des composants déclassés Pour fabriquer leurs produits)

Bonjour jackjean

Quelle est la source exacte de la bibliothèque LiquidCrystal_I2C.h?
J'utilise celle-ci.

Cordialement
jpbbricole

@J-M-L
Ni en même temps, ni au même vendeur, avec environ un an d'écart.

@jpbbricole
Bonjour,
C'est exacement la bibliothèque que j'ai utilisé dans les 2 cas.

OK je n'ai jamais eu ce souci, j'ai au moins une dizaine de petits LCD de 1, 2 ou 4 lignes...

Bonjour,

Question bête, mais la ligne

est bien adaptée en

pour passer d'un LCD 4x20 à un LCD 4X16 ?

Ça expliquerait le décalage de 4 caractères sur les lignes 3 et 4.

Charlot.

j'ai le problème sur 2 afficheurs 4 lignes : un de 16 colonnes et un de 20.
Pas de crainte, j'ai extrait ce code de deux programmes qui correspondaient bien chacun au bon afficheur...
De plus en imaginant s'être trompé, les lignes seraient tronquées à la fin, pas au début.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.