I. Généralités

Les afficheurs LCD sont devenues incontournables dans toutes applications qui demandent la visualisation de paramètres, il s' agit donc d'une interface Homme/Machine. Auparavant onéreux et difficiles à mettre en œuvre, ils sont maintenant bon marchés et l'interface parallèle au standard Hitachi permet un pilotage facile.

On rencontre aussi de plus en plus d'afficheur pilotable avec un port série ou I2C.

Les afficheurs LCD se ressemblent tous, à part le nombre de lignes et le nombre de colonnes, le fonctionnement et le brochage est standard et  identique. Un des points intéressant est de pouvoir contrôler l'afficheur en mode 8bits ou en mode 4bits.

II. Le brochage



L'afficheur LCD a 14 broches en standard et souvent 16, les broches 15 et 16 servent au rétro-éclairage (une option).

Broche

Nom

Description

1

Vss

Masse

2

Vdd

Alimentation 5v

3

CO

Variables de 0 à 5v permet de modifier le contraste de l'afficheur

4

RS

Indique une commande ou une donnée à afficher (0: Commande / 1: Donnée)

5

R/W

Indique une écriture ou une lecture (0: Écriture / 1: Lecture)

6

E

Indique une validation (Le niveau Haut doit être maintenu 500µs)

7

D0

Bus de données bidirectionnel.

8

D1

9

D2

10

D3

11

D4

12

D5

13

D6

14

D7

15

A

Anode rétroéclairage (+5V)

16

K

Cathode rétroéclairage (masse)

III. Le fonctionnement

On envoie deux types d'information à l'afficheur :

 

L'entrée RS permet de spécifier si on envoie une commande ou une donnée :

 

L'afficheur dispose d'une entrée R/W pour spécifier une lecture ou une écriture :

 

Pour valider tous les échanges sur le bus de données (D7-D0) on utilise l'entrée E de l'afficheur. Un front descendant sur cette entrée valide la donnée. En programmation, il faudra placer un court instant E à l'état haut puis à l'état bas.

 

Il est possible d'utiliser l'afficheur LCD en mode 8 bits normal ou en mode 4 bits pour économiser les broches de son µContrôleur par exemple, c'est assez pratique :

 

Mode 8 bits:

En mode 8 bits on place la donnée ou la commande sur le bus D7 à D0 et on valide avec E

 

Mode 4 bits:

En mode 4 bits on place déjà les poids forts de la donnée ou la commande sur les bits de D7 à D4 et on valide une première fois avec E. Puis on va mettre le poids faibles sur les bits de D7 à D4 et on valide une seconde fois avec E.

L'envoie ou la lecture d'un octet s'effectue donc en 2 temps dans ce mode

 

IV. Les mémoires

Les afficheur LCD possède 2 types de mémoires :

 

DD RAM ( Display Data RAM )

La DD RAM commence à l'adresse 0x00 et dans le cas d’un afficheur 16x2 lignes, elle termine à 0x4F. C'est une mémoire d'affichage dont l'adresse contient le caractère affiché à l'écran à une certaine position.

La première ligne commence en 0x00 jusqu'à 0x0F inclue.

La seconde ligne commence en 0x40 jusqu'en 0x4F inclue.

 

 

Exemple : on utilise un afficheur LCD pour visualiser la température d'une pièce (voir ci-dessous). Donner les adresses des 2 cases où devront être envoyés les chiffres de la température.

 

 

CG RAM ( Character generator RAM )

Cette mémoire stocke le code des caractères affichables (voir la table ci-dessous). Une partie de la CG RAM est modifiable à volonté par le développeur, les 8 premiers caractères. Si un caractère de la CG RAM qui est actuellement sur l'afficheur est changé, alors le changement est immédiatement apparent sur l’afficheur.

 

V. La table des caractères

 

 

VI. Le jeu de commandes

 

Instructions

Code

Description

Durée

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

Clear Display

0

0

0

0

0

0

0

0

0

1

Efface l'ensemble de la mémoire de donnée sans toucher au générateur de caractères. Ramène le curseur en position « home », à l'adresse 00.

1,64 ms

Return home

0

0

0

0

0

0

0

0

1

X

Ramène le curseur en position « home », à l'adresse 00. Si l'affichage était décalé, il est remis à sa position d'origine : l'adresse 00 se trouve à nouveau en haut à gauche.

1,64 ms

Entry mode set

0

0

0

0

0

0

0

1

I/D

S

Définit le sens de déplacement du curseur après l'apparition d'un caractère (vers la gauche si I/D=1, vers la droite si I/D=0) et si l'affichage accompagne le curseur dans son déplacement ou non (S).

40 µs

Display on/off control

0

0

0

0

0

0

1

D

C

B

Met l'affichage en ou hors fonction (D), le curseur (C), le clignotement du curseur (B).

40 µs

Cursor and display shift

0

0

0

0

0

1

S/C

R/L

X

X

Déplace le curseur (S/C=1) ou l'affichage (S/C=0) d'une position vers la gauche (R/L=1) ou la droite (R/L=0) sans changer la DD RAM.

40 µs

Function set

0

0

0

0

1

DL

N

F

X

X

Définit la taille de l'interface (DL=0 pour mode 4 bits, DL=1 pour mode 8 bits), le nombre de lignes (N=0 pour 1 ligne, N=1 pour 2 ou 4 lignes), et la taille des fontes (F=0 pour des caractères 5x7, F=1 pour des caractères 5x10).

40 µs

Set CG RAM address

0

0

0

1

A5

A4

A3

A2

A1

A0

Définit l'adresse de la CG RAM. Les données de la CG RAM sont envoyées après cette commande.

40 µs

Set DD RAM address

0

0

1

A6

A5

A4

A3

A2

A1

A0

Définit l'adresse de la DD RAM. Les données de la DD RAM sont envoyées après cette commande.

40 µs

Read busy flag & address

0

1

BF

A6

A5

A4

A3

A2

A1

A0

Lit le flag busy (BF), et l'adresse de la position du curseur. BF vaut 0 si l'afficheur accepte une instruction, 1 s'il est occupé

1 µs

Write data to CG or DD RAM

1

0

D7

D6

D5

D4

D3

D2

D1

D0

Écrit des données dans la DD RAM ou la CG RAM.

40 µs

Read data

1

1

D7

D6

D5

D4

D3

D2

D1

D0

Lit les données de la DD RAM ou de la CG RAM.

40 µs

 

Notes:

 

VII. L'initialisation de l’afficheur LCD

 

Mode 8bits

Étapes

D7

D6

D5

D4

D3

D2

D1

D0

Hexa

Description

1

0

0

1

1

0

0

0

0

0x30

Mot d'initialisation (il est conseillé d'attendre 5ms entre les mots d'init)

2

0

0

1

1

0

0

0

0

0x30

Mot d'initialisation (il est conseillé d'attendre 5ms entre les mots d'init)

3

0

0

1

1

0

0

0

0

0x30

Mot d'initialisation (il est conseillé d'attendre 5ms entre les mots d'init)

4

0

0

1

1

1

0

0

0

0x38

Paramétrage 8bits, + d'une ligne, police 5x7
(le bit busy est pris en charge a partir de cet instant !)

5

0

0

0

0

1

1

0

0

0x0C

Activation écran, pas de curseur, pas de clignotement

6

0

0

0

0

0

0

0

1

0x01

Effacement mémoire DD RAM donc effacement écran

7

0

0

0

0

0

1

1

0

0x06

Écriture de la gauche vers la droite sans activer le suivi de curseur

 

Mode 4bits

Étapes

D7

D6

D5

D4

Hexa

Description

1

0

0

1

1

0x3

0x3

Mot d'initialisation (il est conseillé d'attendre 5ms entre les mots d'init). Mot équivalent : 0x33

0

0

1

1

 

2

0

0

1

1

0x3

0x2

Mot d'initialisation (il est conseillé d'attendre 5ms entre les mots d'init)

0

0

1

0

Paramétrage 4bits(le bit busy est pris en charge a partir de cet instant !)

3

0

0

1

0

0x2

0x8

Paramétrage 4bits, + d'une ligne, police 5x7
envoyez en 2 temps

1

0

0

0

4

0

0

0

0

0x0

0xC

Activation écran, pas de curseur, pas de clignotement
envoyez en 2 temps

1

1

0

0

5

 

0

0

0

0

0x0

0x1

Effacement mémoire DD RAM donc effacement écran
envoyez en 2 temps

0

0

0

1

6

0

0

0

0

0x0

0x6

Écriture de la gauche vers la droite sans activer le suivi de curseur
envoyez en 2 temps

0

1

1

0

 

En mode 4 bits les 3 premiers mots d'initialisation ET la commande de paramétrage de l'interface sont envoyés comme si l'afficheur était en mode 8bits (en effet seuls les bits de poids fort sont significatifs) après ces 4 étapes l'afficheur fonctionne réellement en mode 4 bits, il faudra passer les commandes ou les données en 2 temps.

 

 

VIII. Exemples d'algorithme de programmation

 

 

L'afficheur LCD est souvent utilisé avec 4 bits de données afin de limiter le nombre de connexions. Comment alors lui envoyer des octets sur 4 bits ?

Le principe est le suivant : envoyer le quartet de poids fort, valider, envoyer le quartet de poids faible et valider. L'algorithme s'écrit :

 

début de la fonction envoiOctetSur4bits(byte octet)

 

envoyer bit4 de octet sur D4 // Ces 4 lignes peuvent s'écrire avec un « for »

envoyer bit5 de octet sur D5 // et l'instruction "bitRead(octet,n° bit)"

envoyer bit6 de octet sur D6

envoyer bit7 de octet sur D7

mise à 1 de E // validation

attendre 1ms

mise à 0 de E

attendre 1ms

 

envoyer bit0 de octet sur D4 // Ces 4 lignes peuvent s'écrire avec un « for »

envoyer bit1 de octet sur D5 // et l'instruction "bitRead(octet,n° bit)"

envoyer bit2 de octet sur D6

envoyer bit3 de octet sur D7

mise à 1 de E // validation

attendre 1ms

mise à 0 de E

attendre 1ms

fin de la fonction

 

 

 

début de la fonction envoiCommande(byte codeCommande)

mise à 0 de RS // RS = 0 pour l'envoi des commandes

envoiOctetSur4bits(codeCommande) // appel de envoiOctetSur4bits

fin

 

 

 

début de la fonction envoiCaractere(byte codeCaractere)

mise à 1 de RS // RS = 1 pour l'envoi des caractères à afficher

envoiOctetSur4bits(codeCaractere) // appel de envoiOctetSur4bits

fin

 

 Source : Lycée Le Dantec Lannion

Affichages : 13373