Les écrans LCD alphanumériques

. Par : Jean-Luc. URL : https://www.locoduino.org/spip.php?article97

Les écrans LCD alphanumériques présentent une solution facile d’emploi et bon marché de doter votre projet d’une interface indépendante de votre PC. Nous allons voir dans cet article comment se présentent ces écrans. Nous ne parlerons que des ecrans supportés par les bibliothèques Arduino, c’est à dire ceux dont le composant de pilotage est un Hitachi HD44780 ou compatible.

Vu de l’extérieur, les écrans LCD alphanumériques sont essentiellement caractérisés par leur taille. Deux modèles se rencontrent très fréquemment et sont les meilleurs marché, celui ayant 2 lignes et 16 colonnes d’affichage et celui ayant 4 lignes et 20 colonnes d’affichage. Voici, ci-dessous, ces deux modèles :

Ecrans LCD alphanumériques
Ecrans LCD alphanumériques
Les deux types de LCD que vous rencontrerez le plus souvent. En haut le modèle 20 colonnes et 4 lignes et en bas le modèle 16 colonnes et 2 lignes. Comme on peut le voir, le marquage des broches n’est pas systématique. Le grand modèle se trouve aux alentours de 5€ et le petit à 2€.

Le connecteur du LCD

Ces deux écrans ont exactement la même connectique, c’est à dire un connecteur 16 broches situé en haut et à gauche de l’écran. Ce connecteur véhicule plusieurs signaux dont une partie forme un bus de communication parallèle 4 ou 8 bits selon la configuration choisie ainsi que les signaux permettant de contrôler la communication entre l’Arduino et l’écran. La figure ci-dessous donne la nomenclature des broches de ce connecteur.

PNG - 28.1 kio

Ces broches ont le rôle suivant :

NuméroNomRôle
1 GND Masse 0V
2 VDD Alimentation +5V
3 VE Tension de réglage du contraste
4 RS Sélection du registre donnée ou commande
5 RW Lecture ou écriture
6 EN Activation pour un transfert (enable)
7 DB0 Bit 0 de la donnée/commande
8 DB1 Bit 1 de la donnée/commande
9 DB2 Bit 2 de la donnée/commande
10 DB3 Bit 3 de la donnée/commande
11 DB4 Bit 4 de la donnée/commande
12 DB5 Bit 5 de la donnée/commande
13 DB6 Bit 6 de la donnée/commande
14 DB7 Bit 7 de la donnée/commande
15 LED+ Anode (+) du rétro-éclairage
16 LED- Cathode (-) du rétro-éclairage

La communication avec le LCD

Nous n’allons pas entrer dans les détails du protocole de communication [1] entre l’Arduino et le LCD mais voici une présentation rapide. Le LCD peut fonctionner en mode 4 bits ou en mode 8 bits. En mode 8 bits, les octets sont transférés sur les lignes DB0 à DB7. En mode 4 bits les octets sont transférés en deux fois sur les lignes DB4 à DB7. Le LCD dispose de 3 registres internes, le registre de données permettant entre autre l’envoi des codes des caractères à afficher, le registre de commande permettant d’envoyer des commandes d’effacement de l’écran, de positionnement du curseur, etc, et le registre d’état qui permet de consulter notamment la disponibilité du LCD pour recevoir des commandes ou des données. La sélection de l’un ou l’autre de ces registres est effectuée via les états, LOW ou HIGH, des lignes RS et RW. Une fois l’état de ces deux lignes établi, EN est placé à HIGH, la donnée ou la commande est placée sur les lignes DBx puis EN est placé à LOW.

Piloter directement un LCD est donc un processus relativement compliqué. Évidemment, comme c’est très souvent le cas avec l’Arduino, il existe des bibliothèques pour ça, ce qui permet de les utiliser aisément sans avoir à plonger dans la datasheet.

La connexion avec l’Arduino

Dans la grande majorité des cas, on préfèrera une communication sur 4 bits car une communication sur 8 bits consomme 10 ou 11 broches, ce qui, hormis sur un Mega ou un Due, laisse peut de broches libres. Avec une communication 4 bits, 6 à 7 broches sont nécessaires. Le choix des broches est libre.

RW or not RW

Cette broche peut être ou ne pas être employée. Son rôle est de permettre la consultation du registre de contrôle du LCD. En consultant le registre de contrôle, on sait si le LCD est disponible pour recevoir des commandes ou des données ou si il est occupé à dessiner des caractères sur l’écran. Si cette information manque, il faudra attendre un certain temps entre deux commandes ou données afin d’être sur que le LCD est disponible. L’envoi d’information au LCD est donc plus lent mais on économise une broche.

En mode 4 bits, les broches à connecter à l’Arduino sont donc RS, EN, DB4, DB5, DB6 et DB7 ainsi que, de façon optionnelle, RW.

Le réglage du contraste

La broche VE permet de régler le contraste. Il est nécessaire d’y connecter un potentiomètre de réglage, un 10kΩ par exemple, dont les broches externes sont connectées à l’alimentation (+5V) et à la masse (GND) et la broche centrale à VE. Il suffit ensuite de tourner ce potentiomètre dans tous les sens avec patience jusqu’à ce que le contraste soit correctement réglé.

Potentiomètre de réglage vertical.
Potentiomètre de réglage vertical.
Le réglage s’effectue au moyen d’un tournevis. Il existe également des modèles horizontaux.

Le rétro-éclairage

Le rétro-éclairage est assuré par des DEL. Il faut donc limiter le courant avec une résistance en série sur LED+ ou LED-. Sur certains modèles de module LCD, cette résistance est présente, sur d’autres elle ne l’est pas. La datasheet des LCD recommande de mettre une résistance serie d’une valeur comprise entre 50 et 100Ω. Ajouter une résistance de 56Ω en série ne nuira pas, vous aurez juste un rétro-éclairage un peu moins puissant et vous assurerez une meilleure durée de vie du rétro-éclairage.

Dans beaucoup d’exemple de câblage que vous trouverez sur Internet, cette résistance est omise. C’est une errreur à ne pas reproduire.

L’implantation montrée ci-dessous résume les différents branchements nécessaires pour piloter un LCD avec votre Arduino. Ce n’est qu’un exemple puisque n’importe quelles entrées/sorties numériques de l’Arduino peuvent être employée pour les broches RS, EN, RW, DB4, DB5, DB6 et DB7 du LCD.

Câblage d'un écran LCD sur un Arduino Uno
Câblage d’un écran LCD sur un Arduino Uno
Le potentiomètre de réglage du contraste est un modèle horizontal.

Quelle bibliothèque ?

Deux bibliothèques sont disponibles pour piloter un écran LCD en connexion directe : LiquidCrystal qui fait partie des bibliothèques standards et ne gère pas la broche RW bien qu’elle propose de la connecter [2] et LiquidCrystalFast qui gère, elle, la broche RW et n’offre qu’une connexion sur 4 bits. Comme son nom l’indique la seconde est plus rapide car elle n’utilise pas de temps d’attente en aveugle.

Le pilotage via le bus I2C

Il existe également de petits modules permettant d’interfacer un écran LCD avec un bus I2C. Cette solution peut être intéressante si vous manquez désespérément de broches sur l’Arduino pour votre projet puisqu’au lieu de monopoliser 6 à 7 broches, l’écran n’en utilisera plus que 2. Evidemment, la bibliothèque pour les piloter n’est pas la même. Il en existe même plusieurs selon le circuit intégré qui fait l’interface entre l’I2C et le bus parallèle de LCD.

Toutefois, le module que l’on rencontre le plus souvent est construit autour du PCF8574P de NXP, un circuit permettant d’augmenter le nombre d’entrées sorties numériques via l’I2C. La bibliothèque correspondante est LiquidCrystal_I2C.

Les bibliothèques évoquées ici feront l’objet d’un article séparé.

[1le lecteur intéressé pourra se référer à l’article Wikipedia du HD44780.

[2C’est toujours vrai dans la version 1.6 mais ça pourrait évoluer dans le futur.