Les afficheurs LCD

Introduction
Brochage
Un petit montage à réaliser
Utilisation

Introduction

Lorsqu’un montage doit communiquer avec un utilisateur humain, on utilise habituellement des interrupteurs et des boutons poussoirs avec des diodes électroluminescentes. Cette interface utilisateur est très rudimentaire mais suffit dans la plupart des cas. Même si les D.E.L. peuvent êtres regroupées pour former des afficheurs 7 segments, on ne peut guère faire mieux qu’afficher quelques chiffres, et ce avec une certaine complication du montage (et donc augmentation du coût !).

Mais avec l’avènement des micro contrôleurs, il devient possible de réaliser des montages informatisés avec une véritable gestion de l’information et des protocoles pour la communication de données. Il devient alors possible d’utiliser pour l’interface utilisateur des périphériques "évolués" comme des claviers matriciels ou encore des afficheurs à cristaux liquides (LCD).

C’est d’autant plus vrai que le prix de ces composants a considérablement baissé au cours de ces dernières années, en même temps que leur prise en main à été rendue plus aisée. Ainsi pour un coût total de 200 Francs on peut voir des montages comportant micro contrôleur, clavier et afficheur LCD.

Dans cette page je vais donc vous montrer comment utiliser les afficheurs LCD 2 * 16 caractères. Ce modèle d’afficheur est le plus répandu et est vendu entre 50 et 90 Francs. Je vous expliquerais les protocoles en détails, puis je décrirais un petit montage qui permet de commander l’afficheur LCD avec le port parallèle d’un compatible PC et un banal compilateur C++ ou QBasic. Il en suivra plusieurs exemples qui vous permettront d’expérimenter toutes les possibilités d’un tel afficheur.

Vous aurez donc toutes les clefs en main pour mettre des afficheurs dans vos montages, le reste n’étant plus qu’une question de programmation selon le micro contrôleur que vous utilisez.

Brochage

Ci-dessous vous pouvez voir le brochage d’un afficheur LCD. Selon le fabricant, un afficheur ne peut comporter que 14 broches, ce qui n’est absolument pas un problème puisque les broches 15 et 16 sont inutiles (N.C.)


Maintenant faisons une description rapide de la fonction de chaque broche :

Broche Fonction
1 GND Masse de l'alimentation
2 +5V Alimentation 5V
3 CO Réglage du contraste
4 RS 0 : Instuction
1 : Donnée
5 R/W 0 : Ecriture
1 : Lecture
6 EN Validation
7 D0 Données

Dans le cas de l'adressage
en 4 Bits, seuls les bits
D4...D7 sont utilisés.
Les bits D0...D3 ne sont
alors pas connectés.
8 D1
9 D2
10 D3
11 D4
12 D5
13 D6
14 D7

En observant le brochage de l’afficheur, on constate qu’il faut un minimum de 6 sorties pour le commander. En effet, si on utilise l’adressage sur 4 bits et que l’on se prive de la lecture dans l’afficheur (ce n’est pas nécessaire, donc on relie R/W à la masse), il nous faut commander les six broches EN, RS, D4, D5, D6, et D7.

Ce mode 4 bits est bien pratique quand on utilise un petit micro contrôleur où le nombre d’entrées/sorties est très limité. En contre partie, le mode 4 bit complique un petit peu le protocole de communication (logiciel) puisque qu’il faut passer la donnée 8 bits en deux fois (4 + 4 = 8 !). Ce passage s’effectue comme suit :

D7 = Bit Donnée 7
D6 = Bit Donnée 6
D5 = Bit Donnée 5
D4 = Bit Donnée 4

puis :

D7 = Bit Donnée 3
D6 = Bit Donnée 2
D5 = Bit Donnée 1
D4 = Bit Donnée 0

Notez qu’en mode 4 bits, les broches D0, D1, D2, D3 doivent rester « en l’air » (non connectées).

A l’inverse, si on utilise toutes les broches de l’afficheur il faut 11 sorties pour le commander. Mais cela n’apporte rien de plus; en mode 4 bits toutes les fonctionnalités sont disponibles.

Un petit montage à réaliser


Les exemples étant toujours plus parlants que des pages d’explications, nous allons passer à la pratique. Aussi je vous propose de réaliser un petit montage qui va relier l’afficheur LCD au port parallèle d’un P.C. Si vous avez peur d’endommager votre P.C., utilisez un vieux P.C. (un 286 suffit) ou bien servez-vous du bornier de mon interface II ! C’est d’ailleurs ce que j’ai fait pour les tests, avant de réaliser un petit boîtier où l’afficheur est directement connecté au port.

Voici donc le petit montage à réaliser :


Pour relier ce montage au port parallèle, vous pouvez utilisez un câble muni d’un connecteur DB25 qui se branchera directement derrière le P.C. ou bien utiliser une embase Centronics; votre montage se connectera au P.C. avec un banal câble pour imprimante.

Voici le brochage du connecteur DB25 :


Et celui du connecteur Centronics :


Les numéros des broches étant sérigraphiés sur ces connecteurs, aucune confusion n’est possible.

Voici quelques photos du montage reliant un afficheur LCD 2*16 au port parallèle :

On voit la fiche centronics, le commutateur 4/8 bits en blanc, le bouton marche/arrêt en rouge, et en noir un bouton reset qui coupe momentanément l'alimentation de l'afficheur.



L'afficheur est fixé sur une plaquette qui recoit également le potentiométre pour le réglage du contraste. Cette plaquette s'enfiche dans un connecteur encartable soudé sur l'autre plaquette.



Sur cette vue plongeante on remarque qu'une l'alimentation est intégrée au montage. Il suffit de raccorder sur les deux douilles bananes la sortie d'un bloc secteur ou le secondaire d'un transformateur.



Ne faites pas la même bétise que moi ! L'afficheur est à l'envers, il faut retourner le boîtier pour pouvoir le lire ;-)



Remarque concernant l’alimentation :

Vous pouvez utiliser une pile plate de 4,5 V ou bien le montage classique avec un 7805. Vu la faible consommation de l’afficheur, le 7805 n’aura pas besoin de dissipateur. Attention, il ne faut surtout pas alimenter l’afficheur en inverse (inversion de GND et +5V), il serai instantanément détruit :-(

Utilisation


Maintenant je vais vous expliquer le protocole à respecter pour écrire dans l’afficheur.

Avant toute chose, nous ne verrons que les opérations d'écriture dans l'afficheur. Il est en effet possible de lire des données stockées dans l'afficheur, mais cela n'a pas de grand intérêt, et ce n'est absolument pas indispensable. Donc la broche R/W sera reliée à la masse de l'alimentation (0V).

On distingue deux types d'envoi de signaux vers l'afficheur : les instructions, et les données. Pour demander à l'afficheur d'exécuter une instruction, la broche RS est mise à la masse et les broches D7 ... D0 définissent l'instruction à exécuter. Pour envoyer des données, la broche RS est mise à 1 (+5V), et on écrit tout simplement la donnée (qui est un octet) sur les broches D7 ... D0.

La broche EN sert à valider l'instruction ou la donnée. En fait voilà comment se déroule l'exécution d'une instruction :

- EN étant à 0, on présente sur les broches D7 ... D0 les niveaux correspondant à l'instruction à exécuter, RS est mis à 0
- EN est alors mis à 1 -> l'instruction est alors exécutée
- EN est remis à 0

L'écriture d'une donnée se déroule de manière similaire :

- EN étant à 0, on présente sur les broches D7 ... D0 les niveaux correspondant à la donnée à écrire, RS est mis à 1
- EN est alors mis à 1 -> la donnée est écrite
- EN est remis à 0

Dans le tableau qui suit vous pouvez voir les différentes instructions possibles et les niveaux correspondants requis sur les broches D7 ... D0. RS est bien sûr mis à 0. Dans le tableau, "1" signifie +5V, "0" signifie 0V, et "X" signifie indifférent; une autre lettre signifie que le bit concerné est un paramètre de l'instruction.

Instruction Niveaux
D7 D6 D5 D4 D3 D2 D1 D0
Function Set
D=1 mode 8 bits.
D=0 mode 4 bits.
0 0 1 D 1 0 X X
Entry Mode Set
S=0 Pas de scrolling.
S=1 Scrolling quand le
curseur atteinds un bord.
I=1 scrolling +.
I=0 scrolling -.
0 0 0 0 0 1 I S
Display Control
D=1/0 Affichage oui/non.
C=1/0 Curseur oui/non.
B=1 effacement du caractère
sous le curseur.
0 0 0 0 1 D C B
Clear Display
0 0 0 0 0 0 0 1
Return Home
0 0 0 0 0 0 1 X
Cursor / Scrolling
S=1 Scrolle l'affichage.
S=0 Déplace le curseur.
R=1 vers la droite.
R=0 vers la gauche.
0 0 0 1 S R X X
Set DD RAM adress
Affecte l'adresse A6...A0
au pointeur sur la DD RAM.
1 A6 A5 A4 A3 A2 A1 A0
Set CG RAM adress
Affecte l'adresse A5...A0
au pointeur sur la CG RAM.
0 1 A5 A4 A3 A2 A1 A0

Quelques explications :

La DD RAM est la mémoire qui stocke le texte affiché. Si une instruction d'adressage de la DD RAM est exécutée, la prochaine instruction d'écriture de données (RS=1, D7...D0 = donnée) écrira les données vers cette DD RAM. Le pointeur (c'est à dire l'adresse courante) de la DD RAM est alors incrémenté (+1).

A chaque caractère de l'afficheur corresponds une zone de la DD RAM repérée par un numéro, appelé adresse. Voici donc les adresses des 32 caractères d'un afficheur de deux lignes de 16 caractères :

1ère ligne 00
00
01
01
02
02
03
03
04
04
05
05
06
06
07
07
08
08
09
09
0A
10
0B
11
0C
12
0D
13
0E
14
0F
15
2ème ligne 40
64
41
65
42
66
43
67
44
68
45
69
46
70
47
71
48
72
49
73
4A
74
4B
75
4C
76
4D
77
4E
78
4F
79

Les nombres en rouge sont les adresses en notation hexadécimale et ceux en bleu ces mêmes adresses en notation décimale.

La CG RAM est une mémoire qui permet à l'utilisateur de définir ses propre caractères. Si une instruction d'adressage de la CG RAM est exécutée, la prochaine instruction d'écriture de données (RS=1, D7...D0 = donnée) écrira les données vers cette CG RAM. Le pointeur (c'est à dire l'adresse courante) de la CG RAM est incrémenté (+1).

La CG RAM permet de définir huits caractères personnalisés. Un caractère mesure 8 pixels de haut et 5 de large. Chaque caractére est codé sur huits octets, mais seuls les bits D4, D3, D2, D1 et D0 de chaque octet sont utilisés, comme un caractère ne fait que 5 pixels de large. Pour définir un caractère, on execute l'instruction Set CG RAM Adress pour préciser l'adresse du premier octet du caractère, puis on écrits ensuite les huit octets définissant le caractère.

Voici les adresses CG RAM des premiers octets de chacun des huit caractères personnalisés possibles :

Caractère
personnalisé n°
Adresse
CG RAM
1 00 / 0
2 08 / 8
3 10 / 16
4 18 / 24
5 20 / 32
6 28 / 40
7 30 / 48
8 38 / 56

Les nombres en rouge sont les adresses en notation hexadécimale et ceux en bleu ces mêmes adresses en notation décimale.

C'est bien de créer des caractères personnalisés, mais encore faut-il les afficher ! C'est très simple, le caractère perso n°1 corresponds au code ascii 0, le 2ème au code ascii 1, le 3ème au code ascii 2, et ainsi de suite.

En ce qui concerne l'initialisation de l'afficheur, il faut, après la mise sous tension, exécuter dans l'ordre les instructions :
- Function Set,
- Display Control,
- Entry Mode Set.

Je ne rentrerais pas plus dans les détails, nous allons tout de suite passer à la pratique; avec quelques lignes de codes vous verrez alors que la commande de l'afficheur est moins difficile qu'il n'y paraît.

Je vous propose donc quelque deux exemples d'utilsation en QBasic tout simples pour comprendre comment ça marche :

Télécharger la version 8 bits (2,06 ko)

Télécharger la version 4 bits (2,24 ko)

Ces deux codes sources contiennent de nombreux commentaires.

Notez que chaque exemple affiche la même chose sur l'afficheur. Comme cela, vous pourrez comparer les différentes méthodes. Je vous conseille de commencer par regarder une version 8 bits pour bien comprendre le protocole, puis regardez alors la version 4 bits, qui sera celle retenue dans la plupart des cas car n'utilisant que 6 broches.


Remarque : QBasic est fourni gratuitement avec MS-DOS et Windows. Pour éxecuter ce logiciel, tapez la commande MS-DOS "qbasic". Si vous ne l'avez pas, cherchez dans le répertoire F:/tools/OLDMSDOS du CD-ROM de Windows.

Après ces petits exemples simples, je vous propose un programme beaucoup plus élaboré pour commander l'afficheur connecté sur le port parallèle. Ce programme est un code source c++, contenant tout un panel de procédures qui rendent l'écriture sur l'afficheur aussi facile que l'écriture de texte sur l'écran avec printf ! Des explications figurent à la fin du fichier source sous forme de commentaires. Ce source c++ est un véritable programme cadre qui vous permettra de commencer toutes vos applications utilisant l'afficheur LCD connecté sur le port parallèle.

Cliquez ici pour télécharger ce programme cadre pour afficheur LCD.

Le programme cadre à été écrit avec le compilateur BORLAND Turbo C++ 1.01 U.S. qui est téléchargeable gratuitement sur le site www.borland.fr/download/compilateurs/ (tout en bas de la page).

Si un tel afficheur se destine à être utilisé dans un montage avec un micro contrôleur, vous pouvez très bien vous en servir comme périphérique supplémentaire pour votre P.C. Ce sera notamment utile si vous envisagez de fabriquer un lecteur MP3 embarqué pour voiture avec une carte mère de Pentium + carte son. Le moniteur ne pouvant pas être embarqué, l’afficheur L.C.D. le remplacera avantageusement.