Commande d'un afficheur LCD MOP-AL162A-BBTW: LCD 2x16

01/04/2012: Si vous êtes intéressé par mon article sur "MOP-AL162A-BBTW: LCD 2x16", vous devriez prendre connaissance du "Shield LCD RGB - 2 pins - AFFICHAGE NEGATIF" disponible chez MC Hobby!
En plus de disposer d'un rétro-éclairage RGB, ce dernier est équipé d'une interface 5 boutons (un keypad) et fonctionne en utilisant seulement 2 broches de votre Arduino.

Présentation du  MOP-AL162A-BBTW: LCD 2x16
Antratek Electronik (fournisseur Arduino pour la Belgique) dispose de plusieurs LCD Display compatibles avec Arduino.
Parmi ces modèles, figure l'affichage "MOP-AL162A-BBTW: LCD 2x16 bleu" de Matrix Orbital. Il est disponible pour environ 15 Euro (tva incluse).
Source: Antratek Electronik

Un afficheur LCD est un périphérique d'affichage bon marché. Il est facile a interfacer avec Arduino car ce modèle contient son propre micro-contrôleur (la pastille noire à l'arrière) qui gère la logique d'affichage.
Ce micro-contrôleur est un Hitachi HD 44780 que l'on retrouve en standard sur beaucoup d'afficheurs.
Du fait de cette standardisation, beaucoup de plateforme micro-controleur dispose d'une librairie de développement toute prête. C'est également la cas d'Arduino avec la librairie LiquidCrystal.
Il est ainsi possible de commander l'afficheur à l'aide de quelques lignes de commande.

Avantages du MOP-AL162A-BBTW: LCD 2x16
Hormis l'utilisation de la librairie qui facilite grandement les développements, l'afficheur MOP-AL162A-BBTW dispose de deux autres avantages.

Premièrement, l'afficheur est capable d'utiliser 4 bits ou 8 bits pour le bus de donnée (transmet l'information de ce qu'il faut afficher à l'écran).
La version 4 bits est avantageuse car elle permet d'envoyer des données vers l'afficheur en n'utilisant que 4 pins d'Arduino au lieu de 8.
C'est autant de pins récupérées pour la commande d'autres periphériques :-)

Ensuite, la logique de commande (et la librairie) peut se contenter d'utiliser seulement 2 pins au lieu de 3 (en mettant la commande R/W à la masse).
Si l'on ne désire pas lire la mémoire de l'afficheur (donc ne faire que de l'affichage), cela ne cause absolument aucun problème et permet de gagner une pin de plus pour en faire une autre utilisation.

L'afficheur est donc entièrement commandable avec seulement 6 pins.
 
Montage
VAvant de commencer quoi que ce soit, il faut vous équiper d'un fer à souder et d'un pinHeader (16 élements, non fournit avec l'afficheur).
Cela permettra de brancher l'afficheur sur le breadboard.


Voici le plan de montage tel que décrit sur la fiche ARDX de Sparkfun.
Source: Ardx Guide
 Et la fiche de montage pour le breadboard.
Source: Ardx Guide
Si vous ne vous sentez pas en confiance pour faire ce montage, vous pouvez consulter l'article "Wiring up a character LCD to Arduino" sur LadyAda.net.
Il reprend le montage pas-à-pas mais en anglais :-/.

Le brochage et les spécifications de l'afficheur sont eux disponibles sur la DataSheet MOP-AL162A-BBTW: LCD 2x16 d'Orbital Matrix.
La pin n° 1 et n° 16 sont indiquée sur l'afficheur.

Source: Matrix Orbital Datasheet

Si rien ne s'affiche...
Contrairement à ce que l'on pourrait croire, ce n'est pas forcement à cause du programme si le LCD n'affiche rien.
Pensez à vérifier le réglage du contraste à l'aide du potentiomètre (plutôt positionné vers le 0 volts/masse pour un contraste maximum).
Si ce dernier est mal réglé (ou mal monté), il vous sera impossible de voir quoi que ce soit sur l'écran.
Le problème avec les réglages de contraste c'est qu'il n'est pas facile de s'apercevoir que c'est justement un problème de contraste!
Si après vérification cela ne fonctionne toujours pas, il faudra alors revérifier le reste du montage. 

Exemple simple
// Inclusion de la librairie
#include <LiquidCrystal.h>

// Dimension de l'afficheur
const int numRows = 2;
const int numCols = 16;

// Initialisation de la librarie avec le nbre de pins d'interface
// 4 bit de données dans notre cas.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  Serial.begin(9600);
  // Bouton changer thème
  pinMode( pinBtn, INPUT );
  btnState = LOW;
  
  // Indique le nombre de lignes et colonnes du LCD 
  lcd.begin(numCols,numRows);
  
  //--- Message de bienvenue -----
  lcd.print( "demo LCD" );
  // placer curseur sur ligne 2
  lcd.setCursor( 0, 1 ); // col, row
  lcd.print( "pressez bouton!" );
  // clignotement curseur plein
  lcd.blink();
}

Exemple plus complet
L'exemple basé sur le montage décrit-ci dessus propose de passer en revue les différentes fonctionnalités de la librairie LiquidCrystal.
Ces fonctionnalités sont affichées thème par thème (chaque thème tournant en boucle).
Il est possible de passer au thème suivant en utilisant un bouton Pull-down (pin 8) à presser après le thème (ou durant l'affichage du titre).

Source: LCD_Display.pde



Les exemples Arduino
Différents exemples sont également disponibles depuis l'IDE d'Arduino et sur le wiki de référence de LiquidCrystal.
Dans l'IDE, les exemples sont accessibles via le menu "Files | Examples | LiquidCrystal"

Ou acheter l'afficheur
En Belgique et Pays-Bas, je vous suggère de passer par le site d'Antratek Electronic (lien direct vers afficheur LCD). C'est un fournisseur sérieux.

Ressources