Pages: [1]   Go Down
Author Topic: LCD 16x4 et décalage  (Read 1411 times)
0 Members and 1 Guest are viewing this topic.
Bretagne
Offline Offline
Jr. Member
**
Karma: 0
Posts: 80
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

bussy st george
Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour

Avec le code utilisé pour afficher sa seras mieux.
Cordialement
 
Logged

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

Bretagne
Offline Offline
Jr. Member
**
Karma: 0
Posts: 80
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Le code est celui de l'exemple, setCursor.

Code:
// 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.

Logged

bussy st george
Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
// ##################### 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

« Last Edit: April 18, 2011, 09:45:39 am by powerpack » Logged

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

Bretagne
Offline Offline
Jr. Member
**
Karma: 0
Posts: 80
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Bretagne
Offline Offline
Jr. Member
**
Karma: 0
Posts: 80
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Effectivement, ça marche !

 lcd.setCursor(-4, 2);

tu as une idée du prk ?

Merci encore !
Logged

bussy st george
Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
 
Logged

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

bussy st george
Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

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

Bretagne
Offline Offline
Jr. Member
**
Karma: 0
Posts: 80
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Merci pour ta modif ^^

Logged

Bretagne
Offline Offline
Jr. Member
**
Karma: 0
Posts: 80
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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.

Logged

Pages: [1]   Go Up
Jump to: