Mise en œuvre de l’afficheur LCD Documents ressource : documentation de l’afficheur AMC-1602A, page 18 de la documentation du circuit intégré KS0066U. 1. Caractéristiques de l’afficheur : Type d’affichage (signification de LCD) : à cristaux liquides. Format de l’affichage : 2 lignes de 16 caractères. Type de commande : l’afficheur est commandé par un microcontrôleur, par l’intermédiaire d’un bus de donnée et d’un bus de contrôle (fig. 1 page 4). Réglage du contraste : par résistance ajustable. Tension d’alimentation : 5 V. 2. Mémoires internes : L’afficheur contient deux mémoires : la mémoire appelée DD RAM (display data RAM); la mémoire appelée CG RAM (character generator RAM). 2.1. Rôle de la mémoire DD RAM (fig. 2 page 4) : Lorsque le bit de donnée de poids le plus fort est à 0 : Elle reçoit le code d’une instruction servant à commander l’afficheur : valider/inhiber l’afficheur (display ON/display OFF) ; définir le mode de fonctionnement de l’afficheur (Function SET, Cursor or Display Shift, Entry Mode Set) ; ramener le curseur en haut à gauche (Cursor home) ; effacer l’afficheur (Display clear). Lorsque le bit de donnée de poids le plus fort est à 1 : Elle recoit le code servant à placer le curseur sur une ligne et une colonne déterminées. Faire l’exercice 1. 2.2. Rôle de la mémoire CG RAM : Elle stocke le code des caractères affichés. La table donnant le code de chacun des caractères affichables est donnée dans le document constructeur. ESTI Electronique Cours : Mise en œuvre de l’afficheur LCD Page 1 /6 Faire l’exercice 2. ESTI Electronique Cours : Mise en œuvre de l’afficheur LCD Page 2 /6 3. Description des broches d’entrée/sortie de l’afficheur : RS R/W E D0 à D7 D0 à D7 : c’est le bus de donnée. Son rôle : Ecriture dans DD RAM : il permet d’envoyer à l’afficheur le code de l’instruction. Ecriture dans CG RAM : il permet d’envoyer à l’afficheur le code du caractère à afficher. En lecture, il permet de récupérer le contenu de DD RAM ou de CG RAM. RS, R/W et E : ils forment le bus de contrôle. Rôle de RS : sélectionner la mémoire DD RAM si RS = 0, sélectionner la mémoire CG RAM si RS = 1 (fig. 3 page 4). Rôle de R/W : opération d’écriture si R/W = 0, opération de lecture si R/W = 1. Rôle de E (E étant initialement à 1) : un front descendant sur E permet de valider la donnée présente sur D0 à D7 (en écriture, la donnée rentre dans la mémoire DD RAM ou CG RAM). 4. Commande de l’afficheur : 4.1. Ecriture d’une instruction dans la mémoire DD RAM : L’algorithme est le suivant. Opération : Commentaire : Mise à 0 de R/W Mise à 0 de RS Mise à 1 de E Positionnement des bits D0 à D7 Mise à 0 de E Ecriture … … dans DD RAM Donnée non validée en fonction de l’instruction voulue Donnée validée (exécution de l’écriture) Faire l’exercice 3. ESTI Electronique Cours : Mise en œuvre de l’afficheur LCD Page 3 /6 4.2. Programmation en assembleur ST6 : On relie RS et E à deux bits de port, PC0 et PC2 par exemple (R/W est fixé à 0). On relie D0 à D7 à un port du microcontrôleur, le port A par exemple. Des instructions de manipulation de bits permettent de commander RS et E. Une instruction de chargement permet de positionner D0 à D7. Faire l’exercice 4. 5. Initialisation de l’afficheur : 5.1. Principe de l’initialisation : Après la mise sous tension, l’afficheur n’est pas prêt à recevoir des codes de caractères : il faut l’initialiser, c’est à dire le préparer à recevoir des caractères. L’algorithme d’initialisation est par exemple celui-ci. Opération : Valeur : Function SET Display OFF Clear Display Cursor Home Entry Mode Set Display On 38h 08 01 02 06 0Ch Décrire la configuration de l’afficheur après cette initialisation. Function Set : donnée de 8 bits, 2 lignes, petits caractères. Entry Mode Set : décalage du curseur vers la droite (increment). 5.2. Programmation en assembleur ST6 : L’afficheur étant commandé par un microcontrôleur, un sous-programme écrit en langage assembleur permet d’initialiser l’afficheur. En général ce sous-programme est inclus dans un fichier que l’on peut utiliser à chaque nouveau programme. Pour utiliser ce fichier, on utilise la directive d’assemblage .input Si le fichier s’appelle BAC00LCD.asm et se trouve dans le dossier C:\ST6, on écrit : .input C:\ST6\BAC00LCD.asm Pour appeler le sous-programme d’initialisation, on utilise l’instruction call Si le sous-programme s’appelle Initaff, on écrit : call initaff ESTI Electronique Cours : Mise en œuvre de l’afficheur LCD Page 4 /6 Figure 1 : Microcontrôleur PortA PortB Afficheur LCD Bus de contrôle Bus de donnée RS, R/W et E D0 à D7 Remarque : le choix des ports du microcontrôleur (port A pour le bus de contrôle et port B pour le bus de donnée) est arbitraire. Figure 2 : Mémoire DD RAM 0 bit de poids fort 1 Code de l’instruction Code de la position du curseur autres bits Donnée Avec RS = 0 : Mémoire Bus de donnée Bus de donnée DD RAM Figure 3 : ESTI Electronique Cours : Mise en œuvre de l’afficheur LCD Page 5 /6 Avec RS = 1 : ESTI Electronique Bus de donnée Mémoire CG RAM Cours : Mise en œuvre de l’afficheur LCD Page 6 /6 Mise en œuvre de l’afficheur LCD - Exercices Exercice 1 : A partir des tableaux du document constructeur, donner la valeur hexadécimale à écrire dans DD RAM (D7 à D0 ou DB7 à DB0) pour effectuer les actions suivantes. Inhiber complètement l’afficheur (Display OFF) : 08 Valider l’afficheur (Display ON) sans le curseur : 0Ch Ramener le curseur en haut à gauche : 02 Effacer l’afficheur : 01 Configurer l’afficheur pour des données de huit bits et un affichage sur une ligne en grands caractères : 34h On recherche la valeur à placer dans DD RAM pour positionner le curseur sur la ligne et la colonne voulue. Les bits D0 à D3 indiquent la colonne (0000 pour la première colonne). Le bit D6 indique la ligne (0 pour la première ligne). Le bit D7 est à 1. Ecrire dans ce tableau la valeur hexadécimale pour toutes les positions possibles du curseur. Col . 15 16 1 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 2 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF Ligne 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Exercice 2 : La mémoire CG RAM étant remplie, que se passe-t-il si l’on arrête d’envoyer des signaux à l’afficheur tout en laissant celui-ci alimenté ? Les caractères restent affichés car leurs codes sont conservés en mémoire. Donner la succession de codes permettant d’afficher : <Afficheur LCD> 3Ch 41h 66h 66h 69h 63h 68h 65h 75h 72h C0h 4Ch 43h 44h 3Eh A la mise sous tension, l’afficheur affiche des rectangles noirs. Pourquoi ? Tous les bits de la CG RAM sont à 1 car la mémoire est vide (un rectangle noir correspond au code FFh) ESTI Electronique Cours : Mise en œuvre de l’afficheur LCD Page 7 /6 Exercice 3 : Tracer les chronogrammes des signaux d’écriture d’une instruction dans DD RAM. RS R/W E D0 à D7 Ancien code Code de l’instruction Exécution de l’instruction Que doit-on changer dans ces chronogrammes pour écrire le code d’un caractère dans la mémoire CG RAM ? Il faut mettre RS à 1. Tracer les chronogrammes permettant d’afficher LCD. (codes : 4Ch, 43h, 44h) RS E D0 D1 D2 D3 D4 D5 D6 D7 Exercice 4 : 4Ch 43h 44h L’afficheur est initialisé. On veut afficher le caractère *. Ecrire en assembleur ST6 les instructions suivantes. Opération : Instructions : Mettre RS à 1 Mettre E à 1 Mettre dans l’accumulateur le code de * Recopier le contenu de l’accumulateur dans le registre DRA Mettre E à 0 set 0,drc set 2,drc ldi a,2Ah ld dra,a res 2,drc ESTI Electronique Cours : Mise en œuvre de l’afficheur LCD Page 8 /6