Afficheur LCD graphique.

Bonjour les Amis,
Disposant depuis “une éternité” un afficheur LCD graphique non utilisé, je serais assez séduit de le mettre en service … pour voir ce que ça donne.
Il s’agit d’un GDM12232A.
J’ai trouvé un programme Arduino qui le concerne, ainsi que la bibliothèque associée.
Donc, l’entreprise devrait s’avérer aisée.
Ben non, quand je demande au compilateur ce qu’il en pense, il se fâche orange et liste une kyrielle de lignes précisant que des “choses” ne sont pas déclarées.
Voici mon programme :

#include "wgascii.h"

#if defined(WGARDUINO_DBPINS)
/* 
 * This mode is not tested. And not implemented (see wg12232.cpp).
 * My Arduino Duemilanove has only 14 pins for digital output 
 * and first seven of them are PORTD of ATmega168/ATmega328p.
 * So I simply used PORTD as 8-bit parallel port. At least this is fast.
 */
#undef WGARDUINO_DBPINS 
#endif

/**
 * Arduino <--> WG12232 configuration structure.
 * Names for pins used from WG12232 datasheet.
 */
WgArduinoConf wg_arduino_conf = {
#if defined(WGARDUINO_DBPINS)
  0,					// int db0pin;
  1,					// int db1pin;
  2,					// int db2pin;
  3,					// int db3pin;
  4,					// int db4pin;
  5,					// int db5pin;
  6,					// int db6pin;
  7,					// int db7pin;
#else // WGARDUINO_DBPINS
  &PORTD,				// volatile uint8_t *dbPORT;
  &DDRD,				// volatile uint8_t *dbDDR;
  &PIND,				// volatile uint8_t *dbPIN;
  {					/* 
					 * PWM timers on pins of PORTD
					 * WGARDUINO_DBPINS_PWM_TIMERS defines number of timers
					 */
    { &TCCR2A, COM2B1 },		// PWM on pin 3
    { &TCCR0A, COM0B1 },		// PWM on pin 5 and 6
    { &TCCR0A, COM0A1 }
  },
#endif // WGARDUINO_DBPINS
  13,					// int a0pin;
  8,					// int rwPin;
  9,					// int ePin;
  10,					// int clPin;
  12,					// int cs1pin;
  11					// int cs2pin;
};

void setup()
{
    wglcd.setup();
}

void (*loop_pgm)() = loop_pgm_printAscii;	// Loop program function

/**
 * This program fills screen with white or black pixels.
 */
void loop_pgm_fillColumn()
{
  static uint8_t xn  = -1;			// X counter
  static uint8_t val = 0xFF;			// Data byte value (0 for black, 0xFF for white)
  if(++xn > 121) {
    xn = -1;
    val = val ? 0 : 0xFF;
    delay(500);
    wgascii.newLine();				// Switch to next loop program
    loop_pgm = loop_pgm_printAscii;
  }
  else {
    wglcd.fillColumn(xn, val);			// Fill column with data byte value
    delay(10);
  }
}

/**
 * This program prints hello 4 times, then prints ASCII table from 32 to 127.
 */
void loop_pgm_printAscii()
{
  for(uint8_t n = 0; n < 4; ++n) {
    wgascii.print("Hello! ");			// Print hello
    for(uint8_t sm = 0; sm <= n; ++sm)		// Print smiles
      wgascii.printChar(127);
    delay(250);
    wgascii.newLine();				// Print new line
  }
  for(uint8_t n = 32; n < 128; ++n) {		// Print ASCII table
    wgascii.printChar(n);
    delay(100);
  }
  delay(500);
  loop_pgm = loop_pgm_fillColumn;		// Switch to next loop program
}

void loop()
{
  loop_pgm();					// Call current loop program function
}

Aurriez-vous s’il vous plait une idée de ce qu’il lui fait défaut ?
Merci d’avance pour le temps que vous consacrerez à cette requête.

Bonjour,

C'est quoi les erreurs ?

nulentout:
Il s'agit d'un GDM12232A.
J'ai trouvé un programme Arduino qui le concerne, ainsi que la bibliothèque associée.

meme reponse que B@tto
log des erreurs
et lien vers le site où tu a recupéré le programme et la lib

Bonjour les copains,
Pour la liste des erreurs voici ce que j’obtiens à la compilation. (J’ai inversé les couleurs car tout ce noir me semble très incommode.


Par contre, désolé, mais je n’arrive plus à retrouver la source.

Bonjour,
Cela ressemble beaucoup a un manque de :

#include "Arduino.h"

J’ai ajouté cette déclaration, la liste d’erreurs ne change pas.

#include <Arduino.h>

Re,

B@tto:
#include <Arduino.h>

Je me suis pris les pieds dans le tapis

Pas grave ça. :slight_smile:

Bonjour,

nulentout:
Pas grave ça. :slight_smile:

Alors il fonctionne ton programme !

Ben non, je suis toujours bloqué.
Du coup, en attendant d'avoir une nouvelle piste sur ce post, j'expérimente en détails toutes les options de la librairie d'affichage sur LCD alphanumérique, ce sera toujours ça de fait.

Bah du coup il faut nous aider un peu pour qu’on puisse t’aider … Typiquement tes erreurs étaient dues à l’absence de #include <Arduino.h> dans le header de la librairie.

Par contre : pourquoi avoir pris cette librairie ? D’une part je ne trouve absolument rien sur elle, et d’autre part il y en a des bien plus connues pour ton type d’écran : http://playground.arduino.cc/uploads/Code/GLCD_Documentation.pdf

Bonjour,

B@tto:
Bah du coup il faut nous aider un peu pour qu’on puisse t’aider … Typiquement tes erreurs étaient dues à l’absence de #include <Arduino.h> dans le header de la librairie.

+1

B@tto:
Par contre : pourquoi avoir pris cette librairie ? D’une part je ne trouve absolument rien sur elle, et d’autre part il y en a des bien plus connues pour ton type d’écran : http://playground.arduino.cc/uploads/Code/GLCD_Documentation.pdf

Cette librairie fonctionne très bien, je l’ai testé avec UNO, MEGA et icareDuino (1284p dans l’environnement IDE Arduino + modifications de la librairie).
J’ai même un convertisseur bitmap simpliste sous tableur (libreOffice)
[edit] as-tu regardé cette discutions : http://forum.arduino.cc/index.php?topic=8143.0

Bonjour les copains, merci pour ces diverses interventions.
Je vais tenter de répondre point par point à vos questions :

Bah du coup il faut nous aider un peu pour qu'on puisse t'aider ... Typiquement tes erreurs étaient dues à l'absence de #include <Arduino.h> dans le header de la librairie.
Par contre : pourquoi avoir pris cette librairie ? D'une part je ne trouve absolument rien sur elle, et d'autre part il y en a des bien plus connues pour ton type d'écran : http://playground.arduino.cc/uploads/Code/GLCD_Documentation.pdf

Merci pour vos aides, c’est toujours appréciable.
Typiquement tes erreurs étaient dues à l’absence de #include <Arduino.h> dans le header de la librairie.
Que signifie « header » s’il vous plait ?
J’ai téléchargé Arduino.h, mais je n’ai qu’un seul fichier texte. Je ne suis pas certain de l’avoir correctement importée, car à la compilation j’ai une foule d’erreur « Java ».
Du reste j’ai deux questions à poser concernant les librairies :
A) Comment déclarer une bibliothèque de ce type ?
B) Comment supprimer une bibliothèque caduque ?

Par contre : pourquoi avoir pris cette librairie ? D'une part je ne trouve absolument rien sur elle, et d'autre part il y en a des bien plus connues …

Tout simplement que la notion de « bien plus connues » est relative. Je ne suis pas né avec une souris dans les main, et Internet est arrivé très tardivement dans ma vie. Je ne suis donc pas très dégourdi pour puiser sur la toile. Alors je prends ce que je trouve, c’est déjà bien si j’arrive à récupérer une bibliothèque correspondant au module que je cherche à tester.
Naturellement je vais tester les liens que vous me proposez.

as-tu regardé cette discutions : http://forum.arduino.cc/index.php?topic=8143.0

Oui, du reste le schéma qui s’y trouve m’a assuré que je branchais correctement mon module.
Bon, je vais tester avec la bibliothèque suggérée par B@tto et je vous tiens au courant.
Encore merci pour vos aides respectives.

Coucou les copains, J’ai un chti problème :
Quand je vais sur http://playground.arduino.cc/uploads/Code/GLCD_Documentation.pdf je ne trouve aucun lien pour charger la bibliothèque en question. Comment procéder SVP ?

nulentout:
Que signifie « header » s’il vous plait ?

Un programme à la compilation est normalement constitué d’un header (le .h) et d’un code source (.c en C et .cpp en C++). Pour la programmation dans l’IDE Arduino c’est masqué mais en arrière plan tout est repris à la compilation. D’ailleurs si tu explores les librairies, tu trouveras des .cpp et et des .h. Le header permet de déclarer les protoypes de fonction, les variables ainsi que la gestion des #include nécessaires à cette librairie. Donc pour qu’une librairie puisse utiliser des fonctions Arduino (digitalWrite(), analogRead() …) il faut qu’elle intègre les fonctions arduino ce qui ce fait à l’aide de #include <Arduino.h>

A noter que les .h et .cpp sont de bête fichiers texte.

Par ailleurs c’est une librairie qui fait partie du core Arduino, tu n’as rien à télécharger c’est déjà de le dossier /core de ton répertoire d’installation. C’est justement la différence entre les " " et les < > : " " ==> cherche dans le répertoire du projet < > ==> cherche dans des dossiers préalablement spécifiés au compilateur (/core et / librairies principalement)

nulentout:
J’ai téléchargé Arduino.h, mais je n’ai qu’un seul fichier texte. Je ne suis pas certain de l’avoir correctement importée, car à la compilation j’ai une foule d’erreur « Java ».

Arduino.h fait partie du core Arduino, tu n’as rien à télécharger c’est déjà de le dossier /core de ton répertoire d’installation. C’est justement la différence entre les " " et les < > : " " ==> cherche dans le répertoire du projet < > ==> cherche dans des dossiers préalablement spécifiés au compilateur (/core et / librairies principalement)

nulentout:
Du reste j’ai deux questions à poser concernant les librairies :
A) Comment déclarer une bibliothèque de ce type ?
B) Comment supprimer une bibliothèque caduque ?

A) C’est à dire ?
B) Caduque dans quel sens ? Logiquement le core on y touche jamais, il n’y a que le dossier /librairies avec lequel on “joue”. Dans ce cas il suffit de supprimer le dossier concerné et de relancer l’IDE (le listing des librairies disponibles se faisant à son lancement).

nulentout:
Tout simplement que la notion de « bien plus connues » est relative. Je ne suis pas né avec une souris dans les main, et Internet est arrivé très tardivement dans ma vie. Je ne suis donc pas très dégourdi pour puiser sur la toile. Alors je prends ce que je trouve, c’est déjà bien si j’arrive à récupérer une bibliothèque correspondant au module que je cherche à tester.

Disons qu’en tapant la ref de ton LCD + Arduino je suis tombé sur plein de choses, alors qu’en tapant le nom de ta librairie pour essayer de trouver ce qui n’allait pas dedans je n’ai absolu rien trouvé. Donc oui “connu” est relatif, m’enfin à ce niveau la tout est relatif alors et aucune vérité n’est possible :smiley:

Pour trouver une librairie deux solution :

  • taper son nom + Arduino sur google
  • taper le nom du header, ici GLCD.h

la deuxième solution nous amène directement sur le codegoogle des développeurs : http://code.google.com/p/glcd-arduino/source/browse/trunk/glcd/glcd.h?r=428

nulentout:
Coucou les copains, J'ai un chti problème :
Quand je vais sur Arduino Playground - HomePage je ne trouve aucun lien pour charger la bibliothèque en question. Comment procéder SVP ?

bonjour
http://code.google.com/p/glcd-arduino/downloads/list

Merci Artouste, je vais tester ce lien.

P.S : je viens de constater que deux Arduinautes m'on filé un Karma : MERCI et MERCI. :slight_smile:

Coucou les copains, je reviens pour exprimer mes résultats. Il ne sont pas fameux.
J'ai téléchargé la bibliothèque conseillée et branché mon afficheur conformément aux instructions qui sont jointes à la librairie. (Du moins je pense ne pas m'être trompé) Le seul branchement que je ne laisse plus branché en permanence, c'est le RESET, car c'est une sortie de l'afficheur, je ne veux pas la forcer à zéro si j'appui sur le bouton RESET d'Arduino.
J'ai testé deux programmes qui en principe doivent afficher des caractères alphabétiques.
Ben ... pas grand chose de concret. Naturellement j'ai poussé le contraste au maximum. J'obtiens un écran globalement "gris", c'est à dire très légèrement foncé. Quand j'approche la main et les doigts des fils du câblage, la ligne graphique du haut de l'afficheur devient noire. PI c'est tout.
Aurriez-vous une idée SVP ?
Vous êtes certains que cette librairie convient au GDM12232A ? Car dans la documentation il est fait référence au KS0108.

nulentout:
Le seul branchement que je ne laisse plus branché en permanence, c'est le RESET, car c'est une sortie de l'afficheur, je ne veux pas la forcer à zéro si j'appui sur le bouton RESET d'Arduino.

Je serais vraiment surpris que cette ligne soit une sortie.
J'ai regardé les doc du fabricant, il y a une ambiguïté dans celles-ci. Dans les synoptiques, la ligne est dessinée comme étant une entrée et dans les tableaux d'entrées/sorties elle est décrite comme une sortie.
Très franchement, dans tous les afficheurs que je connais la ligne reset est une entrée. Et je suis intimement persuadé que c'est le cas pour celui-là aussi. Dans le doute je te conseillerais de la piloter en intercalant une résistance de 470 ohms entre la commande et l'entrée de l'afficheur. Ainsi tu pourras voir si l'afficheur essaye de la forcer et si ce n'est pas le cas tu pourras vérifier si cela effectue bien un reset de l'afficheur et ne le rend pas un peu plus coopératif.