pages

1 mars 2016

Affichage LCD en "C"

L'utilisation d'un afficheur LCD est une application courante dans un montage à base de microcontrôleur.

Librairie pour afficheur LCD avec XC8


HD44780 : Présentation


Depuis les années 80 l'afficheur LCD à base du circuit HD44780 est souvent utilisé comme interface entre le montage et l'utilisateur.
Pour utiliser cet afficheur il faut disposer de fonctions pour par ex  effacer l'écran, pour cela plusieurs solutions  :

  1. Ecrire la librairie soit même,
  2. Récupérer une librairie existante,
  3. Adapter une librairie.
La première solution est sûrement celle qui permet de mieux connaître le fonctionnement du circuit HD44780, attention ce n'est pas particulièrement difficile mais cela demande quand même des connaissances.

La deuxième solutions est la plus simple mais ne permet pas de bien appréhender l'utilisation d'un afficheur LCD.

La troisième solution, celle qui est l'objet de ce billet, permet d'obtenir à partir d'une librairie existante une librairie adaptée  à ces habitudes de programmation et à son matériel tout en étant obligé d'étudier le fonctionnement du circuit d'affichage.

Tout d'abord le datasheet du circuit HD44780 peut être récupérer ici  et la description de l'afficheur par ex ici

Ces liens ne sont pas les seuls, une recherche sur le net permet de trouver beaucoup d'autres liens (une petite sélection en bas de page).

Revenons à notre librairie, je suis parti de celle fournie avec le compilateur XC8 (attention avec les nouvelles versions du compilateur, voir précédent billet).

Cette librairie  "XLCD" date de l'époque du compilateur C18 et elle est toujours disponible avec XC8.
Elle dispose des fonctions nécessaire au fonctionnement d'un afficheur LCD et normalement elle fonctionne sans problème.

Le fichier "xlcd.h" est disponible dans le répertoire :

  • C:\Program Files (x86)\Microchip\xc8\v1.34\include\plib

Les fichiers des différentes fonctions sont disponibles dans le répertoire suivant :

  • C:\Program Files (x86)\Microchip\xc8\v1.34\sources\pic18\plib\XLCD
Ces répertoires peuvent varier suivant votre installation.

Le travail consiste :

  • copier le fichier "xlcd.h" en le renomment "my_lcd.h"
  • regrouper dans un seul fichier les fichiers des différentes fonctions
  • nommer ce fichier sous un nouveau nom "my_lcd.c"
  • supprimer les lignes de code inutiles et franciser le nom des fonctions et les commentaires
Ces fichiers seront dorénavant copiés dans le répertoire de chaque projet qui utilise un LCD, en optant pour cette solution il est possible de choisir par exemple le "portA" pour les données dans un projet et le "portC" dans un autre projet, chaque projet est indépendant des autres.

Les fichiers disponibles pour cette version sont :

  my_lcd.h et my_lcd.c

Les différentes fonctions sont :

void LCD_Init( unsigned char type_lcd);              // initialisation du LCD
void LCD_Cmd(unsigned char command);           // envoi d'une commande lcd
void LCD_Write(char Data);                                  // ecriture d'un caractère
void LCD_Write_Text( char *msg);                     // ecriture d'un texte
void LCD_Write_const(const char *msg);           // ecriture d'un texte contenu en ROM
unsigned char BusyLCD(void);                            // Test si LCD disponible : retourne 0
void PosDDRamAddr(unsigned char DDaddr);   // Positionnement à l'adresse x dans DDRam
void PosCGRamAddr(unsigned char DDaddr);   // Positionnement à l'adresse x dans CGRam


Ces fichiers seront donc copiés dans le répertoire du projet et modifiés suivant le matériel utilisé.
Les modifications à apporter au fichier my_lcd.h sont :

    • le type de data : 8 ou 4 bits  (#define BIT8 pour un bus de 8 bits),
    • si 4 bits, la position du port : D4 à D7  (#define upper),
    • les pins utilisées pour les broches de commande (RS,RW et E).
Cela donne par ex :

programme lcd mplab x et xc8



Cette librairie permet donc de choisir entre une largeur de bus data de 8 bits ou une largeur de bus de 4 bits, suite à une demande d'une personne qui est fâchée avec les directives de compilation  conditionnelle, j'ai modifié c'est fichiers pour obtenir un couple de fichiers pour la version 8 bits et un couple pour la version 4 bits.


  • my_lcd8.h et my_lcd8.c pour la version 8 bits,
  • my_lcd4.h et my_lcd4.c pour la version 4 bits.
Le couple correspondant à la largeur de bus choisi sera copié dans le répertoire du projet.


  • version 8 bits : il suffit d'indiquer les pins utilisées pour les broches de commande.
  • version 4 bits : il faut indiquer en plus la position du port : D4 à D7  (#define upper).
Les fonctions sont identiques à la version "universelle" sauf la fonction Init qui ne nécessite pas de paramètres.

Pour le test de ces librairies j'ai comme d'habitude utilisé une platine de test équipée d'un Pic 18F4525, le schéma est :

schema platine

Les différents fichiers sont inclus dans le fichier lcd.zip.

Lien utiles :
  Une description LCD
  Définir un symbole graphique
  Article Wikipédia
  Beaucoup d'info sur les LCD








Aucun commentaire:

Enregistrer un commentaire