gestion d`un afficheur lcd avec un pic 18f4550

Transcription

gestion d`un afficheur lcd avec un pic 18f4550
Projet I.U.P 2007-2008
GESTION
D’UN AFFICHEUR LCD
AVEC
UN PIC 18F4550
Tuteur : M. ALIZON S.
MATHIEU Michael
BRIOUDE Loïc
Licence G.S.I
Université BLAISE PASCAL
Projet I.U.P 2007-2008
Remerciements
Nous remercions en particulier Monsieur ALIZON pour sa disponibilité ainsi que ses
conseils et sa pédagogie qui nous ont guidés et permis de comprendre au mieux le
fonctionnement du PIC et sa programmation.
Merci également à Monsieur VANDAELE qui a réalisé la carte électronique et qui
nous a permis de réaliser dans les meilleures conditions les différentes manipulations.
Nous exprimons notre reconnaissance à l’ensemble des enseignants qui nous ont
permis d’une manière ou d’une autre de réaliser notre projet.
Gestion d’un afficheur LCD avec un PIC
Remerciements
Projet I.U.P 2007-2008
Table des matières
1
INTRODUCTION................................................................................................ 4
2
PRESENTATION DU PROJET......................................................................... 5
2.1 OBJECTIF DU PROJET ........................................................................................... 5
2.2 MATERIEL UTILISE .............................................................................................. 6
2.3 EXEMPLE D’UTILISATION .................................................................................... 7
3
CONVERSION ANALOGIQUE NUMERIQUE.............................................. 9
3.1 LES REGISTRES UTILISES POUR LA CONVERSION ................................................ 11
3.1.1
3.1.2
3.1.3
Initialisation des ports entrées/sorties ..................................................... 11
Configuration de la conversion................................................................ 11
Récupération du résultat .......................................................................... 12
3.2 LES DIFFERENTES FONCTIONS ............................................................................ 13
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
La fonction ADC_INIT ............................................................................. 13
La fonction ADC_VOIE ........................................................................... 15
La fonction ADC_GO............................................................................... 15
La fonction WAIT_WHILE_BUSY ........................................................... 16
La fonction ADC_READ .......................................................................... 17
3.3 LE PROGRAMME PRINCIPAL ‘‘MAIN’’................................................................. 18
4
PROGRAMMATION DE L’AFFICHAGE SUR UN ECRAN LCD............ 19
4.1 LES FONCTIONS UTILISEES ................................................................................. 19
4.2 LE PROGRAMME D’AFFICHAGE .......................................................................... 20
5
CONCLUSION................................................................................................... 21
Gestion d’un afficheur LCD avec un PIC
Table des matières
Projet I.U.P 2007-2008
1 Introduction
Dans un avion de tourisme de nombreuses données sont essentielles au pilotage
comme la température et la pression d’huile, le niveau et la pression de l’essence. Celles-ci
sont transmises via des afficheurs à aiguilles traditionnels peu ergonomique et peu précis.
Afin de remédier à ces problèmes on souhaite faire parvenir ces renseignements au pilote par
l’intermédiaire d’un écran LCD, qui permet d’afficher une information de façon distincte.
Cependant l’ensemble des capteurs présents sur l’avion transmettent leurs données
sous la forme d’un signal analogique. Or l’écran LCD est un afficheur numérique, il faut donc
convertir les signaux analogiques en valeurs numériques, pour cela nous utiliserons un
microcontrôleur de type 18F4550.
Dans ce document nous aborderons tout d’abord les objectifs du projet en exposant le
travail à réaliser ainsi que les divers choix que nous avons fait durant l’étude. Nous
exposerons aussi l’ensemble du matériel utilisé ainsi que quelques exemples d’applications
simples réalisés afin de se familiariser avec celui-ci.
Ensuite nous nous intéresserons à la mise en œuvre du module de conversion
analogique numérique du PIC en programmant les registres utiles à l’application de ce
module. Puis nous étudierons les différentes fonctions utilisées afin de configurer au mieux
ces registres et la fonction principale qui permet de réaliser la conversion.
Enfin nous verrons comment programmer la gestion de l’affichage des données sur
l’écran en présentant dans une première partie les différentes fonctions et dans une seconde le
programme principal.
Gestion d’un afficheur LCD avec un PIC
Page 4/21
Projet I.U.P 2007-2008
2 Présentation du projet
2.1 Objectif du projet
Le but principal de ce projet est d’afficher sur l’écran LCD des valeurs données par
différents capteurs. Le travail à effectuer peut se décomposer en deux grandes parties. En effet
il faut tout d’abord réaliser la conversion de la mesure analogique du capteur en valeur
numérique. Puis ensuite il faut afficher cette valeur numérique sur l’écran LCD.
Afficheur LCD
CONVERSION
A/N
Figure 1 : Comparaison entre un afficheur à aiguilles et un afficheur numérique
Les avantages de l’afficheur numérique sont le gain de poids et de place ainsi qu’une
meilleure lisibilité.
Un micro contrôleur de la firme Microchip, lePIC 18F4550, sera utilisé afin de faire la
mise en forme et le formatage des signaux des capteurs. Ainsi à partir d’une valeur de tension
comprise entre 0 et 5 volts on obtiendra une grandeur physique dont l’unité sera appropriée.
Ce PIC dispose de nombreux modules permettant de réaliser diverses applications telles que
la conversion analogique numérique et la gestion de l’affichage d’un écran LCD. Afin que le
micro contrôleur puisse les réaliser il faut configurer les registres c'est-à-dire mettre les bits de
ceux-ci à 1 ou 0 en les programmant en langage C.
Ce programme est écrit et compilé avec le logiciel PCW. Ce logiciel est spécialisé
dans la programmation des PICs et il dispose d’un répertoire de fonctions prédéfinies qui
configurent automatiquement les différents registres nécessaires à l’opération désirée.
L’utilisation de ces fonctions prédéfinies facilite la programmation cependant de cette façon
elle ne permet pas de connaitre quels sont les registres configurés ni même comment ils sont
configurés.
Gestion d’un afficheur LCD avec un PIC
Page 5/21
Projet I.U.P 2007-2008
C’est pourquoi lors de notre étude nous avons choisi de ne pas utiliser les fonctions
prédéfinies du logiciel PCW (exemples : setup_adc(), adc_mode). Nous avons configuré les
registres utilisés bits à bits à l’aide de nos fonctions programmées en C qui seront ensuite
rappelées dans une fonction principale afin de réaliser le travail souhaité.
Le fait que nous ayons choisi d’écrire nous même dans les registres a nécessité une
étude plus approfondie de la data sheet du PIC. De plus ce mode de programmation nous a
permis d’apprendre à manipuler l’état des bits en utilisant des masques OU et des masques ET
et de mieux comprendre les opérations réalisées par le microprocesseur.
2.2 Matériel utilisé
Le PIC est placé sur une carte électronique qui permet de faciliter la programmation.
La carte est équipée de plusieurs diodes électroluminescentes (LED) qui permettent
d’observer l’évolution du travail du PIC et de la programmation, plusieurs entrées/sorties sont
disposées afin d’établir la communication entre le PIC, les capteurs et l’écran LCD. Cette
carte est alimentée en 5 Volts.
Afin de simuler les signaux délivrés par un capteur, une tension est envoyée sur une
entrée analogique. De plus un potentiomètre a été placé entre le générateur qui alimente la pic
et une entrée analogique (ici A0) afin de ne pas dépasser 5 volts, le PIC ne pouvant pas être
soumis à une tension supérieure.
POTENTIOMETRE
PIC
+ 5V
LEDS
ALIMENTATION
Masse 0V
A0
A1
A2
A3
Figure 2 : Carte électronique
Gestion d’un afficheur LCD avec un PIC
Page 6/21
Projet I.U.P 2007-2008
L’affichage est réalisé grâce à un écran à cristaux liquide aussi appelé écran LCD.
Celui qui nous a été fourni pour notre étude dispose de quatre lignes et vingt colonnes pour
afficher les données. L’écran est alimenté en 5 Volts par le PIC et connecté à celui-ci via la
carte électronique.
ECRAN LCD
Figure 3 : Ecran LCD
2.3 Exemple d’utilisation
Pour se familiariser avec l’utilisation du matériel ainsi qu’avec la programmation
plusieurs petits programmes ont été réalisés.
ALIMENTATION
ECRAN
LCD
PROGRAMMATEUR
ICD
CARTE
ELECTRONIQUE
Figure 4 : Dispositif expérimental
Gestion d’un afficheur LCD avec un PIC
Page 7/21
Projet I.U.P 2007-2008
Le programme suivant permet de faire une
électroluminescentes s’allument les unes à la suite des autres.
guirlande
où
les
diodes
#include <18F4550.h>
#fuses HSPLL, NOWDT, NOPROTECT, NOLVP, NODEBUG, USBDIV, PLL5, CPUDIV1,
VREGEN, NOBROWNOUT
#use delay(clock=48000000)
main ()
{
While(1)
{
output_high(pin_A0);
delay_ms(100);
output_low(pin_A0);
// Allume la diode reliée à la pin A0
// Attendre 100 ms
// Eteint la diode reliée à la pin A0
output_high(pin_A1);
delay_ms(100);
output_low(pin_A1);
// Allume la diode reliée à la pin A1
// Attendre 100 ms
// Eteint la diode reliée à la pin A1
output_high(pin_A2);
delay_ms(100);
output_low(pin_A2);
// Allume la diode reliée à la pin A2
// Attendre 100 ms
// Eteint la diode reliée à la pin A2
output_high(pin_A3);
delay_ms(100);
output_low(pin_A3);
// Allume la diode reliée à la pin A3
// Attendre 100 ms
// Eteint la diode reliée à la pin A3
output_high(pin_A4);
delay_ms(100);
output_low(pin_A4);
// Allume la diode reliée à la pin A4
// Attendre 100 ms
// Eteint la diode reliée à la pin A4
}
}
Figure 5 : Programme réalisant une guirlande
Dans un système embarqué il ne faut pas sortir du programme main sinon le compteur
programme continu d’incrémenter et des instructions erronées peuvent être exécutées. C’est
pour cela que le main se compose d’une boucle while(1) infinie qui dans cet exemple allume
tour à tour les leds. Lorsque la fonction output_high(X) est utilisée, le PIC délivre une
tension de 5V sur la pin X, ainsi la diode de la pin X s’allume. De la même façon le terme
output_low (Y) renvoi une tension nulle sur la pin Y, dans ce cas la led reliée à la pin Y
s’éteint. Enfin le delay_ms(T) permet d’attendre pendant un temps T afin de pouvoir observer
l’éclat des diodes à l’œil nu.
Gestion d’un afficheur LCD avec un PIC
Page 8/21
Projet I.U.P 2007-2008
3 Conversion analogique numérique
Un convertisseur analogique-numérique est un dispositif dont la fonction est de
convertir à partir d’une valeur analogique en entrée, une valeur numérique exploitable par un
ordinateur et proportionnelle à la valeur analogique d’entrée. Dans notre cas la valeur
analogique est une tension et le résultat de la conversion est codé sur dix bits.
Il existe plusieurs solutions pour effectuer cette conversion. Notre PIC utilise un
convertisseur à approximation successive qui utilise un processus de dichotomie, la tension
d’entrée est comparée avec la sortie du convertisseur par pesées successives. La technique
consiste à diviser successivement par deux l’intervalle de tension dans lequel est mesurée
l’entrée.
Tout d’abord le bit de poids fort du résultat est mis à 1, ensuite le convertisseur traduit
ce résultat en tension, celle-ci est alors comparée à la valeur d’entrée. Si la tension d’entrée
est supérieure à la tension du résultat alors le bit de poids fort est laissé à 1, dans le cas
contraire il est placé à l’état bas. La conversion se poursuit de la même façon avec le bit de
rang inférieur jusqu’au bit de poids faible.
Le temps nécessaire afin d’effectuer la conversion est 1 Tad par bit, de plus il faut
rajouter deux Tad avant de pouvoir effectuer une nouvelle conversion. Afin d’avoir une petite
marge de sécurité, nous avons configuré le temps de conversion à 16 Tad dans le registre
ADCON1.
Figure 6 : Temps de conversion
Gestion d’un afficheur LCD avec un PIC
Page 9/21
Projet I.U.P 2007-2008
Le convertisseur possède treize pins en entrée permettant de sélectionner la voie sur
laquelle est effectuée la conversion (CHS0:CHS3) et retourne le résultat sur 10 bits. Il est
aussi possible de choisir les tensions de références, dans le cadre de notre étude on utilise la
tension d’alimentation comme tension de référence (0 et 5 volts).
Figure 7 : Schéma du bloc diagramme du convertisseur
Le module de conversion comprend cinq registres :
Gestion d’un afficheur LCD avec un PIC
9
ADRESH
9
ADRESL
9
ADCON0
9
ADCON1
9
ADCON2
Page 10/21
Projet I.U.P 2007-2008
3.1 Les registres utilisés pour la conversion
3.1.1 Initialisation des entrées/sorties
La direction des entrées/sorties est paramétrée par les registres TRISX où X défini le
port à régler. Pour notre étude seul le port A sera configuré donc le registre concerné est
TRISA. Il s’agit d’un registre comportant huit bits, dont chacun configure la direction des
pins A0 à A7 du port A. Si le bit est à l’état haut alors la pin est une entrée et si l’est à l’état bas
c’est une sortie.
Dans le cadre de notre étude les pins A0, A1, A2 et A3 seront positionnées en entrée
afin de récupérer les signaux émis par les capteurs de l’avion. Les quatre premiers bits du
registre TRISA seront donc mis à 1.
X
X
X
TRISA
X
1
A3
1
A2
1
A1
1
A0
Figure 8 : Le registre TRISA
3.1.2 Configuration de la conversion
Les registres de configuration sont : ADCON0, ADCON1 et ADCON2, ils permettent
d’initialiser les paramètres de la conversion.
Pour le registre ADCON0 les bits 7 et 6 ne sont pas utilisés, les bits de 5 à 2
permettent de sélectionner la voie analogique dont le signal va être converti. L’état du bit 0
indique si le convertisseur est prêt, si c’est le cas il est à 1 si non à 0. Enfin le bit 1 montre si
la conversion est en cours (bit à 1) ou si elle est terminée (bit à 0), le statut de ce bit n’a pas
d’importance si le bit 0 est à l’état bas.
Figure 9 : Le registre ADCON0
Gestion d’un afficheur LCD avec un PIC
Page 11/21
Projet I.U.P 2007-2008
Dans le registre ADCON1 les bits 6 et 7 ne sont pas utilisés, les bits 4 et 5 permettent
d’initialiser les tensions de référence s’ils sont à l’état bas alors 0 et 5 Volts seront les valeurs
des tensions utilisées lors de la conversion, dans le cas contraire les tensions de référence sont
aux bornes des pins A2 et A3. Enfin les 4 autres bits servent à configurer les pins en entrée
analogique ou en entrée/sortie numérique.
Figure 10 : Le registre ADCON1
Le registre ADCON2 règle la justification du résultat délivré par la conversion en
effet si le bit 7 est à 1 alors le résultat est justifié à droite dans le cas contraire la justification
est à gauche. Le bit 6 n’est pas utilisé. Les bits 3 à 5 servent à ajuster le temps d’acquisition
du signal analogique et les bits de 2 à 0 permettent de choisir la fréquence de l’horloge de
conversion.
Figure 11 : Le registre ADCON2
3.1.3 Récupération du résultat
Une fois que le PIC à terminé la conversion (temps de conversion) il écrit le résultat
numérique (10 bits) dans deux registres de huit bits : ADRESH et ADRESL. Le résultat
d’une conversion est codé sur dix bits donc il est nécessaire de réaliser une concaténation des
deux registres, en sachant que ADRESH contient les bits de poids forts et ADRESL ceux de
poids faibles.
ADRESH
b9
b8
b7
b6
b5
ADRESL
b4
b3
b2
b1
b0
Figure 12 : Les registres ADREH et ADRESL
De plus la justification du résultat paramétrée dans le registre ADCON2 est choisie à
droite.
Gestion d’un afficheur LCD avec un PIC
Page 12/21
Projet I.U.P 2007-2008
3.2 Nos différentes fonctions
La conversion s’effectue en différentes étapes :
9 Initialisation des registres ADCONX et TRISA
9 Choix de la voie sur laquelle la conversion est réalisée
9 Lancement de la conversion
9 Attente de la fin de conversion
9 Récupération de la valeur numérique
Afin d’accomplir ces étapes des fonctions sont écrites, elles seront ensuite appelées
dans la fonction principale (main).
3.2.1 La fonction ADC_INIT
Cette fonction permet d’initialiser les registres ADCONX et TRISA. Comme nous
l’avons vu précédemment on souhaite que les quatre premiers bits de b0 à b3 du registre
TRISA soit à l’état haut, un masque OU avec 0x0F est alors réalisé sur le registre TRISA.
TRISA
OU
TRISA
X
0
X
X
0
X
X
0
X
X
0
X
X
1
1
X
1
1
X
1
1
X
1
1
Figure 13 : Configuration du registre TRISA
Pour que la conversion puisse débuter il faut placer le bit 0 de ADCON0 à 1. Cette
opération est réalisée grâce à un masque OU avec 0x01, le principe de fonctionnement est le
même que pour le registre TRISA.
Ensuite le registre ADCON1 est lui aussi réglé de telle sorte que les tensions de
référence soit 0 et 5Volts, pour cela les bits 4 et 5 sont placés à 0. De plus on écrit 1011
respectivement dans les bits b3 à b0 afin d’avoir les pins A0 à A3 en entrée analogiques.
ADCON1
X
X
0
0
1
0
1
1
Figure 14 : configuration du registre ADCON1
Gestion d’un afficheur LCD avec un PIC
Page 13/21
Projet I.U.P 2007-2008
Pour le registre ADCON2 le bit 7 est à 1 car la justification se fait à droite. Ensuite,
les bits 5 à 3 sont placés à 110 afin de régler le temps de conversion à 16 Tad. Le temps Tad
est dérivé par division de l’horloge principale et il possible de paramétrer le diviseur. Plus le
diviseur est petit et plus le temps Tad est court, cependant pour des raisons électronique Tad
ne peut descendre indéfiniment. Pour notre étude le diviseur sera choisi égal à soixante quatre,
les bits 0 à 2 sont mis à 110. Le bit 6 n’est pas utilisé.
ADCON2
1
0
1
1
0
1
1
0
Figure 15 : Configuration du registre ADCON2
L’ensemble des configurations décrites ci-dessus, est exécuté grâce à la fonction
ADC_INIT.
void adc_init( void)
{
#byte _adcon0 = 0xFC2
#byte _adcon1 = 0xFC1
#byte _adcon2 = 0xFC0
#byte trisA = 0xF92
trisA = trisA|0x0F;
// INIT TRISA
_adcon1=0x0B;
// INIT ADCON1
_adcon2=0xBE;
// INIT ADCON2
_adcon0 |= 1;
// permettre le conversion
}
Figure 16 : Fonction ADC_INIT
Gestion d’un afficheur LCD avec un PIC
Page 14/21
Projet I.U.P 2007-2008
3.2.2 La fonction ADC_VOIE
Cette fonction permet de choisir la voie sur laquelle on souhaite effectuer une
conversion. Pour cela la variable voie est décalée de deux bits vers la gauche pour se
positionner sur le champ voie de ADCON0. Puis un masque ET avec 0x3C est réalisé afin de
mettre les autres bits à 0. Ensuite le résultat obtenu est recopié dans le registre ADCON0
grâce à un masque OU qui permet de conserver la valeur des autres bits.
VOIE
VOIE<<2
ET 0x3C
=
X
X
0
0
X
X
0
0
X
X CHx CHx CHx CHx
X
CHx CHx CHx CHx X
1
1
1
1
0
0
CHx CHx CHx CHx 0
0
OU ADCON0
ADCON0
0
0
0
0
0
0
CHx CHx CHx CHx
0
0
0
0
CHx CHx CHx CHx
0
0
0
0
1
1
Figure 17 : Sélection de la voie
Ces manipulations sont réalisées en exécutant la fonction suivante.
void adc_voie(int8 voie)
{
#byte _adcon0 = 0xFC2;
// l’adresse de ADCON0 : 0xFC2
_adcon0 = _adcon0 | ((voie<<2) & 0X3C);
// Sélection de la voie
}
Figure 18 : Fonction ADC_VOIE
3.2.3 La fonction ADC_GO
Après avoir sélectionné la voie, il faut lancer la conversion. Pour cela il faut mettre le
bit 1 de ADCON0 à l’état haut grâce à un masque OU.
ADCON0
OU 0x02
ADCON0
0
0
0
0
0
0
CHx CHx CHx CHx
0
0
0
0
CHx CHx CHx CHx
0
1
1
1
0
1
Figure 19 : Lancement de la conversion
Gestion d’un afficheur LCD avec un PIC
Page 15/21
Projet I.U.P 2007-2008
La fonction ADC_GO de la figure suivante accomplie cette tâche.
void adc_go(void)
{
#byte _adcon0 = 0xFC2
// l’adresse de ADCON0 : 0xFC2
_adcon0 = _adcon0 | 0x2;
// Lancement de la conversion
}
Figure 20 : Fonction ADC_GO
3.2.4 La fonction WAIT_WHILE_BUSY
Cette fonction permet d’attendre que la conversion soit terminée. Un test sur le bit 1 de
ADCON0 est réalisé tant que celui-ci est à l’état haut on attend dans la boucle while qui est
vide. Lorsque ce bit change d’état on sort alors de la boucle et on peut passer à l’instruction
suivante.
void adc_wait_while_busy(void)
{
#byte _adcon0 = 0xFC2
// l’adresse de ADCON0 : 0xFC2
while( _adcon0 & 2)
{ }
}
Figure 21 : Fonction WAIT_WHILE_BUSY
Gestion d’un afficheur LCD avec un PIC
Page 16/21
Projet I.U.P 2007-2008
3.2.5 La fonction ADC_READ
Une fois la conversion terminée, il faut récupérer le résultat qui est stocké dans deux
registres de 8 bits ADSRL et ADSRH. Il faut donc recopier les bits de ces registres dans un
mot de 16 bits en réalisant un décalage et un masque ET.
0
CONCAT
CONCAT <<8
ET 0xFF00
CONCAT =
CONCAT +
ADSRL
CONCAT =
0
ADSRH
ADSRL
0 0 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
X X X X X X X X
0 0 0 0 0 0 B9 B8
1 1 1 1 1 1 1 1
0 0 0 0 0 0 B9 B8
0
0
0
0
0
0
0
0
0
0
0 0 0 0 0 0 B9 B8
X X X X X X X X
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 B9 B8 0 0 0 0 0 0 0 0
B7 B6 B5 B4 B3 B2 B1 B0
0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
Figure 22 : Récupération du résultat
La fonction ADC_READ est présentée ci-dessous.
int16 adc_read(void)
{
long concat;
#byte _adresl = 0xFC3
#byte _adresh = 0xFC4
// l’adresse de ADRESL : 0xFC3
// l’adresse de ADRESH : 0Xfc4
concat = _adresh;
concat = ((concat<<8)& 0xFF00) + _adresl;
// place le résultat dans concat
return(concat);
// retourne le résultat
}
Figure 23 : fonction ADC_READ
L’opération permettant la concaténation direct des deux registres ADRESL et
ADRESH dans une variable de seize bits pourrait également être effectuée avec la fonction
make16 du logiciel.
Gestion d’un afficheur LCD avec un PIC
Page 17/21
Projet I.U.P 2007-2008
3.3 Le programme principal ‘‘main’’
Le main est le programme principal ou sont utilisées les fonctions décrites dans le
paragraphe précédent. Tout d’abord la fonction adc_init() est appelée afin d’initialisée les
registres qui permettent de réaliser la conversion analogique numérique. Ensuite, on insère
dans une boucle while infinie les fonctions permettant de choisir la voie sur laquelle on fait la
conversion, de la lancer et de récupérer le résultat.
void main (void)
{
int16 resultat;
resultat=0;
adc_init();
while(1)
{
adc_voie(0);
adc_go();
adc_wait_while_busy();
resultat=adc_read();
}
// Initialisation des registres
// Choix de la voie
// Lancement de la conversion
// Attend la fin de la conversion
// stock la valeur numérique dans résultat
}
Figure 24 : Programme principal
Gestion d’un afficheur LCD avec un PIC
Page 18/21
Projet I.U.P 2007-2008
4 Programmation de l’affichage sur un écran LCD
Etant donné le retard que nous avons pris lors du projet, les fonctions utilisées afin de
procéder à l’affichage des résultats ont été fournies par M. VANDAELE. C’est pourquoi les
explications de la programmation de l’affichage seront moins détaillées que dans la partie
précédente.
4.1 Les fonctions utilisées
Les différentes fonctions utilisées sont :
9 Lcd_com
9 Lcd_init
9 Lcd_clear
9 Gotoxy
9 Lcd_putc et lcd_putchar
La fonction lcd_com permet d’écrire dans le registre de configuration de l’afficheur et
donc d’assurer la communication entre le PIC et l’écran LCD.
La fonction d’initialisation de l’écran lcd_init() a été réalisé en suivant les instructions
données dans la data sheet de l’afficheur LCD.
La fonction lcd_clear permet simplement d’effacer l’écran.
Afin de pouvoir écrire sur l’écran à l’endroit souhaité, la fonction goto_xy(int row,int
col) a été créé pour positionner le curseur sur la ligne sur et la colonne voulues. Les variables
row et col indiquent respectivement la ligne et la colonne sur lesquelles le curseur est
positionné.
Enfin les fonctions lcd_putchar(char c) et lcd_putc(int16 c) permettent d’écrire
respectivement sur l’écran un chaîne de caractère (exemple : « Températue ») ou alors le
résultat de la conversion effectée sur 10 bits (exemple : 1024).
Gestion d’un afficheur LCD avec un PIC
Page 19/21
Projet I.U.P 2007-2008
4.2 Le programme d’affichage
Le programme suivant réalise l’affichage d’un texte fixe indiquant des exemples de
grandeurs physiques pouvant être utiles dans un avion, ainsi que le résultat en valeur
numérique de la tension délivrée par le capteur. La fréquence d’échantillonnage est choisie à
100Hz afin d’avoir un rafraîchissement assez rapide sans pour autant avoir un phénomène de
scintillement à l’écran.
void main()
{
int16 resultat;
float conversion;
adc_init();
lcd_init();
lcd_clear();
// initialisation du convertisseur
// initialisation du LCD
// nettoyage écran
goto_xy(1,9);
lcd_putchar("Temperature : ");
goto_xy(2,1);
lcd_putchar("Pression : ");
goto_xy(3,1);
lcd_putchar("Niveau : ");
goto_xy(4,1);
lcd_putchar("Vitesse : ");
// positionnement du curseur
// écriture du caractère
while(1)
{
resultat=0;
// initialisation résultat
adc_voie(0);
adc_go();
adc_wait_while_busy();
resultat=adc_read();
/*
conversion=(5*resultat)/1024.0;
// exprime le résultat en valeur décimale
goto_xy(1,14);
printf(lcd_putc," %f V" ,conversion);
delay_ms(10);
// écriture du résultat sur l’écran
// échantillonnage à 100Hz
CONVERSION
A/N
*/
}
}
Figure 25 : Programme réalisant l'affichage
Gestion d’un afficheur LCD avec un PIC
Page 20/21
Projet I.U.P 2007-2008
5 Conclusion
Ce projet avait pour but de récupérer la réponse en tension des capteurs, et d’afficher
les grandeurs physiques mesurées. De plus sur un écran LCD les données affichées sont
exclusivement numériques c’est pourquoi il est nécessaire de faire une conversion analogique
numérique. Nous avons donc réalisé la programmation du PIC afin que celui-ci convertisse
les réponses analogiques des capteurs en valeurs numériques, puis les affiche sur l’afficheur
LCD.
Cependant, il serait possible d’approfondir cette étude en prévoyant une
programmation via une table de correspondance pour des capteurs n’ayant pas forcément une
réponse linéaire et aussi en réalisant la gestion de capteurs impulsionnels comme les comptes
tours et les compteurs de vitesse.
Aussi, nous avons rencontré des problèmes lors de la prise en main de la carte
électronique et pour la compréhension de la documentation nécessaire à la configuration des
registres par l’intermédiaire du langage C.
Enfin, ce projet nous a permis d’apprendre à utiliser un microprocesseur dans un but
pratique et de se confronter à des datasheets en anglais. De plus le choix d’effectuer cette
programmation à travers la configuration des différents registres nous a permis une meilleure
compréhension du fonctionnement d’un microcontrôleur.
Gestion d’un afficheur LCD avec un PIC
Page 21/21
Projet I.U.P 2007-2008
Bibliographie
Sites Web consultés :
9 www.wikipedia.org
9 www.abcelectronique.com
Ouvrages consultés :
9 Datasheet PIC 18F4550 par la Société MICROCHIP
9 Notice d’utilisation de l’écran LCD par DISPLAYTECH
9 Programmation des PIC par BIGONOFF
9 Manuel d’aide à PIC C Compiler par CCS
Gestion d’un afficheur LCD avec un PIC
Bibliographie
Projet I.U.P 2007-2008
Table des illustrations
Figure 1 : Comparaison entre un afficheur à aiguilles et un afficheur numérique ......... 5
Figure 2 : Carte électronique .......................................................................................... 6
Figure 3 : Ecran LCD ..................................................................................................... 7
Figure 4 : Dispositif expérimental.................................................................................. 7
Figure 5 : Programme réalisant une guirlande ............................................................... 8
Figure 6 : Temps de conversion ..................................................................................... 9
Figure 7 : Schéma du bloc diagramme du convertisseur.............................................. 10
Figure 8 : Le registre TRISA........................................................................................ 11
Figure 9 : Le registre ADCON0 ................................................................................... 11
Figure 10 : Le registre ADCON1 ................................................................................. 12
Figure 11 : Le registre ADCON2 ................................................................................. 12
Figure 12 : Les registres ADREH et ADRESL ............................................................ 12
Figure 13 : Configuration du registre TRISA............................................................... 13
Figure 14 : configuration du registre ADCON1........................................................... 13
Figure 15 : Configuration du registre ADCON2.......................................................... 14
Figure 16 : Fonction ADC_INIT.................................................................................. 14
Figure 17 : Sélection de la voie .................................................................................... 15
Figure 18 : Fonction ADC_VOIE ................................................................................ 15
Figure 19 : Lancement de la conversion....................................................................... 15
Figure 20 : Fonction ADC_GO .................................................................................... 16
Figure 21 : Fonction WAIT_WHILE_BUSY .............................................................. 16
Figure 22 : Récupération du résultat ............................................................................ 17
Figure 23 : fonction ADC_READ................................................................................ 17
Figure 24 : Programme principal.................................................................................. 18
Figure 25 : Programme réalisant l'affichage................................................................. 20
Gestion d’un afficheur LCD avec un PIC
Table des illustrations
Projet I.U.P 2007-2008
Annexes
Gestion d’un afficheur LCD avec un PIC
page 1/
Projet I.U.P 2007-2008
GANTT EFFECTUE PENDANT LE PROJET
Choix et découverte du
sujet
Documentation PIC et LCD
Prise en main de la carte
électronique
Ecriture programmes tests
Ecriture programme de
conversion A/N
Compréhension du
programme d'affichage
Rédaction du rapport
Préparation de l'oral
08
20
6/
/0
06
08
20
5/
/0
30
08
20
5/
/0
23
08
20
5/
/0
16
08
20
5/
/0
09
08
20
5/
/0
02
08
20
4/
/0
25
08
20
4/
/0
18
08
20
4/
/0
11
08
20
4/
/0
04
08
20
3/
/0
28
08
20
3/
/0
21
08
20
3/
/0
14
08
20
3/
/0
07
GANTT PREVISIONNEL DU PROJET
Choix et découverte du
sujet
Documentation PIC et LCD
Prise en main de la carte
électronique
Ecriture programmes tests
Ecriture programme de
conversion A/N
Ecriture programme
d'affichage LCD
Rédaction du rapport
Préparation de l'oral
/0
06
6/
5/
08
20
08
20
08
20
08
20
08
20
08
20
5/
5/
5/
5/
08
20
08
20
08
20
4/
4/
/0
30
/0
23
/0
16
/0
09
/0
02
/0
25
/0
18
4/
08
20
08
20
08
20
08
20
08
20
4/
3/
3/
3/
3/
/0
11
/0
04
/0
28
/0
21
/0
14
/0
07
Gestion d’un afficheur LCD avec un PIC
page 2/
Projet I.U.P 2007-2008
Gestion d’un afficheur LCD avec un PIC
page 3/
Projet I.U.P 2007-2008
Gestion d’un afficheur LCD avec un PIC
page 4/
Projet I.U.P 2007-2008
Gestion d’un afficheur LCD avec un PIC
page 5/
Projet I.U.P 2007-2008
Gestion d’un afficheur LCD avec un PIC
page 6/
Projet I.U.P 2007-2008
Gestion d’un afficheur LCD avec un PIC
page 7/