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 :
- Ecrire la librairie soit même,
- Récupérer une librairie existante,
- Adapter une librairie.
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
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
Les fichiers disponibles pour cette version sont :
my_lcd.h et my_lcd.c
Les différentes fonctions sont :
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).
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.
- 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 :
Les différents fichiers sont inclus dans le fichier lcd.zip.
Lien utiles :
Une description LCD
Définir un symbole graphique
Article Wikipédia
Aucun commentaire:
Enregistrer un commentaire