Comprendre les afficheurs LCD HD44780
ArticleCategory: [Choose a category, translators: do not
translate this, see list below for available categories]
Hardware
AuthorImage:[Here we need a little image from you]
TranslationInfo:[Author + translation history. mailto: or
http://homepage]
original in en Jan
Svenungson
en to fr Iznogood
AboutTheAuthor:[A small biography about the author]
Jan utilise GNU/Linux depuis 1996 et n'a d� effectuer que deux
red�marrages involontaires depuis lors (sans compter les red�marrages d�s aux coupures de courant).
Abstract:[Here you write a little summary]
Cet article va tenter de vous apprendre deux ou trois choses sur l'afficheur LCD HD44780.
Nous verrons comment le connecter au port parall�le et comment le programmer
avec un petit outil nomm� LCDInfo comme r�f�rence.
L'objectif n'est pas de simplement connecter l'afficheur, d'ex�cuter un
programme et d'obtenir le r�sultat sur l'�cran, mais plut�t de comprendre
comment le mat�riel peut r�agir selon vos souhaits.
ArticleIllustration:[One image that will end up at the top
of the article]
ArticleBody:[The main part of the article]
Introduction
Avant tout, il nous faut du mat�riel et du logiciel ; nous supposons que vous
poss�dez un ordinateur avec un port parall�le standard (imprimante) sur
lequel vous pouvez faire fonctionner GNU/Linux avec gcc et glibc.
Vous aurez bien s�r besoin d'un afficheur LCD HD44780, de c�bles pour le
connecter au port parall�le, ainsi qu'un potentiom�tre si vous voulez changer
le contraste. Pour alimenter l'afficheur, il vous faudra plus d'�nergie que
ne peut en fournir le port parall�le et vous aurez s�rement besoin de
trouver une autre forme d'alimentation, ailleurs dans l'ordinateur.
La meilleure fa�on de le faire est de prendre un connecteur standard de +5V
(celui utilis� pour alimenter les disques durs et lecteurs de disquette, etc.)
Une fois la connexion de l'afficheur LCD termin�e, vous devrez comprendre
comment il fonctionne. Ceci est habituellement laiss� de c�t� dans les
articles sur ce sujet, mais je vais tenter de vous expliquer quelques arcanes
de l'afficheur qui vous aideront � le programmer.
La derni�re chose � faire est d'obtenir l'affichage de quelque chose d'utile.
Comme r�f�rence, j'utiliserai un petit programme appel� LCDInfo qui supporte
la plupart des fonctionnalit�s du HD44780 mais qui n'affiche pas grand chose
pour l'instant. Ce programme est en phase alpha et je travaille dessus lorsque j'ai du temps libre.
Si vous n'avez jamais programm� en C, envisagez de d�couvrir d'abord un peu
le sujet. Je consid�re que vous �tes d�butants, ce qui correspond � mon niveau actuel.
Comment le connecter ?
Avant tout, examinons
les diff�rentes broches disponibles sur le LCD et expliquons leur r�le.
La broche 1 se nomme VSS et elle est cens�e se connecter � GND.
La broche 2 se nomme VDD et correspond � la broche d'alimentation de +5V.
La broche 3, appel�e VLC, est connect�e au potentiom�tre pour d�finir le contraste de l'afficheur.
La broche 4 est la broche RS et selon sa position, l'afficheur se pr�pare � recevoir des instructions ou des donn�es.
La broche 5 est la broche R/W qui contr�le si le LCD est en mode �mission ou r�ception.
La broche 6 est la broche d'activation (Enable). Lorsqu'elle passe du niveau bas � haut et revient � bas,
le LCD lit les broches 4,5 et 7-14.
Les broches 7-14 sont les lignes de bus de donn�es appel�es DB0-DB7,
qui sont les bits de donn�es principaux envoy�s au LCD et qui contr�lent o�
et quoi �crire sur l'afficheur.
Les broches 15 et 16 sont seulement pr�sentes sur les afficheurs avec
r�tro-�clairage et correspondent simplement au +5V et au GND avec une
r�sistance de 3.8 Ohm entre la broche 15 et le +5V.
Pour trouver comment les connecter au port d'imprimante, vous pouvez regarder
sur le sch�ma de droite o� j'ai tent� de rendre les explications le plus
clair possible. Cliquez sur le sch�ma pour agrandir l'image.
Ce sch�ma n'est utile que si vous voulez changer le contraste de l'afficheur.
J'ai simplement connect� les broches 3 et 1 � GND, ce qui a bien fonctionn�; mais si vous avez un
�clairage particulier dans la pi�ce, vous pouvez envisager d'ajouter un potentiom�tre.
Lorsque vous r�cup�rez l'alimentation du PC, soyez prudents. Si vous prenez
l'alimentation � partir du mauvais c�ble, vous obtiendrez du +12V et vous
grillerez le LCD. Vous devez choisir le rouge. Le jaune est le +12V et le
noir est le GND.
Si vous avez branch� correctement, le LCD doit avoir la premi�re (et la
troisi�me si elle existe) colonne en noir lorsque vous allumez le PC.
Comment fonctionne le LCD
Le LCD ne fait rien si vous ne lui demandez pas, il attend une variation
valide (ce qui se produit lorsque la broche "enable" est mise en position
haute, et qu'elle est remise en position basse apr�s un moment).
L'afficheur d�tecte alors s'il s'agit de donn�es ou d'instructions � traiter, puis
s'il doit recevoir ou envoyer des informations et enfin, les bits de donn�es sont envoy�s ou re�us.
Dans cet article, nous ne recevrons jamais d'information du LCD, la broche
R/W restera donc en position basse, ce qui signifie en �criture.
La broche RS sera en position basse, sauf lors de l'impression de
caract�res, tout le reste sera consid�r� comme instructions.
Ceci rend la programmation de l'afficheur r�ellement simple.
Une fois que nous savons ceci, nous voulons allumer l'afficheur et le
pr�parer � recevoir des informations. Ceci est r�alis� dans la s�quence
d'initialisation o� nous indiquons � l'afficheur de d�marrer, le � jeu de
fonction � � utiliser, etc.
L'alimentation doit d�j� �tre active si vous la prenez � partir d'un c�ble du
PC, sinon, c'est la premi�re chose � faire.
Arrive ensuite le � jeu de fonctions � selon le type d'affichage que vous avez.
Pour rendre ceci encore plus facile � comprendre, je vais expliquer
exactement ce que nous faisons lors de l'utilisation du jeu de fonctions.
DB2 est le bit de police et il doit �tre en position basse
indiquant une matrice de 5x7 points.
BD3 est le bit de ligne d'affichages et doit �tre en position
haute signifiant 2 lignes. Que se passe-t-il si vous avez 4 lignes sur
l'afficheur? Ne vous inqui�tez pas, la premi�re et la troisi�me ligne sont
les m�mes dans la m�moire de l'afficheur, vous devez donc utiliser �galement
la position haute.
DB4 est le bit de longueur de donn�es et ceci d�termine si vous avez 4 ou
8 DB. Si vous connectez l'affichage en fonction de mon sch�ma, vous devez
avoir ce DB en position haute.
Initialisez alors DB5 � haut pour indiquer � l'affichage qu'il s'agit
bien d'une instruction du � jeu de fonctions �, et v�rifiez ensuite que
RS et R/W sont en position basse et activez une
variation haut et bas. V�rifiez dans le manuel pour les d�lais; je suppose
que les temps d'attente ne sont que des microsecondes, ce qui devrait �tre bien plus que n�cessaire.
Et � propos du code ?
Je vais parler ici des �l�ments du programme LCDInfo dont vous avez besoin
pour comprendre comment l'interface du HD44780 fonctionne. Vous pouvez
t�l�charger le programme LCDInfo � la fin de l'article ou allez lire les
fichiers source en C iolcd.c et lcdinfo.c en cliquant ici.
Ce qu'il nous faut maintenant, ce sont les instructions en C et croyez-moi
lorsque je vous dis que c'est facile. Je vais d�tailler le code pas � pas et
m�me si vous �tes un d�butant en C, vous comprendrez.
En premier lieu, nous incluons quelques fichiers en-t�te et nous d�finissons
quelques fonctions (voir le source pour information). Puis vient la partie la plus int�ressante.
#define D_REGISTER 0
#define I_REGISTER 2
#define WRITE_DATA 8
#define BASE 0x378
int main(void)
{
ioperm(BASE,3,1);
[CUT]
}
C'est la premi�re instruction dans la fonction principale qui nous donne les
permissions sur le port parall�le. BASE doit �tre autour de 0x378 et la
partie � 3 � signifie que nous avons acc�s � 0x378, 0x379 et 0x380, ce qui
correspond basiquement au port d'imprimante.
La raison pour laquelle il y a trois adresses vient de ce que le port est
divis� entre les donn�es, les statuts et les contr�les. Pour nous, cela
signifie que nous devons d'abord d�finir les broches de donn�es, celles de
contr�le en second et nous ne pouvons pas le faire en une seule commande.
La chose suivante, c'est le jeu de fonctions d�crit ci-dessus.
void function_set(void)
{
outb(56, BASE);
Ceci d�finit les broches DB � une matrice de 5x7 points, deux lignes, etc.
outb(I_REGISTER + WRITE_DATA, BASE + 2);
Ceci initialise les broches RS et R/W en instruction et �criture. J'ai d�fini
des variables globales de I_REGISTER et WRITE_DATA et elles sont �gales � 2 et 8.
Il y a ensuite l'activation de la variation.
outb(ENABLE + I_REGISTER + WRITE_DATA, BASE + 2);
usleep(0);
outb(I_REGISTER + WRITE_DATA, BASE + 2);
}
Ce que fait ce code est de basiquement mettre "enable" en position haute,
attendre et le remettre en position basse. La commande usleep(0); n'est pas
id�ale, mais je n'ai pas fini le code pour la gestion du temps.
Quelques uns d'entre vous peuvent se demander pourquoi j'active RS et R/W
dans le code, alors que j'ai dit qu'ils devaient �tre mis en position basse
dans les instructions. C'est parce que les broches 1, 14 et 17 sont �
invers�es mat�riellement �, indiquant que la broche 14 est � ferm�e �; pour
le port d'imprimante, la broche est en position haute !
Je vous avais bien dit que c'�tait facile, non ?
Comment afficher des caract�res
Vous voulez peut �tre un exemple pratique pour votre afficheur ? Pas de probl�me.
Le code (code comme dans commandes) est identique � l'impression d'un
caract�re et � la d�finition de fonctions. La seule chose � faire est de
changer quelques variables. Nous ne voulons pas que le RS soit initialis� en
instructions mais en donn�es pour commencer. La fonction print_character()
ressemble donc � :
void print_character(int character)
{
outb(D_REGISTER + WRITE_DATA, BASE + 2);
outb(character, BASE);
outb(ENABLE + D_REGISTER + WRITE_DATA, BASE + 2);
usleep(0);
outb(D_REGISTER + WRITE_DATA, BASE + 2);
}
Comme vous pouvez le voir, nous avons chang� � I_REGISTER � en � D_REGISTER �
et � 56 � en � character � mais qu'est ce que cela signifie ? Si vous
regardez les codes de caract�res dans votre manuel, vous comprendrez.
Nous devons seulement remplir la fonction par un caract�re (comme nous
utilisons le C, il n'est pas n�cessaire de se pr�occuper de le d�finir
d'abord comme un entier) et le caract�re va alors s'afficher sur le LCD.
Chouette, non ?
Avec ce code, nous avons le squelette d'un programme LCD, adaptez-le � vos
besoins, affichez la m�moire disponible, affichez les connexions http actives
ou ce que vous voulez. Quelques exemples se trouvent dans le programme LCDInfo qui affiche des
informations disponibles dans le syst�me de fichiers proc sur un ordinateur
GNU/Linux.
R�f�rences