libairie LiquidCrystal et LCD dip 204 KS0073 (résolu)

bonjour,

j'ai en ma possession un afficheur lcd 4x20 dip 204

j'utilise la libairie LiquidCrystal

j'arrive a afficher quelques truc mais le problème est que l'afficheur ne se comporte pas comme je le veux

si par exemple je met
lcd.setCursor(0, 0);
lcd.print("bonjour tous le monde");

il affiche sur la 1ere ligne bonjour tous le mond

jusque la tout est normal

mais sur la 2 eme ligne il affiche " le monde"

si je met lcd.setCursor(0, 1);
lcd.print("TOTO");

"TOTO" sera affiché sur la 3eme ligne

enfin même si il n'y a pas débordement sur la première ligne, "TOTO" sera affiché sur la 3eme ligne

y a-t-il un librairie compatible avec ce type d'afficheur ?

en gros le probleme ressemble a ceci

A tu bien paramétrer les paramètres se ton LCD lcd.begin(20, 4);

bah la librairie n'est pas totalement compatible avec cet afficheur

j'ai tout de même réussi a comprendre ce qui n'allais pas

dans le datasheet du ks0073 il y figure

extended Function Set

FW=0: 5-dot font width; FW=1: 6-dot font width
BW=0: normal cursor; BW=1: inverting cursor
NW=0: 1- or 2-line (see N); NW=1: 4-line display

soit pour mon cas 0x09h

cette fonction n'est pas appelée par la librairie pour pouvoir passer en 4 lignes

j'ai fini par essayer de passer cette commande en implémentant la librairie

dans le fichier h

#define LCD_ENTRYXTMODESET 0x09 // modif KS0073

puis dans le fichier cpp

delayMicroseconds(4500);  
	  command(LCD_ENTRYXTMODESET | _displayfunction);

et modification de

void LiquidCrystal::setCursor(uint8_t col, uint8_t row)
{
 // int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
 int row_offsets[] = { 0x00, 0x20, 0x40, 0x60 };
  if ( row >= _numlines ) {
    row = _numlines-1;    // we count rows starting w/0
  }
  
  command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}

donc du coup sa marche impeccable !