AFFICHEURS A CRISTAUX LIQUIDES
I) Généralités
a) Description
Les afficheurs à cristaux liquides sont des modules compacts intelligents et nécessitent peu de composants externes pour un bon fonctionnement. Ils sont relativement bons marchés et s'utilisent avec beaucoup de facilité.
Un exceptionnel microprocesseur "pilote" de la famille C-MOS diminue considérablement leur consommation (inférieur à 0.1 mW). Ils sont pratiquement les seuls à être utilisés sur les appareils à alimentation par piles.
Plusieurs afficheurs sont disponibles sur le marché et ne diffèrent les uns des autres, non seulement par leurs dimensions, (de 1 à 4 lignes de 6 à 80 caractères), mais aussi par leurs caractéristiques techniques et leurs tension de service. Certains sont dotés d'un rétro éclairage de l'affichage. Cette fonction fait appel à des LED montées derrière l'écran du module, cependant, cet éclairage est gourmand en intensité (250 mA max.).
b) Principe de fonctionnement.
Schéma fonctionnel
Comme le montre le schéma fonctionnel, l'affichage comporte d'autres composants que l'afficheur à cristaux liquides (LCD) seul. Un circuit intégré de commande spécialisé, le LCD-controller, est chargé de la gestion du module. Le "contrôleur" remplit une double fonction: d'une part il commande l'affichage et de l'autre se charge de la communication avec l'extérieur.
c) Connexions
Les connexions à réaliser sont simples puisque l'afficheur LCD dispose de peu de broches. Il faut, évidement, l'alimenter, le connecter à un bus de donnée (4 ou 8 bits) d'un microprocesseur, et connecter les broches Enable (validation), Read/Write (écriture/lecture) et Register Select (instruction/commande).
II) Principe des cristaux liquides
L'afficheur est constitué de deux lames de verre, distantes de 20 µm environ, sur lesquelles sont dessinées les mantisses formant les caractères. L'espace entre elles est rempli de cristal liquide normalement réfléchissant (pour les modèles réflexifs).
L'application entre les deux faces d'une tension alternative basse fréquence de quelques volts (3 à 5 V) le rend absorbant. Les caractères apparaissent sombres sur fond clair.
N'émettant pas de lumière, un afficheur à cristaux liquides réflexif ne peut être utilisé qu'avec un bon éclairage ambiant. Sa lisibilité augmente avec l'éclairage.
Les modèles transmissifs fonctionnent différemment: normalement opaque au repos, le cristal liquide devient transparent lorsqu'il est excité; pour rendre un tel afficheur lisible, il est nécessaire de l'éclairer par l'arrière.
a) Constitution d'une cellule à cristal liquide
b) Constitution d'un afficheur à cristaux liquides
III) Afficheur LCD LM-16251
a) Description
Le LM-16251 comporte 2 lignes de 16 caractères inscrits dans une matrice de 5 colonnes de 8 points. La plupart des caractères n'utilisent que les 7 rangées supérieures de la matrice; la rangée inférieure est prévue pour la visualisation d'un curseur. L'afficheur proprement dit est implanté sur un circuit imprimé au dos duquel sont soudés deux circuits intégrés VLSI et quelques composants discrets. L'électronique est compatible C-MOS et TTL et sa consommation ne dépasse pas 7 mW. Ses entrées sont protégées par des diodes. Outre les 32 caractères visualisés sur l'affichage, il est possible de mettre en mémoire 48 caractères supplémentaires, caractères que l'on visualisera sur l'affichage au moment voulu. Les dimensions de l'affichage sont très compactes:
circuit imprimé: 84 * 44 mm
boîtier de l'afficheur à cristaux liquides: 70,5 * 43,2 mm
partie utile de l'afficheur: 56,7 * 11,5 mm
caractère avec curseur 5,55 * 2,95 mm
Possibilités de l'afficheur
L'afficheur est en mesure de visualiser 192 caractères:
- de $00 à $ 07 : 8 caractères définissables par l'utilisateur
- de $20 à $7F : 96 caractères ASCII (majuscules, minuscules, chiffres, signes)
- de $A0 à $DF: 64 caractères japonais ( alphabet kana)
- de $E0 à $FF : 32 caractères spéciaux: accent, lettres grecques, ...
De plus, l'affichage est capable de traiter d'autres commandes telles que:
- l'extinction de l'affichage
- le positionnement du curseur
- le déplacement des caractères sur l'affichage
- Le choix du caractère à redéfinir
- le choix du sens du déplacement du curseur ou de l'affichage
- le clignotement des caractères ou du curseur
- ...
Brochage du composant
Niveau des différentes broches
N° DE BROCHE |
SIGNAL |
NIVEAU |
14 |
VSS |
Masse |
13 |
VDD |
+ 5 V |
12 |
VLC |
± 2,5 V |
11 |
RS |
0 = Instruction 1 = caractère. |
10 |
R/ |
0 = écriture 1 = lecture |
9 |
E |
Front descendant |
8 |
D0 |
Logique positive |
7 |
D1 |
Logique positive |
6 |
D2 |
Logique positive |
5 |
D3 |
Logique positive |
4 |
D4 |
Logique positive |
3 |
D5 |
Logique positive |
2 |
D6 |
Logique positive |
1 |
D7 |
Logique positive |
Description des différentes broches
1 à 8 : D7 à D0 : Bus de donnés bidirectionnel 3 états
(Haute impédance lorsque E=0)
9 : E : Entrée de validation (ENABLE) ;elle est active sur
front descendant. Il est important ici de tenir compte des 2 seuils durées
de commutation importantes en pratique: lorsque RS et R/
ont atteint un niveau stable, il doit se passer un intervalle de 140 ns minimum
avant que la ligne "E" ne passe au niveau haut. Cette ligne doit ensuite, être
maintenue à ce niveau pendant 450 ns au moins et les données doivent
rester tables sur le bus de données jusqu'au début du flanc
descendant de ce signal. Lorsque E=0 les entrées du bus de l'afficheur
sont à l'état haute impédance.
10 : R/: Lecture ou écriture.(READ/WRITE)
Lorsque R/ est au niveau bas, l'afficheur
est en mode "écriture", et lorsque R/
est au niveau haut, l'afficheur
est en mode "lecture".
11 : RS: Sélection du registre.(REGISTER SELECT)
Grâce à cette broche, l'afficheur est capable de faire la différence entre une commande et une donnée. Un niveau bas indique une commande et un niveau haut indique une donnée.
12 : VLC : Cette tension permet le réglage du contraste de l'afficheur. C'est une tension négative et tournant autour de -1,5 V.(selon l'angle de visualisation)
13 : VDD : + 5 V
14 : VSS : Masse.
b)fonctionnement
Tableau de codage des caractères
Les caractères et les signes spéciaux sont codés suivant le tableau ci-dessous.
Apparition des caractères sur l'afficheur
Apres avoir défini le sens de déplacement, les caractères apparaissent au dessus du curseur (qu'il soit visualisé ou non).
Adresse |
gauche droite |
invisible |
haut |
$00 ............... $0F |
$10 .......... ....$27 |
bas |
$40 ................$4F |
$50 .......... ....$67 |
L'adresse 00 correspond à la ligne du haut à gauche, 0F à droite.
L'adresse 40 correspond à la ligne du bas à gauche, 4F à droite.
La zone invisible correspond à la mémoire de l'afficheur.(48 caractères)
Lorsqu'un caractère est inscrit à l'adresse $27, le caractère suivant apparaît à la ligne suivante.
Principe de fonctionnement
Le principe
de fonctionnement est simple, pour visualiser un caractère, il suffit
de le positionner sur le bus de donnée (codé en ASCII), de mettre
RS au niveau haut (caractère), R/
au niveau bas (écriture), et de provoquer un front descendant sur l'entrée
de validation de l'afficheur (E).
ATTENTION: Après chaque action sur l'afficheur,
il faut vérifier que celui-ci est en mesure de traiter l'information
suivante. Pour cela il faut aller lire l'adresse de la position du curseur (RS=0,
R/=1) et tester l'indicateur
flag "Busy" (BF) (voir tableau ci-dessous). Lorsque BF=1 l'affichage est en
cours et lorsque BF=0, l'affichage est terminé.
Si l'on tente d'écrire des données ou d'envoyer une commande à l'afficheur pendant que ce dernier est en cours de traitement des données ou d'une commande précédante, le système peut se planter, l'affichage s'affoler et les deux circuits intégrés voir leur température augmenter brutalement!
Avant toute cette procédure d'écriture, il faut tout d'abord initialiser l'afficheur de façon à définir son mode de fonctionnement (dialogue en 4 ou 8 bits, sens de déplacement, visualisation du curseur, ...).Cette initialisation s'effectue en lui adressant des commandes (voir tableau ci-dessous), c'est à dire en positionnant RS à 0.
Tableau des différentes commandes de l'afficheur
TYPE DE COMMANDE |
RS |
R/W |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
DESCRIPTIF |
|
EFFACER L'AFFICHAGE |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Efface l'ensemble de la mémoire de données sans toucher au générateur de caractère. Met le curseur en position Home, à l'adresse 00. |
|
CURSEUR EN POSITION HOME |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
* |
Met le curseur en position Home. Si l'affichage à été décalé, il est remis à sa position d'origine: l'adresse 00 se trouve à nouveau en haut à gauche. |
|
MANIERE DE VISUALISER LES CARACTERES |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
ID |
S |
Détermine le sens de déplacement du curseur après apparition d'un caractère (ID) et le déplacement collectif d'une position de l'ensemble de l'affichage (S). |
|
MARCHE/ARRET DE L'AFFICHAGE DU CURSEUR |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
Met l'affichage en ou hors fonction (D). Met le curseur en ou hors fonction (C). Fait clignoter le caractère situé au-dessus du curseur (B), clignotement se traduisant par une alternance du caractère et du caractère FF (rectangle noir) |
|
DECALAGE |
0 |
0 |
0 |
0 |
0 |
1 |
S/C |
R/L |
* |
* |
Déplace le curseur ou l'ensemble de l'affichage sans modifier le contenu de la mémoire. |
|
FONCTION |
0 |
0 |
0 |
0 |
1 |
DL |
N |
F |
* |
* |
Indique la largeur du bus de données. Indique s'il ne faut utiliser que la ligne du haut ou que celle du bas. (F) : matrice |
|
ADRESSE DU GENERATEUR DE CARACTERES |
0 |
0 |
0 |
1 |
Caractère |
Rangée |
Définit l'adresse de la mémoire du générateur de caractères. Les données suivantes correspondent à la matrice du caractère concerné. |
|||||
ADRESSE DE LA MEMOIRE DE DONNEES |
0 |
0 |
1 |
Adresse |
Définit l'adresse de la mémoire de données. Les données suivantes correspondent au caractère ASCII à visualiser. |
|||||||
INDICATEUR BUSY LECTURE D'ADRESSE |
0 |
1 |
BF |
Adresse |
Lit l'indicateur Busy (BF) pour vérifier que l'afficheur et en mesure de traiter la commande suivante. Lit l'adresse de la position du curseur. |
|||||||
ECRITURE DE DONNEES |
1 |
0 |
Données |
Ecrit des données respectivement dans la mémoire de données ou le générateur de caractères. |
||||||||
LECTURE DE DONNEES |
1 |
1 |
Données |
Lit les données respectivement de la mémoire de données ou le générateur de caractères. |
Description des différentes commandes.
0 |
1 |
|
ID |
Déplacement vers la gauche |
Déplacement vers la droite |
S |
L'affichage ne bouge pas |
L'affichage est décalé |
C |
Absence du curseur |
Visualisation du curseur |
B |
Absence de clignotement du caractère |
Clignotement du caractère |
S/C |
Déplacement du curseur |
Déplacement de l'affichage |
R/L |
Décalage vers la gauche |
Décalage vers la droite |
DL |
4 bits |
8 bits |
N |
Ligne du haut |
2 lignes validées |
Le bit noté F permet de définir la matrice des caractères suivant le tableau ci dessous.
N |
F |
Nombre DE LIGNE |
MATRICE |
0 |
0 |
1 |
5 * 7 |
0 |
1 |
1 |
5 * 10 |
1 |
* |
2 |
5 * 7 |
Application pratique
Après la mise sous tension de l'afficheur, la ligne supérieur devrait être totalement sombre, celle du bas complètement claire. Si tel n'était pas le cas, il faudra augmenter (négativement) la valeur de la tension VLC. Il est temps maintenant d'envoyer les premières commandes d'initialisation.
La première commande à envoyer est la commande
permettant de définir le mode de dialogue avec l'afficheur (DL), et
le nombre de lignes sélectionnées (N). Pour cela, on met
RS et R/ au niveau bas et on positionne
sur le bus de données le code correspondant au choix de l'utilisateur
(cette commande efface la ligne supérieure). Après
un front descendant de l'entrée E, l'information sera prise en compte.
A partir de maintenant, l'ordre des commandes n'a plus d'importance.
Envoyons par exemple la commande $01 (effacement de l'afficheur), puis la commande $0E, soit D=1, C=1, B=0, pour mettre le curseur en fonction.
Ensuite, il faut définir le sens de déplacement du curseur, pour cela, envoyons la commande $06, soit ID=1 et S=0.
Ceci étant fait, on peut maintenant commencer à envoyer les premiers caractères à afficher. Il faut faire passer la ligne RS au niveau haut et envoyer sur le bus de données les codes des caractères à afficher. Après chaque front descendant de l'entrée E, le caractère sera affiché au dessus de la position du curseur.
ATTENTION: Avant toute procédure d'écriture,
il est impératif de tester l'indicateur Busy. Pour cela il faut aller
lire l'adresse de la position du curseur en mettant RS au niveau bas, R/
au niveau haut, et effectuer un ET logique avec la valeur $80 afin de permettre
le test du bit BF de l'indicateur Busy. Lorsque BF=0, il est possible d'envoyer
le caractère suivant à afficher. (Cette lecture doit avoir lieu
lorsque la ligne E se trouve au niveau haut)
De nombreuses animations peuvent être effectuées sur l'afficheur. On peut déplacer le curseur en positionnant sur le bus de données l'adresse souhaitée. Un défilement des caractères est même possible, il suffit pour cela d'envoyer la commande $07 (ID=1, S=1) sans oublier de positionner RS à 0. Mais il faut faire attention car un décalage de l'affichage décale également les adresses de l'afficheur de sorte à ce que l'extrême gauche de la ligne supérieur ne soit plus adressable à l'adresse 00. La commande retour Home permet de repositionner les adresses de l'affichage.
Exemple d'interface de connexion
ETUDE DE LA PARTIE LOGICIEL
1. Présentation
Le but de ma programmation à le même rôle qu'un distributeur ou d'une cabine téléphonique pour la partie afficheur.
Dans un premier temps, j'ai réalisé des essais sur le 68HC11 pour comprendre le fonctionnement de l'afficheur LCD.
De plus, j'ai réalisé une prise de ligne, qui permet lors de son fonctionnement, la tonalité nécessaire pour appeler un correspondant.
Ceci est réalisé par le lecteur de carte à puce, auquel son intégré des informations nécessaire pour le déclenchement de la prise de ligne.
PROGRAMMATION SUR 68HC11
1) UTILISATION DES PORT POUR LA PROGRAMMATION DE LA AFFICHEUR ET DE LA PRISE DE LIGNE
Pour la réalisation du programme de l'afficheur le PORT B et le PORT C sont nécessaire.
Pour cela, j'ai divisé le programme en 2 parties car l'afficheur utilise des commandes et des données pour sa programmation.
Alors, pour les commandes de l'afficheur qui se compose du RS, E, R/W, j'utilise le PORT B ainsi que pour la mise à "1" du PORT B pour la prise de ligne nécessaire pour la commutation du relais.
Ainsi, pour les données de l'afficheur, qui correspondent aux déplacement de l'affichage, positionnement du curseur, soit la ligne du haut et du bas, déplacement de l'affichage, l'utilisation du PORT C est nécessaire, car il est bidirectionnelle.
2) PROGRAMMATION DE L'AFFICHEUR
Pour la programmation de l'afficheur, dans un premier temps, il faut pour le démarrage de l'affichage, l'initialisation de celui-ci.
L'initialisation comprend plusieurs données nécessaire au bon fonctionnement de l'afficheur.
voici un résumé du tableau correspond au différente fonction de commandes de l'afficheur .
2)1) TABLEAU
2.2. EXPLICATIONS
2.2.1 Principe d'utilisation des ports
Le port B : les commandes
Le port C : les données
Les données correspondent à l'initialisation comme :
- effacement de l'afficheur
- déplacement du curseur
- positionnement de celui-ci
exemple : pour la commandes
LDAA #%00000001
STAA PORTB
Permet la validation des instructions E=1
exemple : pour les données
LDAA #%00001110
DCB
STAA PORTC
D'ou voici une instruction qui permet à l'afficheur d'être allumée (D=1) avec la présence du curseur (C=1) et sans faire clignoter le caractère (B=0).
Mais pour valider toutes les instructions pour permettre l'initialisation de l'afficheur, il faut au départ valider les instructions en mettant le PB0 à " 1 " correspondant au E.
LDAA #%00000001
STAA PORTB
3) Le BUSY
Le BUSY est l'indicateur nécessaire pour permettre de savoir si l'afficheur à exécuté la commandes que l'on a donnée, d'une c'est une vérification, mais surtout si il est prêt à exécuter une autre commandes pour la poursuite du programme.
Car si l'on tente d'écrire d'envoyer des commandes à l'affichage pendant que ce dernier est en cours de traitement de donnée ou d'une commande précédente, le système peut se planter, l'affichage s'affole et les 2 circuits intégrées voient leur température augmenter.
4) La validation
La fonction VALID, permet la validation des données nécessaire pour les différentes fonctions de l'afficheur, pour cela on met à " 1 " pour la validation des commandes.
3. Programmation de l'afficheur
3.1. Présentation
Voici, des exemples réalisés sur le 68HC11 pour la compréhension du fonctionnement de l'afficheur.
Dans un premier temps, l'initialisation de celui-ci:
3.2. Organigramme de l'afficheur
3.3. Fonctionnement
Le début de l'initialisation se traduit par le positionnement.
LDAB #%00111000
STAB PORTC
Cette fonction permet de dire que l'on choisit un largeur de bus 8 bis avec la ligne du haut et du bas.
LDAB #%00000001
STAB PORTC
Permet de mettre l'afficheur en position home, d'ou le placement du curseur en haut à gauche.
LDAB #%00001100
STAB PORTC
Permet l'allumage de l'afficheur, sous la présence du curseur, ainsi que l'absence du clignotement de caractère.
LDAB #%00000110
STAB PORTC
Détermine le sens du déplacement l'afficheur, sans bouger l'affichage.
A chaque étape, on est obligé de faire une validation de chaque commandes nécessaire pur avoir un bon fonctionnement.
Celui-ci se traduit par le ENABLE qui se trouve sur le PORT B : PBO=E
LDAB #%00000001
STAB PORTB
*Le BUSY
LDAB #%00000011
STAB PORTB
Permet de lire la mémoire de données.
Le programme qui permet d'afficher le message.Il se divise en 3 parties.
LDAA #%00000101
STAA PORTB
Permet décrire les données respectivement dans la mémoire.
CMPB #$25
BEQ DETECT
Permet lors de la présence du % de passer à la ligne du bas.
CMPB #$25
BEQ STOP
Permet de dire la fin du message.
LDAB #$11000000
STAB PORTC
C'est la valeur 41 qui permet au curseur de passer à la ligne du bas.
Programme
de démonstration pour le test d'un afficheur LCD avec une carte à
MC68HC811E2. Le programme s'appuie sur le hardware de la carte "Two-Line
Mini-Terminal" de Roger Schaefer disponible à l'adresse:
A http://www.rasmicro.com/projects.htm
http://68hc11.free.fr/downloads/lcdinit.txt Gestion d'un afficheur LCD en mode 4 bits avec un 68HC11F1.
http://www.lc-design.de/English/english.htm
LC Design is your partner for LCD applications ; LC Design is EPSON
Technology Partner.
http://prof.maquaire.free.fr/ressources/publications/np%20caracteres%20speciaux/creation%20de%20caracteres%20speciaux%20v1.3%20-%20version%20web.pdf Generation de caractères spéciaux
éditeurs pour LCD graphiques:
The program called fastLCD at http://www.fastavr.com/Downloads_act.htm may be useful. Also for ks0108 or hd61202 only http://www.geocities.com/dinceraydin/lcd/fin.htm will be useful. There you'll find applications to convert bitmap images into a format to match the layout of the LCD. Also you can use the fonts from the application called DjGfXLCDSIM in your application.
If you use MSP430 : in the "IAR Embedded Workbench for MSP430 Kickstart" , you will find a LCD Editor.
the software called Iconeditor can be used also.
Retour à la page Afficheurs LCD
Retour à la page d'accueil
email: matthieu.benoit@free.fr
le
17 juillet, 2021