Go Down

Topic: LCD 16x4 et décalage (Read 1 time) previous topic - next topic

tetardo

Bonjour,

J'ai branché mon lcd 16x4 et je rencontre un décalage sur les ligne 3 et 4.

AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAA
    AAAAAAAAAAAAAA

J'ai essayépar curiosité de déclarer un écran 5x4 et j'obtiens bien le bon nombre de caractères mais décalés

AAAAA
AAAAA
    AAAAA
    AAAAA

Avez vous une idée ?
Je vous remercie d'avance.

Bonjour

Avec le code utilisé pour afficher sa seras mieux.
Cordialement
Windows Certif MCSA. Electronicien.
Arduino Mega 2560.
68hc11F1, 68705U3, 68705P3.
Perl,Java,ABAP,VB,VBS,VBnet,Php,Asp,Css,C,C++,C#,MySql,S

tetardo


Le code est celui de l'exemple, setCursor.

Code: [Select]

// include the library code:
#include <LiquidCrystal.h>

// these constants won't change.  But you can change the size of
// your LCD using them:
const int numRows = 4;
const int numCols = 16;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(numCols,numRows);
}

void loop() {
  // loop from ASCII 'a' to ASCII 'z':
  for (int thisLetter = 'a'; thisLetter <= 'z'; thisLetter++) {
    // loop over the columns:
    for (int thisCol = 0; thisCol < numRows; thisCol++) {
      // loop over the rows:
      for (int thisRow = 0; thisRow < numCols; thisRow++) {
        // set the cursor position:
        lcd.setCursor(thisRow,thisCol);
        // print the letter:
        lcd.print(thisLetter, BYTE);
        delay(200);
      }
    }
  }
}


et le montage est celui ci:



Merci d'avance.


#3
Apr 18, 2011, 04:43 pm Last Edit: Apr 18, 2011, 04:45 pm by powerpack Reason: 1
Re bonjour

Moi j'ai u le méme probléme que toi sur un 4x40, et un 4x20, les ligne 3 et 4 etait décaler de 1 car !!!.
avec la libréry LiquidCrystal440.h
j'ai fait une soustraction de la position lcd.begin(numCols-x,numRows-y);
me demande pas commant mes sur le 4x40 sa marche.

a teste lcd.setCursor(numCols-thisRow,numRows-thisCol);.
ci joint un petit bout de mon code..
Code: [Select]

// ##################### DEBUT TRAITEMENT TRAJET ###### FINI ###########################

if (affichemenu==2)
   {
     displaytrajet();  // caractaire spécial
     lcd.setCursor(nColumns-39,0);  // col 5  row 3
     if (theure<10){lcd.print("0");} // HEURE
     lcd.print(theure);
     lcd.print(":");
     if (tminute<10){lcd.print("0");} // MINUTE
     lcd.print(tminute);
     lcd.print(":");
     if (tseconde<10){lcd.print("0");} // seconde
     lcd.print(tseconde);
     // ---------------------------------------- AFFICHE kilométre
     lcd.setCursor (nColumns-28,0);  // Cursor at column 2 row 4
     lcd.print(kilo,2);
     lcd.print(" Km ");
      //---------------------------------------- AFFICHE LE PEAGE
     lcd.setCursor (nColumns-39,1);
     lcd.print(peage);   // PRIX  
     lcd.setCursor(nColumns-32,1); // Cursor at column 10 row 1
     lcd.print("Peage");
      // --------------------------------------- AFFICHAGE DU PRIX DE L'ESECNCES
      lcd.setCursor(nColumns-39,2); // Cursor at column 10 row 1
      lcd.print(conso_escence);   // PRIX
      lcd.setCursor(nColumns-32,2); // Cursor at column 10 row 1
      lcd.print("Carbu.  ");
      lcd.print(litre,2); // affiche le nombre de litre consomer
      lcd.print(" L");
     // AFFICHE du prix total
     ///************************* conso_escence
     lcd.setCursor(nColumns-39,3); // Cursor at column 10 row 1
     lcd.print(prix_trajet,2);   // PRIX
     lcd.setCursor(nColumns-32,3); // Cursor at column 10 row 1
     lcd.print("Total");
     ///************************ affiche la moy
     lcd.setCursor(nColumns-24,3); // Cursor at column 10 row 1
     car_valueD=(litre/kilo)*100;  // calcule consomation moyenne pour 100km
     lcd.print("Moy ");
     lcd.print(car_valueD);
     lcd.print(" Li ");
   }
// ***************************FIN AFFICHAGE MODE TRAJET***************************

speut aider
cordialement

Windows Certif MCSA. Electronicien.
Arduino Mega 2560.
68hc11F1, 68705U3, 68705P3.
Perl,Java,ABAP,VB,VBS,VBnet,Php,Asp,Css,C,C++,C#,MySql,S

tetardo

Je test ça demain, je te remercie.
Je te tiens au courant.

tetardo

Effectivement, ça marche !

lcd.setCursor(-4, 2);

tu as une idée du prk ?

Merci encore !

bonsoir

J'ai ma petit idée du probléme la libaryLCD bug sur le départ de la 3 ligne et 4 ligne, aprés observation du code C de la libreryLCD, la seul parade ces de mettre en "-" . Aprés il faut changer du code C dans la libraryLCD.
écouter j'ai un trou de 2h00 demain au travail, je regarde sa plus en détail et je te post une solus.
Cordialement
Windows Certif MCSA. Electronicien.
Arduino Mega 2560.
68hc11F1, 68705U3, 68705P3.
Perl,Java,ABAP,VB,VBS,VBnet,Php,Asp,Css,C,C++,C#,MySql,S

Re Bonsoir

Bon aprés un bref tour sur la toile, le départ de la 3 lignes varie en fonction de frabricants en général
14 et 54 mes cela peut étre dif ché hitachi cela n'est pas les méme que motorola.
dou le bout de code a changer dans LiquidCrystal.cpp en fonction de la marche du LCD.
Pour toit essais (0x12 ou 0x16) et (0x52 ou 0x56).
Code: [Select]

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

Cordialement
Windows Certif MCSA. Electronicien.
Arduino Mega 2560.
68hc11F1, 68705U3, 68705P3.
Perl,Java,ABAP,VB,VBS,VBnet,Php,Asp,Css,C,C++,C#,MySql,S

tetardo

Je me suis bricolé un truc équivalent...
pas aussi propre que toi

Code: [Select]

void lcd_setCursor(int cols, int rows) {
  int new_cols = (rows >=2) ? cols-4 : cols;
  lcd.setCursor(new_cols, rows);
}


Merci pour ta modif ^^


tetardo


J'ai testé avec ta modification, et essayé les diverses combinaison (0x12 ou 0x16) et (0x52 ou 0x56).
Rien a faire, les lignes 3 et 4 sont décalées de 4 caractères.

sniff....

Merci.


Go Up