jeudi 11 octobre 2018

Afficheur à cristaux liquide (LCD) et MPLAB XPress Evaluation Board


Dans ce billet, je vous explique comment j'ai procédé pour piloter un afficheur à cristaux liquides 16 X 2 (2 lignes de 16 caractères) muni du contrôleur Hitachi HD44780 au moyen d'une carte MPLAB Xpress Evaluation Board (cette carte est munie d'un microcontrôleur PIC16F18855).

Connexions de l'afficheur à la carte

Dans un premier temps, il est important de noter que la carte MPLAB Xpress Evaluation Board fonctionne à un niveau logique de 3,3 V, alors que la plupart des afficheurs 16 X 2 sont conçus pour fonctionner à 5 V.

Il existe des afficheurs conçus pour fonctionner à 3,3 V. Si votre afficheur est conçu pour un fonctionnement à 5 V, il est possible qu'il fonctionne malgré tout, mais ce n'est pas certain.

L'afficheur comporte 16 broches, qui sont branchées à la carte de la façon suivante:
  • VSS de l'afficheur : GND de la carte
  • VDD de l'afficheur : 3,3 V de la carte (ou 5 V s'il s'agit d'un afficheur conçu pour 5 V)
  • VO de l'afficheur: curseur d'un potentiomètre qui sert à régler le contraste
  • RS de l'afficheur : RB0 de la carte
  • RW de l'afficheur : RB1 de la carte
  • E de l'afficheur : RB2 de la carte
  • D0 de l'afficheur : RC0 de la carte
  • D1 de l'afficheur : RC1 de la carte
  • D2 de l'afficheur : RC2 de la carte
  • D3 de l'afficheur : RC3 de la carte
  • D4 de l'afficheur : RC4 de la carte
  • D5 de l'afficheur : RC5 de la carte
  • D6 de l'afficheur : RC6 de la carte
  • D7 de l'afficheur : RC7 de la carte
  • A de l'afficheur: 3,3 V de la carte (si un rétroéclairage est souhaité)
  • K de l'afficheur: GND de la carte

Création d'un projet dans MPLAB Xpress

Je suis ensuite allé dans l'IDE en ligne MPLAB Xpress afin de créer un nouveau projet (Standalone Project).  S'il s'agit de votre première utilisation de MPLAB Xpress, vous voudrez peut-être d'abord vous référer à ce précédent article.



Réglages dans MPLAB Xpress Code Configurator

Une fois le projet créé dans MPLAB Xpress, on ouvre le MPLAB Xpress Code Configurator (si MCC n'est pas déjà installé sur votre ordinateur, vous trouverez quelques informations utiles dans ce précédent article).

Vous n'avez pas à modifier quoi que ce soit dans la partie "System Module". Les paramètres par défaut conviennent parfaitement.


Au bas de la fenêtre, cliquez sur les cadenas de façon à définir les broches 0, 1 et 2 du port B et toutes les broches du port C comme sortie (OUTPUT):


Accédez ensuite à la zone "Pin Module" et décochez toutes les cases qui ont été réglées à "Analog" par défaut.



C'est tout! Il ne reste qu'à cliquer sur le bouton "Generate" pour que les fichiers d'en-tête soient automatiquement créés et ajoutés dans notre projet MPLAB Xpress.



Script

Le script ci-dessous peut être collé dans le fichier "main.c" de votre projet dans MPLAB Xpress.

Puisque je n'ai pas utilisé de bibliothèque, on y trouve la routine "initialisation_LCD" qui initialise l'afficheur au démarrage du programme, "envoie_commande" pour envoyer des instructions à l'afficheur, "affiche_caractere" pour afficher des lettres sur l'afficheur, et "gestion_string" qui divise une chaîne de caractères en caractères individuels afin qu'ils soient ensuite affichés.

Vous pourrez probablement laisser ces fonctions telles quelles, et vous contenter d'apporter des modifications à la partie "main", à la fin du programme.  Dans cette partie, j'affiche le mot "ÉLECTRONIQUE" sur la première ligne de l'afficheur. Sur la deuxième ligne, j'affiche "EN AMATEUR", puis un nombre entier qui augmente d'une unité à chaque seconde.


/******************************************************************
Contrôle d'un afficheur LCD avec le MPLAB Xpress Evaluation Board
Instructions complètes:
http://electroniqueamateur.blogspot.com/2018/10/afficheur-cristaux-liquide-lcd-et-mplab.html
*******************************************************************/
#include "mcc_generated_files/mcc.h" // fichiers générés par MCC
#include "stdio.h" // pour l'utilisation de sprintf
unsigned int compteur = 0;
void envoie_commande(unsigned char commande) // utilisé pour envoyer une instruction à l'afficheur
{
RB0=0; // RS (Register Select) à 0
RB1=0; // RW (Read or write) à 0
RB2=1; // E (Enable) à 1
PORTC = commande; // Les broches D0 à D7 de l'afficheur réglées
// à la valeur correspondant à l'instruction voulue
__delay_ms(50); // délai
RB2=0; // E (Enable) à 0
}
void affiche_caractere (unsigned char caract) // utilisé pour envoyer un caractère à afficher
{
RB0=1; // RS (Register Select) à 1
RB1=0; // RW (Read or write) à 0
RB2=1; // E (Enable) à 1
PORTC = caract; // Les broches D0 à D7 de l'afficheur réglées
// à la valeur correspondant au caractère voulu
__delay_ms(1);
RB2=0; // E (Enable) à 0
}
void gestion_string (unsigned char* position) // affiche tous les caractère d'une chaîne
{
while(*position != '\0') // jusqu'à ce qu'on soit arrivé à la fin de la chaîne de caractère
{
affiche_caractere(*position); // on affiche le caractère
position++; // on passe au caractère suivant
}
}
void initialisation_LCD(void) // initialisation de l'afficheur
{
__delay_ms(100); // délai
envoie_commande(0x38); //Mode 8 bits, 2 lighes
envoie_commande(0x01); // On efface le contenu de l'afficheur
envoie_commande(0x0E);
//envoie_commande(0x80); // Curseur placé au début de la première ligne
}
void main (void)
{
SYSTEM_Initialize();
initialisation_LCD();
while (1)
{
char data[16]; // contiendra la valeur du compteur en string
envoie_commande(0x80); // Curseur au début de la première ligne
gestion_string("ELECTRONIQUE");
envoie_commande(0xC0); // curseur au début de la deuxième ligne
gestion_string("EN AMATEUR ");
sprintf(data, "%d", compteur); // conversion de la valeur du compteur en string
gestion_string(data); // affichage de la valeur du compteur
if (compteur <= 100){
compteur++;
}
else {
compteur = 0; // on remet le compteur à zéro
envoie_commande(0x01); // 0x01 est la commande pour tout effacer sur le LCD.
}
__delay_ms(1000); // on attend une seconde avant de changer la valeur du compteur
}
}
view raw LCD_MPLAB.c hosted with ❤ by GitHub

Vous trouverez ici d'autres projets impliquant le MPLAB Xpress Evaluation Board.  Si c'est plutôt l'afficheur à cristaux liquides qui vous intéresse, voyez comment ils peut être utilisé avec d'autres cartes: Arduino, Raspberry Pi, STM32 Nucleo ou MSP430 Launchpad.

Yves Pelletier   (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire