You are on page 1of 46

Master Sciences de l'information Universit

et des Systmes Paul Czanne

Travaux Pratiques
de
Microcontrleur

Julien Marot Marc Allain


julien.marot@fresnel.fr marc.allain@fresnel.fr
Formation au dveloppement d'applications en Assembleur et C sur un microcontrleur Mircrohip PIC 18F4520 en
utlisant l'environnement MPLAB IDE et le compilateur C18.

Table des matires


1. Avant de commencer..................................................................................................................... 1

2. Le Matriel..................................................................................................................................... 1
2.1. Le Kit PICDEM 2 Plus et PIC 18F4520..................................................................................1
2.2. MPLAB Integrated Development Environment...................................................................... 1
2.3. Le programmateur PICSTART Plus........................................................................................2
3. Gestion de vos fichiers...................................................................................................................2

4. TP n1 : Initiation MPLAB IDE............................................................................................... 3


4.1. Programme Interrupteur .....................................................................................................3
4.2. dition et Compilation du programme.................................................................................... 4
4.3. Simulation................................................................................................................................ 5
4.4. Programmation du microcontrleur.........................................................................................7
4.5. Programme Clignotant ....................................................................................................... 8
5. TP n2 : Ecriture d'un driver pour LCD.................................................................................. 11
5.1. Les afficheurs LCD................................................................................................................11
5.2. Fonctions de gestion.............................................................................................................. 12
5.3. crire une chaine de caractres..............................................................................................16
6. TP n3 : Interruptions et Priphriques....................................................................................17
6.1. Programme Clignotant avec interruption.........................................................................17
6.2. Chronomtre.......................................................................................................................... 18
6.3. Gnrer un signal rectangulaire avec un module PWM........................................................ 19
6.4. Utilisation du module de conversion A/D............................................................................. 20
6.5. Gestion d'interruptions multiples........................................................................................... 20
7. TP n4 : Initiation la programmation en langage C..............................................................22
7.1. Introduction : assembleur et compilateur C........................................................................... 22
7.2. Gnration d'un signal carr.................................................................................................. 23
7.3. dition et Compilation du programme.................................................................................. 24
7.4. Simulation et programmation du micro-contrleur............................................................... 25
7.5. Applications........................................................................................................................... 25
8. TP n5 : Gestion de Priphriques et Interruptions.................................................................27
8.1. Communication srie : RS232............................................................................................... 27
8.2. Applications........................................................................................................................... 29
9. TP n6 : Panneau d'affichage lumineux.................................................................................... 31
9.1. Gestion de l'afficheur LCD.................................................................................................... 31
9.2. Gestion de l'EEPROM........................................................................................................... 33
9.3. Panneau d'affichage............................................................................................................... 34
10. TP n7 : Station Service............................................................................................................ 36
10.1. Automate de Pompe.............................................................................................................36
10.2. Communication avec l'automate de caisse...........................................................................37
Travaux Pratiques de Microcontrleur PIC 18F4520

1. Avant de commencer

Ces sances de travaux pratiques (TP) sont destines illustrer les notions qui vous ont t prsentes en cours.
Pour cela, vous aurez concevoir et tester un certain nombre de programmes soit en langage assembleur soit en
langage C.

Pour chaque tche que vous aurez raliser, nous vous invitons enregistrer votre programme sous un nom
particulier pour garder une sauvegarde de travail. Pour faciliter le dbogage et assurer la maintenance et la portabilit de
vos codes, il est primordial que vous commenciez par rdiger un algorigramme, que vous commentiez clairement votre
programme et que vous pensiez le rendre le plus clair possible (ex : en choisissant des noms appropris pour les
labels).

Concernant l'valuation de votre travail, nous vous demanderons de nous prsenter le programme
correspondant chaque tche que vous aurez programmer sur le simulateur ou sur le kit de dmonstration (cf. plus
bas). Nous corrigerons galement vos codes en portant une attention particulire la lisibilit (pensez donc aux
commentaires !). Enfin, vous devrez galement nous rendre les algorigrammes qui correspondent aux codes.

2. Le Matriel

2.1. Le Kit PICDEM 2 Plus et PIC 18F4520


Le kit PICDEM 2 Plus est un kit simple qui permet de mettre en vidence les capacits de diffrents micro-
contrleurs du fabricant Microchip travers divers priphriques et accessoires reproduits sur le schma de la figure 1.

Reset MCLR

LEDs
Entre Analogique RB0...RB3
RA0 Contrles
Poussoirs RA1...RA3
RA4, RB0
Microcontrleur LCD
Donnes (Liquid Crystal Display )
RS232 RD0...RD3
RC6, RC7 Buzzer
RC2

RB6,
ICD Bus I2C
(In Circuit Debugger) RB7
RC4, RC3
RC5

Capteur de
Temprature
Figure 1: Le kit PICDEM 2 Plus, Priphriques et Accessoires

Le micro-contrleur utilis est le PIC18F4520 de Microchip. C'est un micro-contrleur 8 bits disposant d'une
mmoire de programme de 32 Ko, de 1536 octets de RAM (Random Access Memory), d'une EEPROM (Electrically
Erasable Programmable Read Only Memory) de 256 octets et de 36 entres/sorties.

Une part importante de la difficult pour programmer un micro-contrleur rside dans l'acquisition
d'informations. Pour acqurir cette comptence, nous vous invitons vous rfrer frquemment la documentation
technique du micro-contrleur, ainsi qu' la documentation technique de la carte d'valuation, cf. les documentations
lectroniques.

M1 SIS 1 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

2.2. MPLAB Integrated Development Environment


MPLAB IDE est un environnement gratuit de programmation pour les micro-contrleurs de la famille
Microchip. Lenvironnement intgre un diteur dassembleur, un dbogueur complet ainsi que tous les outils permettant
de grer les programmateurs de composants. La possibilit dintgrer un compilateur C dans lenvironnement de
dveloppement MPLAB sinscrit directement dans la politique du service qui est dutiliser des langages de
programmation volus dans les dveloppements en lectronique.

2.3. Le programmateur PICSTART Plus


Il permet de transfrer le programme directement de MPLAB dans le micro-contrleur via le port srie (RS232)
d'un PC.

3. Gestion de vos fichiers


Pour chacun des binmes, un compte utilisateur a r cr. Pour ne pas oublier votre nom d'utilisateur et votre
mot de passe. vous pouvez le noter ci-dessous. Attention windows faire la diffrence entre les majuscules et les
minuscules.

Nom d'utilisateur :

Mot de passe :

Avec votre compte vous avez droit un espace de stockage sur le serveur. Cette espace de sotckage apparait
dans Poste de Travail sous le nom de voir le nom . C'est ici que vous devez stocker tous vos documents afin
qu'ils vous soient disponibles sur toutes les machines de TP.

Il vous est fortement conseill de bien ranger vos documents tout au long des sances. pour chacun des TP, fates un
rpertoire associ ex: tp3 pour le tp n3. Puis pour chaque question si c'est ncessaire fates des sous rperoires
question5 par exemple.

Les documentations techniques ncessaires au TP sont disponibles


l'adresse:e:http://www.lsis.org/master/index.php?espace_etudiant=1&doc=103

M1 SIS 2 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
ASM
4. TP n1 : Initiation MPLAB IDE
Le but de ce TP est de se familiariser avec la suite logicielle MPLAB Integrated Development Environment
(v7.6) de Microchip afin de pouvoir utiliser les fonctions de bases de cet outil dveloppement savoir : crer un projet,
diter et compiler un programme en assembleur, simuler son fonctionnement et enfin programmer le microcontrleur
(C). Les diffrentes fonctions sont expliques travers deux programmes qui vous sont donns.

4.1. Programme Interrupteur


Le programme Interrupteur boucle linfini sur les tches ci-dessous afin de reproduire le fonctionnement
dun interrupteur.
Tche 1 : lire ltat du bouton poussoir S2, broche RA4
Tche 2 : si le bouton est appuy, on allume la diode lectro-luminescente (LED) L1, broche RB0, sinon on
lteint.

On notera que les boutons poussoirs sont branchs au microcontrleur en logique ngative. L'tat bouton
appuy correspond donc un 0 logique. Les LED sont cbles en logique positive, elles s'allument pour un 1 logique.
Le fonctionnement demand peut tre reproduit par l'algorigramme ci-dessous.

Initialisation du C

oui RA4 = 0 non


S2 appuy

RB0 = 1 RB0 = 0
Allumer L1 Eteindre L1

Figure 2: Algorigramme du programme Interrupteur

L'algorigramme peut se traduire en assembleur de la manire suivante :

LIST P=18F4520 Dfinition du C utilis, des constantes spcifiques au C et des


#include <P18F4520.inc>
#include <CONFIG.inc> paramtres de configuration encods lors de la programmation.

org h'0000' Adresse de dpart aprs un reset du C.


init clrf PORTB
movlw b'00000000' Initialisation :
movwf TRISB
clrf PORTA Remise zro des bascules D des diffrents ports utiliss et
movlw b'00010000' configuration des entres/sorties.
movwf TRISA
boucle btfsc PORTA,4
goto eteindre
bsf PORTB,0
goto boucle
eteindre bcf PORTB,0 Boucle infini :
goto boucle Allume ou teint la LED en fonction de ltat du bouton poussoir.
END

Tout au long des travaux pratiques, nous vous demandons d'tablir un glossaire des
diffrentes instructions rencontres avec leur explication en franais. Ce glossaire vous sera
trs utile pour les diffrents programmes que vous serez amener raliser.

M1 SIS 3 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

4.2. dition et Compilation du programme


Cette partie permet d'apprendre crer un projet MPLAB, saisir un programme en assembleur et le compiler.
4.2.1. Dmarrage
Avant de commencer, crer le rpertoire tp1 puis dans ce rpertoire crer nouveau un rpertoire
interrupteur.
Copier dans ce dernier rpertoire les fichiers P18F4520.inc et CONFIG.inc
Lancer la suite logicielle MPLAB IDE partir de licne qui se trouve sur votre bureau.

4.2.2. Cration dun nouveau projet avec Project Wizard


Cliquer sur Project >> Project Wizard
Cliquer sur Suivant > puis slectionner PIC18F4520 dans le menu droulant Device.
Cliquer sur Suivant > puis slectionner Microchip MPASM Toolsuite et MPASM Assembler afin de
pouvoir programmer en Assembleur.
Cliquer sur Suivant > puis dans le champ Project Name saisir le nom du projet (ex : interrupteur) et
dans le champ Project Directory aller chercher laide du bouton Browse , le dossier cr au dbut :
tp1/interrupteur.
Cliquer sur Suivant > et ajouter les fichiers P18F4520.inc et CONFIG.inc au projet laide du bouton
Add >>
Cliquer sur Suivant > puis sur Terminer.
4.2.3. dition du programme
Crer un nouveau fichier dans le projet, File >> Add New Files to Project
Lenregistrer dans le rpertoire projet avec lextension asm (ex : prog.asm)
MPLAB Editor se lance
Saisir le programme Interrupteur et enregistrer.

Penser ajouter des commentaires au programme pour montrer que vous avez bien compris les diffrentes
instructions. Une ligne de commentaire commence par ; .

Workspace
Output
Architecture et
Interface
contenu du projet
MPLAB Dveloppeur

Editor
Edition des fichiers
de programme,
de configuration,

Figure 3: MPLAB IDE, Mode Edition

4.2.4. Compilation
Cliquer sur Project >> Build All ou sur licne de la barre de menu ou encore Ctrl+F10 pour
compiler le projet complet. Erreurs et warnings sont signals dans la fentre Output ainsi que le rsultat de
la compilation BUILD SUCCEEDED ou BUILD FAILED.

En double-cliquant sur une erreur ou un warning dans la fentre Output, vous serez amener directement la

M1 SIS 4 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

ligne concerne dans votre programme.

4.3. Simulation
Avant denvoyer un programme au C, vous pouvez tester son fonctionnement dans le simulateur (Debugger)
MPLAB SIM. Pour lancer le simulateur, cliquer sur Debugger >> Select Tool >> MPLAB SIM. Une nouvelle barre
doutils est ajoute ainsi quun onglet MPLAB SIM dans la fentre Output. Le simulateur fonctionne selon trois
modes :

le mode Step By Step qui permet de faire une excution pas pas du programme (vous tes alors lhorloge
du C).
le mode Animate qui excute automatiquement le programme mais une vitesse rduite pour que lon
puisse suivre l'xcution.
le mode Run o le programme est excut automatiquement la vitesse du PC.

Dans les deux premiers modes, nous obtenons des rsultats au fur et mesure de la simulation alors que dans le
dernier, les rsultats ne sont visibles que lorsque la simulation est stoppe. Dans ce paragraphe, nous nous intressons
aux modes Animate et Step By Step car ils nous permettent de voir quelle est linfluence des entres sur les sorties.
Le rglage de la frquence de loscillateur utilis se fait dans Debugger >> Settings . Dans notre cas cest 4
Mhz.

4.3.1. Entres : Stimulus


Comme son nom lindique cette fonctionnalit permet de prvoir les vnements d'entres de manires
synchrones (les dates sont connues avant la simulation) et asynchrones (les vnements sont dclenchs durant la
simulation par lutilisateur). Les diffrents vnements sont enregistrs dans une table (Workbook). Pour en crer une,
cliquer sur Debugger >> Stimulus >> New Workbook.
Dans le cadre du projet interrupteur on souhaite crer les vnements suivants :

t = 0, initialisation de RA4 1 (bouton S2 relch),


t = 10 cycles, on appuie sur S2 (RA4 = 0),
t = 25 cycles, on relche le bouton (RA4 = 1).
on veut galement pouvoir inverser ltat de RA4 quand on le souhaite.

Longlet Pin / Register Actions de la fentre Stimulus permet la saisie des vnements en programmant
leurs dates darrive (vnements synchrones).

Dmarche de cration dvnements synchrones :

Ajouter une colonne RA4 au tableau dvnement (bouton Clic here to Add Signals )
Rechercher RA4 dans la liste Available Signals et lajouter la liste Selected Signals
Remplir la table dvnement (Time, RA4) avec (0,1) (10,0) (25,1)
Choisir cyc (cycle) comme base de temps dans menu Time Units
Enregistrer la table (bouton Save Workbook )

Longlet Asynch de la fentre Stimulus permet de pr-programmer des boutons (colonne Fire ) la
gnration dvnement (vnements asynchrones).
Dmarche de cration dvnement asynchrone :

Saisir RA4 dans la colonne Pin/SFR de la premire ligne


Le menu de la colonne Action propose cinq types daction :
Set High : RA4 = 1
Set Low : RA4 = 0
Toggle : RA4 = RA4
Pulse High : RA4 = la largeur de limpulsion est rgle dans les
Pulse Low : RA4 = colonnes Width et Units .
Choisir Toggle pour inverser RA4
Enregistrer la table (bouton Save Workbook )

M1 SIS 5 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Appliquer lchancier dvnement (bouton Apply )

Aprs chaque changement dans lchancier dvnement, cliquer sur Apply afin que ces changements
soient pris en compte par la simulation.

Dclencher

Figure 4: Stimulus Synchrones et Asynchrone

4.3.2. Sorties : Watch & Logic Analyzer


Afin de suivre et de visualiser les rsultats de simulation, MPLAB SIM intgre divers outils dont :
La fentre Watch (menu View >> Watch) qui affiche le contenu des diffrents registres du C et des
diffrentes variables du programme. La slection et la validation des registres et variables afficher se fait
travers les deux menus droulants et les deux boutons Add SFR et Add Symbol . Un clic droit sur un
des lments observs permet laccs la bote de dialogue Properties afin de rgler le format
daffichage de llment (ex : Hex, Binary, Single Bit, ...) mais aussi de sauvegarder, exporter, le
tableau Watch . Il est aussi possible de faire glisser des lments de la fentre Editor vers la fentre
Watch .
La fentre Logic Analyzer permet laffichage des lments logiques (1 bit) en fonction du Time
Base . Le choix des lments afficher se fait laide du bouton Channels .

Pour le projet interrupteur , on souhaite afficher :

les registres TRISA et TRISB sous forme hexadcimale


les registres PORTA, PORTB et W sous forme binaire
les bits RA4 et RB0

Configurer correctement les fentres Watch et Logic Analyzser .

M1 SIS 6 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

4.3.3. Simulation du programme en mode Animate


Maintenant que les entres et sorties de la simulation sont configures, on peut lancer la simulation. Avant toutes
choses, afin dinitialiser le C, il est ncessaire deffectuer un Reset en cliquant sur le bouton puis cliquer sur
le bouton Animate et observer les fentres Watch et Logic Analyzer .
Arrter lanimation laide du bouton , faire un nouveau Reset , relancer lanimation, ouvrir longlet
Asynch de la fentre Stimulus , agir sur RA4 et observer les rsultats.

Logic Analyzer
Graphe dvolution
de bits

Editor Watch
La flche verte Affichage de ltat
symbolise le Program courant
Counter des registres et variables
Figure 5: MPLAB IDE, Mode Simulation

Vous pouvez galement faire avancer le programme pas pas (mode Step By Step ) avec le bouton Step
Into . On notera que les boutons Step Over et Step Out permettent respectivement une excution pas
pas avec une excution automatique des sous-programmes et une excution jusqu la fin des sous-programmes.

4.4. Programmation du microcontrleur


Cette phase consiste envoyer le code hexadcimal du programme dans le C. Une fois le programme compil
avec succs, le code hexadcimal du programme se trouve dans le fichier avec l'extension hex (ex : prog.hex). Vous
pouvez visualiser le fichier avec la fentre Program Memory du menu View . Le code de trouve sous l'onglet
Opcode Hex .

Dmarche de transfert :
Connecter le programmateur PICSTART Plus sur le port srie du PC et au secteur

Placer le C sur le programmateur (Attention au sens !)

Dans MPLAB, sous le menu Programmer > Select Programmer chosir 1 PICSTART Plus . Un nouvel
onglet est alors ajout la fentre Output .

Configurer le port COM sur lequel est connect le programmateur (COM1), menu Programmer > Settings
...

Activer le programmateur, menu Programmer > Enable Programmer, une nouvelle barre d'outils est
ajoute.

Envoyer votre programme, menu Programmer > Program ou en cliquant sur , le transfert est termin
lorsque la LED jaune Activate du programmateur est teinte et que le message Programming/Verification
completed successfully! apparat dans la fentre Output.

M1 SIS 7 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Dsactiver le programmateur, menu Programmer > Disable Programmer

Placer le C sur la carte PICDEM 2 Plus (Attention au sens !) mettre la carte sous tension et a marche ...

Lors des phases de manipulation du microcontrleur, vrifier que la carte PICDEM 2 Plus ne soit pas sous
tension et fates attention aux pattes, elles sont fragiles.

Figure 6: MPLAB IDE, Code hexadcimal du programme

4.5. Programme Clignotant

4.5.1. Analyse et comprhension du programme


Le programme ci-aprs fait clignoter la LED L1, broche RB0, une frquence denviron 1Hz. Ltat de la LED
change donc toutes les 500ms.

LIST P=18F4520 Dfinition du C utilis, des constantes spcifiques au C et des


#include <P18F4520.inc>
#include <CONFIG.inc> paramtres de configuration encods lors de la programmation.

org h'0000' Adresse de dpart aprs un reset du C.


;----- Dclaration de variables
CBLOCK 0x00 Les variables t1 et t2 sont ranges dans la bank 0 de la
t1 : 1
t2 : 1 ram (adresse 0x00) et ont pour taille un octet.
ENDC

;----- Initialisation
Init clrf PORTB Remise zro des bascules D du port B et dfinition du
movlw h'00' port B en sortie.
movwf TRISB

;----- Programme Principal


boucle movlw h'80'
xorwf PORTB Boucle infini :
call tempo250ms Allume et teint la LED toutes les 500ms.
call tempo250ms
goto boucle

;----- Sous-programme
tempo250ms
movlw t10
movwf t1
comp1 dcfsnz t1
return Sous programme de temporisation ( complter)
movlw t20 On ralise deux boucles imbriques qui occupe le
movwf t2 C durant environ 250 ms.
comp2 dcfsnz t2
goto comp1
goto comp2

END

M1 SIS 8 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Comprendre le programme clignotant et raliser l'algorigramme associ.


Expliquer lutilit de xorwf dans le programme principal (utiliser une table de vrit).
Calculer les valeurs dinitialisation t10 et t20 pour que le sous programme de temporisation sexcute en 250 ms
1 ms. Le nombre de cycle requis par chaque instruction est donn dans le jeu dinstruction.
Crer un nouveau projet dans MPLAB et le sauver dans le rpertoire tp1/cligno puis saisir le programme
prcdent en remplaant t10 et t20 par leur valeur (pour informer le compilateur de la base dans laquelle la valeur
est crite on prcde la valeur de la premire lettre de la base, ainsi 192 en dcimal scrit d192, hC0 en
hexadcimal ou encore b11000000 en binaire).
Compiler votre programme et passer la partie simulation.

Noubliez pas de copier les fichiers P18F4520.inc et CONFIG.inc dans le rpertoire tp1/cligno.

4.5.2. Simulation
Vous pouvez simuler le programme de la mme manire que le programme interrupteur mais vous vous
apercevrez trs vite que cest trs long du fait de lanimation et de la temporisation. (Vous pouvez tout de mme le faire
pour bien comprendre mais en initialisant t10 et t20 3 et 5 par exemple.) Nous allons donc faire les simulations en
mode Run, excution automatique.

Pour notre programme, nous navons besoin daucun vnement dentre mais si besoin avait t on aurait pu
saisir un chancier comme prcdemment. En mode Run le programme sexcute donc de faon automatique et ne
sarrte que lorsquil rencontre un point darrt ou la fin du programme. Il faut donc placer correctement les points
darrt afin de valider le fonctionnement de notre programme. Pour observer la dure de la temporisation il faut donc
mettre un point darrt sur la ligne dappel du sous programme de temporisation et un autre sur la ligne suivante. Pour
ajouter un point darrt , double cliquer sur la ligne du programme o vous le souhaitez, ou alors utiliser le menu
Debugger >> Breakpoints disponible depuis la touche F2.

Figure 7: Placement des points d'arrt

Nous allons suivre lexcution du programme laide de la fentre Simulator Trace disponible dans le menu
View . Nous allons nous intresser plus particulirement la colonne Time . Vous pouvez changer lunit de
temps de cette colonne par un clic droit menu Display Time . Lorsque vous affichez le temps en toutes
autres units que cycle, la valeur affiche dpend de la frquence de loscillateur du C.

Lancer la simulation, bouton


Observer la fentre Simulator Trace lorsque la simulation sarrte au premier point darrt et noter le
temps dappel de la temporisation (ex : ti = 250303 cycles)
Relancer la simulation, bouton
Noter nouveau le temps de la fentre Simulator Trace (ex : tf = 500602 cycles)

Vous pouvez alors calculer la dure de la temporisation d = tf ti = 250299 cycles soit 250,299 ms avec un
oscillateur 4 MHz. Utiliser cette mthode pour valider vos initialisations de t10 et t20.

M1 SIS 9 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Breakpoint call tempo250ms Breakpoint goto boucle

Figure 8: Simulator Trace aux diffrents points d'arrt

Une fois les simulations termines transfrer le programme dans le microcontleur.

M1 SIS 10 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

5. TP n2 : Ecriture d'un driver pour LCD


L'objectif de ce TP est d'crire et de tester un ensemble de fonctions assembleurs pour communiquer avec un
afficheur LCD. La premire partie de ce TP est ralise en simulation afin d'crire les diffrentes fonctions ncessaires
au bon fonctionnement de l'afficheur.

5.1. Les afficheurs LCD


Les afficheurs cristaux liquides gnralement appels LCD (Liquid Crystal Display) sont des modules
compacts qui ncessitent peu de composants pour leur mise en oeuvre. Plusieurs afficheurs sont disponibles sur le
march, ils se diffrencient les uns des autres par leurs dimensions (de 1 4 lignes de 6 80 caractres). Certains sont
galement dots de fonctions de rtroclairage. L'afficheur du kit PICDEM 2 Plus est un afficheur 16 2 c'est dire 2
lignes de 16 caractres avec des caractres de 58 pixels.

Pour communiquer avec l'extrieur tout afficheur besoin d'un circuit spcialis de gestion appel contrleur
d'affichage , il en existe diffrents modles sur le march mais ils ont tous le mme fonctionnement. La carte
d'valuation est quipe du modle HD44780U de SHARP. Le contrleur sert donc d'interface entre le microcontrleur
et l'afficheur (cf. figure 9). Le but du driver est de grer le bus CONTROL afin que le contrleur d'affichage comprenne
le bus DATA et affiche ce que l'on souhaite sur l'cran LCD.

DATA 4 ou 8 COM 16
Contleur
C LCD
d'affichage
CONTROL 3 SEG 40
16 2
PIC18F4520
HD44780U

Figure 9: Communication avec l'afficheur LCD

Le contrleur d'affichage peut recevoir deux types d'information sur le bus DATA, un ordre (ex: effacer l'cran)
ou une donne (ex: le caractre A). Ordres ou donnes sont envoys sur le bus DATA sous forme d'octets (8 bits). Mais
pour ne pas utiliser toutes les broches de sorties d'un microcontrleur pour communiquer avec un LCD, les contrleurs
d'affichage fonctionnent galement en 4 bits, un nombre cod sur 4 bits s'appelle un quartet. En mode 4 bits, un octet est
envoy en deux fois : le quartet de poids fort puis le quartet de poids faible.

Le bus CONTROL est constitu de trois lignes :


La ligne RS (Register Select) qui permet au contrleur d'affichage de savoir si le contenu du bus DATA
est un ordre ou une donne. Un niveau bas indiquera un ordre et un niveau haut une donne.
La ligne RW (Read Write) informe le contrleur si on vient lire ou crire dans sa mmoire, un niveau bas
correpondant une action d'criture.
La ligne E (Enable) qui informe le contrleur d'affichage qu'un quartet (mode 4 bits) ou un octet (mode 8
bits) est disponible. Cette ligne est active sur front descendant. Elle ralise la syncronisation entre le
microcontrleur et l'afficheur.

Les connexions entre le contrleur d'affichage et le microcontrleur sont regroupes dans le tableau 1.

D'aprs le tableau 1 quel est le mode de fonctionnement du contrleur d'affichage ?

M1 SIS 11 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Bus Contrleur Microcontrleur


RS RA3
CONTROL RW RA2
E RA1
DB7 RD3
DB6 RD2
DATA Extrait de PICDEM 2
DB5 RD1 Plus User's Guide (p 18)
DB4 RD0

Tableau 1: Connexion entre le contrleur d'afffichage et le microcontrleur


Attention : On a Power-on Reset, RA5 and RA3:RA0 are configured as analog inputs and read as 0. RA4 is
configured as a digital input... (cf datasheet p224)

5.2. Fonctions de gestion

5.2.1. Transfert d'un octet


L'criture d'un ordre ou d'une donne en mode 4 bits se fait selon la squence reproduite en figure 10, l'octet
transfrer tant b7b6b5b4b3b2b1b0 avec b7 bit de poids fort.

Figure 10: Transfert d'un octet en mode 4 bits

Phase I : RW=0 et E=0. RS et DB7...4 sont positionns la valeur souhaite : quartet de poids fort (MSB)
Phase II : E=1.
Phase III : E=0, le quartet transfr (poids fort) est pris en compte par le contrleur lors du front descendant.
Phase IV : DB7...4 sont positionns la valeur souhaite : quartet de poids faible (LSB)
Phase V : E=1.
Phase VI : E=0, le quartet transfr (poids faible) est pris en compte par le contrleur lors du front
descendant.

Raliser l'algorigramme et crire la fonction lcd_ecrire_quartet qui gnre la squence IV, V, VI sans tenir
compte de l'tat de RS pour l'instant, E tant dj initialis 0. Le quartet crire est stock dans les 4 bits de poids
faible du registre de travail W . La ligne E restant l'tat haut durant 2 cycles. Vous pourrez utiliser les
instructions nop, bsf, bcf, movwf, andlw (cf. datasheet). Tester cette fonction avec le simulateur de MPLAB.

Nous allons maintenant crire la fonction lcd_ecrire_octet (c'est dire la squence I ...VI) en utilisant bien
videmment la fonction lcd_ecrire_quartet . On ne tient toujours pas compte de l'tat de RS et E tant initialis
0. L'octet complet transfrer se trouve dans le registre W et sera sauvegard dans la variable lcd_db stocke
en ram. L'instruction swapf pourrait vous tre utile. crire et tester cette fonction en simulation.

Les fonctions d'criture sont maintenant quasiment termines. Il reste grer l'tat ligne de la ligne RS, il suffit
pour cela d'ajouter une instruction avant l'appel de la fonction lcd_ecrire_octet . Raliser les algorigrammes et
crire les deux fonctions lcd_ecrire_ordre et lcd_ecrire_donnee .

M1 SIS 12 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

5.2.2. Lecture de l'tat du contrleur d'affichage


Lorsque que l'on demande au contrleur d'xcuter une action (ordre ou commande), ce dernier met un certain
temps la raliser. Si une nouvelle action lui est demande alors que la prcdente n'est pas encore termine, elle ne
sera pas prise en compte. Pour rsoudre ce problme il est ncessaire de savoir si le contrleur est disponible. On ne va
donc plus crire mais lire dans le contrleur.

Figure 11: Lecture de l'tat de l'afficheur en mode 4 bits


Phase I : RW=1 et RS = 0, il s'agit d'une instruction (ordre) de lecture et E=0
Phase II : E passe 1 pour demander le quartet de poids fort.
Phase III : On vient lire la valeur du quartet MSB sur DB7...DB4.
Phase IV : E passe 0 pour signaler la fin de la lecture du premier quartet.
Phase V : E repasse 1 pour demander le quartet de poids faible.
Phase VI : On vient lire la valeur du quartet LSB sur DB7...DB4.
Phase VII : E repasse 0 pour signaler la fin de la lecture du deuxime quartet.

Note : Pour venir lire DB7...DB4 il faut que les broches RD3...RD0 soient configures en entres. Mais il faut
pense les remettre en sortie pour la suite.

Sur la figure 13, l'octet reu est de la forme BF AC6AC5AC4AC3AC2AC1AC0 avec BF bit de poids fort. BF qui
signifie Busy Flag vaut 1 si l'afficheur est occup. Les bits AC6...1 reprsentent l'Address Counter c'est dire la valeur
courante du pointeur de RAM du contrleur cette information doit tre lue mais ne nous est pas utile, elle ne sera donc
pas mmorise.

Raliser l'algorigramme puis crire la fonction lcd_dispo qui boucle tant que le bit BF n'est pas gal 0. C'est
dire tant que l'afficheur n'est pas prt effectuer une nouvelle action. Au dbut de la fonction mettre les broches
RD3...RD0 en entre et penser les remettre en sortie avant de quitter celle-ci, grer galement les lignes RS et RW.
Avant de lire le quartet on attend 2 cycles. Tester ce sous-programme avec le simulateur.

M1 SIS 13 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

5.2.3. Procdure d'initialisation du contrleur d'affichage


Quand le contrleur dmarre on ne sait pas si il est positionn en 4 ou 8 bits, comme le montre la procdure
d'intialisation reproduite en figure 12, il est donc ncessaire d'envoyer la commande de passage en mode 8 bits
(Function Set 8-Bit Interface) plusieurs fois pour qu'elle soit bien comprise. Puis on demande le passage en 4 bits
(Function Set 4-Bit Interface).

Figure 12: Procdure d'initialisation 4 bits du contrleur d'affichage


(extrait de la datasheet du HD44780U )

En analysant la procdure on remarque qu'il y a trois temporisations (>15ms, >4,1ms et >100s). Pour simplifier
le code nous allons crire deux fonctions de temporisation, une d'environ 5 ms (15 = 53) et une autre d'environ 100s.

En vous inspirant de la temporisation ralise au TP n1. Raliser les algorigrammes puis crire les fonctions

M1 SIS 14 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

tempo_5ms et tempos_100us et les valider par simulation. Si besoin est vous pouvez crer des variables en
mmoire.

La dernire partie de la procdure consiste rgler les caractristiques de l'cran. Dans notre cas nous prendrons
:
N = 1 pour fonctionner sur deux lignes.
F = 0 rgle la taille des caractres (58 dots).
I/D = 1 afin que le curseur se dplace vers la droite aprs avoir affich un caractre.

Raliser l'algorigramme puis crire la fonction lcd_init qui ralise cette procdure, pensez utiliser les
fonctions que vous avez dj cres. Intgrer l'intialisation des ports dans lcd_init . Valider la procdure par
simulation.
5.2.4. Basculement entre les lignes
Le contrleur d'affichage dispose d'une mmoire DDRAM reprsentant l'afficheur. Dans notre cas la taille de la
mmoire utilise est de 2 lignes de 16 octets chacune. Pour changer de ligne, il suffit de venir positionner l'Address
Counter au dbut de ligne souhaite.

Figure 13: DDRAM du contrleur

En utilisant vos diffrentes fonctions crire les fonctions lcd_l1 et lcd_l2 permettant de choisir la ligne
sur laquelle on souhaite crire.
crire la fonction lcd_cls qui efface tout l'cran. (cf. figure 12)
Modifier la fonction lcd_ecrire_octet afin d'attendre que le contrleur est pris en compte l'action.
5.2.5. Tests des diffrentes fonctions
Voil nous sommes maintenant prt utiliser l'afficheur LCD. Pour faciliter l'utilisation des fonctions que vous
venez de crer il est conseill de toutes les mettre dans un fichier lcd.asm afin de pouvoir les inclure dans vos futurs
programmes. L'utilisation de ce fichier par la suite est trs simple, il suffit de taper la commande #include lcd.asm
l'endroit de votre programme o vous souhaitez intgrer vos fonctions et de dfinir les variables lcd_db, ... au dbut
de votre programme. Le fichier lcd.asm doit se trouver dans le mme rpertoire que votre programme.

crire le programme qui reproduit l'cran ci-dessous sur l'afficheur.

I n f o
I n d u s

Si vous taper movlw 'I' le registre W sera charg avec le code ascii du caractre I.

M1 SIS 15 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

5.3. crire une chaine de caractres


La mthode qui nous a permis de tester les fonctions de gestion de l'afficheur n'est pas des plus efficace car il est
ncessaire de retaper le mme code pour chacun des caractres. Nous allons donc crire une fonction qui affiche une
chaine de caractres complte. La chaine de caractres est stocke dans la mmoire programme. Pour stocker une
chane en mmoire programme, il suffit d'utiliser la directive db comme dans l'exemple suivant :
...
org h'0000'
goto main

ch db "Microcontroleur",'\0' ;ecrire en mmoire programme

main nop
...
La chane Microcontroleur est stocke dans la mmoire programme, elle se termine par le caractre \0 .
Le label ch pointe vers le premier caractre de la chane, c'est donc l'adresse de dbut de la chaine. Dans la mmoire
programme du PIC 18F4520, les adresses sont codes sur 21 bits donc 3 octets. Comme nous disposons d'un
microcontrleur 8 bits nous utiliserons les directives UPPER(ch), HIGH(ch), LOW(ch) pour obtenir respectivement
l'octet de poids le plus fort, de poids intermdiaire et de poids faible.

Pour lire dans la mmoire programme, il faut tout d'abord initialiser le pointeur d'adresse de mmoire
programme TBLPTR avec l'adresse de l'octet lire. Pour lire un octet on utilse l'instruction TBLRD qui transfre
le contenu de la mmoire dans le registre TALBAT .

Consulter la datasheet du pic p73-76 et p305.

Configurer correctement l'instruction TBLRD .


Raliser l'algorigramme de la fonction lcd_ecrire_chaine .
crire et tester cette fonction.

L'afficheur LCD ne peut afficher que 16 caractres par ligne...

M1 SIS 16 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

6. TP n3 : Interruptions et Priphriques ASM


Ce troisime TP est divis en quatre parties durant lesquelles vous apprendrez grer les interruptions et
diffrents modules du micro-contrleur en langage Assembleur et dans un programme unique.

6.1. Programme Clignotant avec interruption


Nous devons maintenant faire clignoter la led L1, broche RB0, une frquence de 2Hz sans mobiliser le
microcontrleur. Il n'est donc plus question d'utiliser une temporisation pour compter le temps (cf. TP n1). Nous allons
demander un module externe : le TIMER0, de compter le temps et de signaler la fin du comptage au microcontleur
par une interruption dite interruption de dbordement. La figure 14 montre le signal de sortie du TIMER0 et les
interruptions de dbordement associes. Le TIMER0 compte jusqu' la valeur max en T secondes. Toutes les T
secondes, l'tat de la led L1 est invers.

Interruptions de dbordement

max

T
Figure 14: Interruption de dbordement du TIMER0

Trouver, en utilisant la datasheet, l'expression de la valeur max et de la priode de comptage T en fonction de la


configuration du TIMER0. (cf datasheet p123)
Qu'elle est la configuration pour une priode de comptage T d'environ 1s ?
Quels sont les bits intialiser pour activer l'interruption du TIMER0 ?
Expliquer la configuration du registre T0CON.

L'nonc demande de faire clignoter la led une frquence de 2Hz donc une priode de comptage de 1s. Avec la
configuration choisi prcdemment, on a une interruption toutes les (1+t)s, si on souhaite mesuer le temps prcisement
cette erreur de t seconde n'est pas ngligeable.
Pour compenser cette erreur dcalage, l'ide est d'initialiser les registres TMR0H TMR0L afin que le comptage
ne commence pas 0 mais une valeur min permettant d'annuler t comme le montre la figure 15.
Interruptions de dbordement

max

min
0

T-t
Figure 15: Interruption de dbordement du TIMER0

Calculer la valeur min pour avoir une frquence de comptage de 1s excatement.


Raliser l'algorigramme du programme demand, crire et tester ce programme.

6.2. Chronomtre
Nous allons maintenant raliser un chornomtre simplifi en utilisant le TIMER0, l'afficheur LCD et le bouton
S2, broche RA4. Le temps doit s'afficher sur le LCD sous le format :

M1 SIS 17 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

m m - - s s

Le fonctionnement souhait est le suivant :

la mise sous tension, le chronomtre est initialis 00--00 .

Un premier appui sur S2 dclenche le chronomtre, le temps volue sur l'afficheur LCD.

Un deuxime appui sur S2 arrte le chronomtre, le temps coul est affich sur le LCD.

Un troisime appui sur S2 rinitialise le chronomtre.

Les nombres reprsentant les minutes et les secondes seront respectivement stocks dans les octects MIN et SEC.
Le temps est mesur par l'interruption de dbordement du TIMER0. Comme il a t vu au TP prcdent, l'afficheur
LCD ne comprend que des caractres (code ASCII), on ne peut donc pas directement lui envoyer les octects MIN et
SEC puisque ceux sont des nombres.

Caractre 0 1 2 3 4 5 6 7 8 9
Code 48 49 50 51 52 53 54 55 56 57
ASCII (0x30) (0x31) (0x32) (0x33) (0x34) (0x35) (0x36) (0x37) (0x38) (0x39)

Tableau 2: Code ASCII des chiffres

Raliser l'algorigramme puis crire le code de la fonction lcd_ecrire_nombre qui affiche sur le LCD le
nombre contenu dans NB sachant que ce nombre est compris entre 00 et 99. Il faut donc afficher le chiffre des
dizaines puis le chiffre des units. (NB est un octect dclarer, vous pouvez tester cette fonction en simulation)
Raliser l'algorigramme puis crire le code de la routine d'interruption et de l'interruption de dbordement du
TIMER0.

Le bouton poussoir S2 permet l'utilisateur d'agir sur l'tat chronomtre. D'aprs le fonctionnement dcrit ci-
dessus, un appui sur le bouton change l'tat du chronomtre.

Raliser l'algorigramme et crire la fonction bouton_appui qui dtecte un appui sur le bouton S2, l'appui
tant dtect lorsque l'utilisateur relche le bouton.
Raliser l'algorigramme du chronomtre puis crire le programme principal.
Transfrer votre programme et chronometrez-vous!

6.3. Gnrer un signal rectangulaire avec un module PWM


En partant du programme prcdent, on souhaite maintenant ajouter une fonctionnalit : chaque appui sur le
bouton poussoir S3 connect RB0, on souhaite activer le transducteur pizo-lectrique (pendant la dure de l'appui).
Le transducteur pizo-lectrique peut tre command grce la broche RC2 du micro-contrleur.
Un transducteur pizo-lectrique est un composant lectronique constitu dune lamelle de matriau pizo-
lectrique. Cette lamelle est dforme si une tension alternative est applique aux bornes du transducteur pizo-
lectrique.

M1 SIS 18 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Figure 16: Le transducteur pizo-lectrique

Le mouvement de la lamelle dans lair gnre un son. La frquence du son mis est directement li la nature
et la frquence du signal appliqu aux bornes du transducteur pizo-lectrique.
Sur la carte dvaluation PICDEM 2 Plus, le transducteur pizo-lectrique peut tre command grce la
broche RC2 du micro-contrleur. Le montage lectronique utilis pour commander le transducteur pizo-lectrique
permet de lalimenter avec une tension bipolaire (+5V, -5V).
Pour gnrer un son, on doit donc gnrer un signal rectangulaire (grce au module PWM) que l'on appliquera
au transducteur pizo-lectrique si l'utilisateur appuie sur le bouton poussoir S3. Il faudra initialiser tous les modules
ncessaires la gnration d'un signal rectangulaire (module CCP1, TIMER2) (voir p.159 du data-sheet ) et
initialiser le PORTC. partir du programme prcdent, apporter les modifications ncessaires :

lors de l'initialisation :

Configurer le PORTC en entre except la broche RC2 en sortie,


Configurer le module PWM, placer la valeur 0x80 dans le registre PR2 (fixe la frquence du signal
rectangulaire), rgler le duty time (rapport cyclique) 0.5, on placera la valeur 0x00 dans le registre
CCP1CON,
Activer le TIMER2, plac le postscaler 1:1, plac le prescaler 4,

dans le programme principal : on testera la valeur sur la broche RB0,

Dans le cas o RB0 est l'tat haut on activera le transducteur pizo-lectrique en agissant sur le registre
CCP1CON,
Dans le cas o RB0 est l'tat bas on dsactivera le transducteur pizo-lectrique en agissant sur le registre
CCP1CON,
Dans le cas o la valeur sur la broche RB0 est gale la dernire valeur acquise on ne fera rien.

Attention : Le Duty Time est le temps pendant lequel le signal est ltat haut. Il faut adapter ce temps en fonction de
la frquence du signal gnr pour garder un rapport cyclique gale 0,5. Pour cela lisez la documentation technique
et trouver la relation quil doit exister entre les valeurs des registres PR2 et CCPR1L:CCP1CON<5:4> pour que le
rapport cyclique reste gale 0.5.

Donner la relation quil doit exister entre les valeurs des registres PR2 et CCPR1L:CCP1CON<5:4> pour que le
rapport cyclique reste gale 0.5 et proposer un partie de programme (le plus simple possible) en langage
Assembleur qui permet dadapter le rapport cyclique (contrl par les registres CCPR1L:CCP1CON<5:4>) en
fonction de la frquence (contrle par le registre PR2) du signal gnr.
Raliser l'algorigramme du programme demand,
crire le programme sur ordinateur avec MPLAB, simuler son fonctionnement et le valider sur la carte
d'valuation.

Dans un premier temps, modifier le programme prcdent pour quil gnre un signal rectangulaire (en utilisant le
module PWM) sur la broche RC2. Puis vous prendrez en compte la gestion du bouton RB0. En sparant les deux
problmes, la difficult est rduite.

6.4. Utilisation du module de conversion A/D


On souhaite maintenant pouvoir faire varier la tonalit du son mis par le transducteur pizo-lectrique. Pour

M1 SIS 19 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

cela, on va faire varier la frquence (contrle par le registre PR2) du signal rectangulaire gnr dans la partie
prcdente. Pour faire varier la frquence du signal, on va utiliser le potentiomtre R16. chaque fois que l'on activera
le transducteur pizo-lectrique, on va mesurer la tension sur la broche RA0 en utilisant le module de conversion A/D,
on utilisera la valeur de la tension sur la broche RA0 pour dterminer la frquence du signal rectangulaire. Les
modifications portes au programme sont les suivantes,

lors de l'initialisation,

configurer le PORTA de manire ce que la broche RA0 soit en entre,


activer le module de conversion A/D (voir page 227 du datasheet ),
initialiser les registres ADCON0, ADCON1 (les autres registres sont correctement configurs par dfaut),

dans le programme principal,

raliser une acquisition de la valeur de la tension sur la broche RA0 en ralisant une conversion A/D,
modifier la valeur du registre PR2 (frquence du signal gnr) en utilisant les bits de poids forts du
rsultat de la conversion A/D,
ajuster le rapport cyclique pour qu'il reste gale 0.5.

Raliser l'algorigramme du programme demand,


crire le programme sur ordinateur avec MPLAB, simuler son fonctionnement et le valider sur la carte
d'valuation.

6.5. Gestion d'interruptions multiples


On souhaite maintenant que le micro-contrleur gre par interruption l'appui sur le bouton poussoir. Ainsi
chaque appui sur le bouton poussoir S3, on souhaite activer ou dsactiver le transducteur pizo-lectrique. Quand le
transducteur pizo-lectrique sera activ, le programme principal ralisera une acquisition de la tension sur la broche
RA0 et mettra jour la frquence et le rapport cyclique du signal rectangulaire. Quand le transducteur pizo-lectrique
ne sera pas activ, le programme principal ne ralisera aucune opration. Pour grer les appuis sur le bouton poussoir
S3, on utilisera l'interruption INT0. partir du programme prcdent, il faudra modifier :

la configuration des interruptions pour prendre en compte la nouvelle interruption INT0,


simplifier le programme principal en transfrant une partie du code vers la routine d'interruption.

Raliser l'algorigramme du programme demand,


crire le programme sur ordinateur avec MPLAB, simuler son fonctionnement et le valider sur la carte
d'valuation.

M1 SIS 20 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

7. TP n4 : Initiation la programmation en langage C C

7.1. Introduction : assembleur et compilateur C


L'objectif de cette sance est de vous initier la programmation en langage C d'un micro-contrleur. Par
rapport l'assembleur, le recours un langage de haut niveau tel que le C s'est notablement dvelopp en pratique
car il permet de simplifier l'criture des codes ainsi que leurs portabilits et leurs maintenabilits. Notamment, vous
pourrez crire des instructions du type if(x==y) ou temp = 0x27 pour effectuer un test d'galit ou une
affectation. Le code que vous crirez devra tre crit en C standard ANSI. La compilation des instructions C se fera par
le compilateur C18 qui permet de gnrer du code pour la famille des PIC 18XXXX. Comme l'assembleur, le
compilateur traduit des instructions interprtables pour un oprateur humain en un code machine excutable par le PIC.
Comme nous le verrons, l'criture et la compilation de vos programmes sources C se fera dans l'environnement
MPLAB. Comme pour le dveloppement de codes en assembleur, MPLAB sera donc l'environnement qui vous
permettra d'crire, de compiler et de dboguer vos sources C (cf., section 3 de ce TP).

Assembleur Compilateur C

Fichiers pr-
compils

script de
configuration de
l'diteur de lien

Figure 17: Diagramme de construction d'un excutable

On notera que, dans le cadre d'un mme projet, il est possible de dvelopper des parties en C
et des parties en assembleur. Ds lors, la construction d'un code machine excutable est illustr par
le diagramme de la figure 17. Dans cet exemple, un code source en assembleur et deux codes
sources en C ont t crits. Pour chaque source, l'assembleur (MPASMWIN) ou le
compilateur(MCC18) est utilis pour gnrer des fichiers objets (file1.o,...,file3.o). Le fichier objet
file3.o est ensuite utilis avec un fichier pr-compil existant file4.o de manire former un fichier
de librairie lib1.lib. Finalement, les fichiers objets restants sont utiliss avec le fichier de librairie
par l'diteur de lien (MPLINK) pour crer un excutable output.hex.
Notez bien galement le fichier script.lkr (cf., figure 17) qui permet de configurer correctement l'diteur de lien
pour le micro-contrleur utilis.

7.2. Gnration d'un signal carr


Pour vous familiariser avec la programmation en C du micro-contrleur, le premier projet sera de reprendre le
programme de clignotement d'une LED que vous aviez crit en assembleur. Le source C ci-aprs fait clignoter la LED

M1 SIS 21 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

L1, broche RB0, une frquence de 1Hz. Ltat de la LED change donc toutes les 500ms.

// Author: ???
//================================================
// Description :
// Programme de gnration d'un signal carr En-tte du programme
// sur le port RB[0] de priode de 1 s
//================================================

//------------------------------------------------
// Directives au prprocesseur
//------------------------------------------------ Fichiers d'en-tte pour le PIC184520
// fichier d'en-tte pour le PIC184020 (p18f4520.h) et pour l'utilisation des
#include <p18f4520.h> fonctions de temporisation (delays.h)
// fichier d'en-tte pour les fonctions de tempo
#include <delays.h>
Directive pragma de dsactivation
// Dsactivation du WatchDog du watchdog.
#pragma config WDT = OFF

// Programme Principal
void main(){

//------------------------------------------------
// Dclaration des variables locales Dclaration et affectation de la variable
//------------------------------------------------ dfinissant le nombre de cycles
ncessaire une demi-priode
// 1/2 Periode d'oscillation en Nb de cycles
TYPE DemiPeriode = ARGUMENT; d'oscillation ( complter).

// Configuration du portB Configuration du port B


TRISB = 0x00; // PORTB en sortie
PORTB = 0x00; // RAZ du PORTB
// Config. RB0-RB3 en mode I/O numerique
ADCON1 = 0x0F;

// --> Boucle TantQue : On boucle indfiniement...


while(1){ Boucle permanente de changement
// basculement du bit 0 du PORTB d'tat de RB0
PORTB = PORTB ^ 0x01; -> basculement de RB0
// Utilisation d'une fonction de delays.h -> appel la fonction de temporisation
FONCTION(ARGUMENT); (cf. delays.h) permettant d'attendre
} 500ms ( complter).
// --> Fin de boucle TantQue
}

Comprendre le programme ci-dessus.


Dfinir le type de la variable DemiPeriode.
Dduire du fichier d'en-tte delays.h la fonction utiliser pour une temporisation telle que la priode soit de
1ms. Dduisez-en galement l'argument associ.
Passer la section suivante pour crer un projet pour ce code, pour le compiler et pour effectuer la simulation.

7.3. dition et Compilation du programme


Cette partie permet d'apprendre crer un projet MPLAB, saisir un programme en C et le compiler.
7.3.1. Dmarrage
Avant de commencer, crer le rpertoire tp4 puis dans ce rpertoire crer nouveau un rpertoire
clignotement_C .
Copiez dans ce rpertoire les fichier delays.h et 18f4520.lkr .

M1 SIS 22 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Lancer la suite logicielle MPLAB IDE partir de licne qui se trouve sur votre bureau.
7.3.2. Cration dun nouveau projet en utilisant lassistant Project Wizard
Cliquer sur Project >> Project Wizard
Cliquer sur Suivant > puis slectionner PIC18F4520 dans le menu droulant Device .
Cliquer sur Suivant > puis slectionner Microchip C18 Toolsuite afin de pouvoir dvelopper en C.
Cliquer sur Suivant > puis dans le champ Project Name saisir le nom du projet (ex : clignotant_C) et
dans le champ Project Directory aller chercher laide du bouton Browse , le dossier cr au dbut :
tp4/clignotant_C .
Cliquer deux fois sur Suivant > et ajouter 18f4520.lkr au projet laide du bouton Add >>
Cliquer sur Suivant > puis sur Terminer.
7.3.3. Configurer les options de compilation et d'dition de lien
Cliquer sur Project>Build Options...>Project et cliquer sur l'onglet General . Vrifiez que les chemins
de Include Path et de Library Path sont correctement positionns en utilisant l'option Browse ...
Dans l'onglet MPLINK Linker, cliquer sur l'option Suppress COD-file generation . Cliquer sur OK.
7.3.4. dition du programme
Crer un nouveau fichier dans le projet, File >> Add New Files to Project
Lenregistrer dans le rpertoire projet avec lextension c (ex : clignotant_C.c)
MPLAB Editor se lance
Saisir le programme et enregistrer.

Penser ajouter des commentaires au programme pour montrer que vous avez bien compris les diffrentes
instructions.
7.3.5. Compilation
La compilation et l'dition de lien se fait en cliquant sur l'icne de la barre de menu. Comme en assembleur,
les erreurs et warnings sont signals dans la fentre Output ainsi que le rsultat de la compilation BUILD
SUCCEEDED ou BUILD FAILED.

En double-cliquant sur une erreur ou un warning dans la fentre Output , vous serez amener
directement la ligne concerne dans votre programme.

7.4. Simulation et programmation du micro-contrleur


Les procdures de simulation et de transfert du code excutable sur le micro-contrleur ne diffrent pas de celles
que vous avez pu mettre en oeuvre pour le dveloppement en assembleur ; cf. l'nonc du premier TP.

Effectuez la simulation du gnrateur de signal carr donn ci-avant dans l'nonc.

7.5. Applications

7.5.1. Chenillard sans interruption


On souhaite crer un chenillard motif variable. Un motif tant dfini par une squence d'clairage des LED
comme par exemple {0x01, 0x02, 0x04, 0x08}, cette squence est rpte l'infini.

Donner l'algorigramme du chenillard dfini par la squence de motif {0x01, 0x02, 0x04, 0x08}. Chaque motif
devra rester allum pendant un temps de 500 ms.

Pour dfinir la squence de motifs, vous prendrez soin de dclarer un tableau de unsigned char car ce type correspond
un format 8 bits qui pourra directement tre affect sur le PORT B (cf., MPLAB C18 C COMPILER USERS
GUIDE, page 11).

M1 SIS 23 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

crire et tester ce programme.


7.5.2. Chenillard multiple sans interruptions
On souhaite ajouter un second motif distinct au chenillard de manire permettre le choix de la squence. On
prendra par exemple comme seconde squence {0x01, 0x02, 0x04, 0x08, 0x04, 0x02}. La squence considre sera
slectionne par une variable dans la fonction principale (ie., la fonction main()). Le motif afficher l'intrieur de la
squence considre sera retourn par une fonction appele valeur_chenillard() dont vous dfinirez les entres et les
sorties.

Donner l'algorigramme du chenillard dfini par le couple de squences {0x01, 0x02, 0x04, 0x08} et {0x01,
0x02, 0x04, 0x08, 0x04, 0x02}.
crire et tester ce programme.

7.5.3. Chenillard multiple et gestion des interruptions


L'objectif de ce dernier exercice est de permettre de changer rgulirement le motif du chenillard en utilisant
les interruptions gnres par le TIMER0. Une des difficults consiste alors configurer correctement le TIMER0 de
manire permettre de gnrer les interruptions priodiquement.
On donne ci-arps les lments du code source pour ce faire.

//-------------------------------------------------
// Configuration des interruptions, cf. sections 9 et
// 11 du datasheet et le fichier header p18h4520.h
//-------------------------------------------------

// active l'interruption pour le TIMER0


INTCON = VALEUR;

// Place l'interruption TIMER0 en priorite haute Configuration du


INTCON2 = VALEUR; micro-contrleur
pour la gestion
// Active la gestion des priorites pour les interruptions
RCONbits.IPEN = VALEUR; d'interruption et
configuration du
// Efface le registre TMR0H TIMER0 pour (
TMR0H = VALEUR; complter).
// Efface le registre TMR0L
TMR0L = VALEUR;

// Active le TIMER0 et configure la valeur du prescaler


T0CON = VALEUR;

// Active les interruptions


INTCONbits.GIE = VALEUR;

L'objectif est alors de dclencher une interruption chaque fois que le TIMER0 est en overflow , cette
interruption commandant le changement de motif du chenillard. A toutes fins utiles, on rappelle que le langage C ne
permet pas directement de traiter les interruptions puisqu'il ne laisse pas l'utilisateur le contrle des adresses du
programme (quivalent du org en assembleur). A la place une directive #pragma a donc t intgre au compilateur :

Les directives
#pragma code mon_prog = @
void mon_prog(void)
{
code C ...
}
#pragma code
forcent le compilateur placer le code C l'adresse @ (cf., MPLAB C18 C COMPILER USERS
GUIDE, page 20 et 29).

M1 SIS 24 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

La directive
#pragma interrupt ma_fonction
dclare ma_fonction comme la fonction de traitement des interruptions prioritaires (adresse 0x18).

La directive
#pragma interruptlow ma_fonction
dclare ma_fonction comme la fonction de traitement des interruptions non prioritaires (adresse 0x08).

Rappel : un exemple de programme C avec interruption est disponible dans le cours.

Donner l'algorigramme du chenillard dfini par le couple de squences {0x01, 0x02, 0x04, 0x08} et {0x01,
0x02, 0x04, 0x08, 0x04, 0x02}, le changement de squence tant command par interruption du TIMER0 par
priode de 4 secondes, approximativement.
crire et tester ce programme.

M1 SIS 25 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

8. TP n5 : Gestion de Priphriques et Interruptions C

8.1. Communication srie : RS232


Le module Enhanced Universal Synchronous Receiver Transmitter (EUSART) est le module du Pic18F4520
permettant une communication srie de type RS232. Ce type de connexion tant galement disponible sur un PC. Nous
utiliserons le programme hyperterminal de Windows pour dialoguer avec le C.

Liaison Interface Port


C srie 0-5V
RS232 Hyperterminal
MAX232 COM

Picdem 2 Plus PC
Figure 18: Communication PC-C
RS232 est une norme qui standardise les communications sries. La transmission de donnes pouvant se faire sur
7 ou 8 bits, avec ou sans contrle de parit, celle-ci pouvant tre gres de faons paire ou impaire. Une trame RS232
commence par un bit de start et se termine par un ou deux bits de stop. La figure suivante illustre une des configurations
possibles. La vitesse de transfert pouvant galement varier d'une application l'autre. La vitesse se mesure en Bauds
(nombre de symbole transmis par seconde). Une connexion RS232 est asynchrone car entre l'metteur et le rcepteur, il
y a seulement les lignes de donnes Rx et Tx (pas de ligne d'horloge).

str b6 b5 b4 b3 b2 b1 b0 par stp stp

Figure 19: Trame RS232, 7 bits, parit, 2 bits de stop


Nous utiliserons la configuration suivante :

Vitesse : 9600 Bauds


Taille des donnes : 8 bits,
Parit : Aucune,
Bit de Stop : 1.

Sur un PC le port srie est appel COMX, avec X le numro du port.

8.1.1. L'hyperterminal
L'hyperterminal est un programme livr avec Windows qui permet de se connecter des htes distants
(ordinateurs, sites telnet, oscilloscope, ...) l'aide d'un modem, d'un cble null-modem (liaison srie) ou d'une
connexion TCP/IP. A chaque fois qu'un caractre est saisi, il est envoy sur le support de communication, tout caractre
reu est affich.

L'hyperterminal est accessible dans le menu Dmarrer > Tous les programmes > Accessoires >
Communications > Hyperterminal (Win XP) ou alors via la commande hyperterm dans menu Dmarrer > Excuter.
Lorsqu'il s'ouvre, il vous demande de configurer la connexion :

saisir un nom (ex: Pic) et cliquer sur OK,


configurer le type de connexion, gnralement COM1 et cliquer sur OK,
configurer les proprits de la connexion (9600 Bauds, 8 bits, aucune parit, 1 bit de stop, pas de contrle
de flux) et cliquer sur OK,
enregistrer la connexion dans votre rpertoire pour ne pas avoir la recrer (menu Fichier > Enregister
sous ...).
8.1.2. Programme echo
Le programme echo renvoie sur la liaison srie tout octet reu sur celle-ci, l'envoi et la rception des octets
est ralis sans interruption.

M1 SIS 26 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Configuration du module EUSART


Les registres initialiser sont,

BAUDCON, 'Baud Rate Control Register' qui initialise la vitesse via le registre SPBRGH:SPBRG dont la
valeur est calcule en utilisant les tableaux reproduits en page 205-208 du datasheet. BAUDCON autorise
galement les interruptions, la rception, ...
RCSTA, 'Recieve Status And Control Register' pour configurer la rception
TXSTA, 'Transmit Status And Control Register' pour configurer l'mission

mission et Rception

L'octet reu est plac dans le registre RCREG (Recieve Register) et l'octet envoyer est placer dans TXREG
(Transmit Register).

Mme lorsque que les interruptions sont interdites, on peut utiliser les flags pour connatre l'tat (vide ou plein)
des registres RCREG et TXREG. Les flags se trouvent dans le registre PIR1 (Peripheral Interrupt Request Flag
Register 1).

Pour savoir si un octet est disponible, il suffit simplement de regarder le flag associ RCREG (rception d'un
octet).

La procdure d'mission est reprsente par le schma bloc, ci-dessous (extrait du datacheet).

Figure 20: Schma bloc du module d'mission

Lorsqu'un octet est plac dans TXREG, il est coup dans TSR (Transmit Shift Register) qui comme son nom
l'indique effectue un dcalage la vitesse impose par SPBRGH:SPBRG. On notera que l'tat de TXREG est visible
dans TXIF et que l'information de transmission en cours se situe dans TRMT. Le schma bloc de la rception se trouve
en page 213 du datasheet .

Utiliser le datacheet pour initialiser les registres BAUDCON, RCSTA et TXSTA.(Pour rgler 1 bit de stop, le
bit SENDB du registre TXSTA doit tre 0)
crire et tester le programme echo , utiliser le cble srie du programmateur pour communiquer avec la carte
C.

8.2. Applications

8.2.1. Chenillard motif variable


On souhaite crer un chenillard motif variable. Un motif tant dfini par une squence d'clairage des LED
comme par exemple {'0000', '0001', '0010', '0100', '1000'}, cette squence est rpte l'infini.
Le changement de squence se fait par l'envoi du numro de la squence par liaison RS232 l'aide de
l'hyperterminal. Ainsi la saisie de 1 au clavier jouera la squence 1, etc. Le code ASCII des chiffres du pav numrique

M1 SIS 27 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

tant :

Caractre 0 1 2 3 4 5 6 7 8 9
Code 48 49 50 51 52 53 54 55 56 57
ASCII (0x30) (0x31) (0x32) (0x33) (0x34) (0x35) (0x36) (0x37) (0x38) (0x39)

Tableau 3: Code ASCII des chiffres

Toutes les 500ms, l'tat des LED est modifi en utilisant une fonction de delays.h. Le changement de squence
est gr sur interruption de rception (EUSART), quand un octet est reu par le C, il le renvoi pour l'afficher dans
l'hyperterminal. Si la squence demand n'existe pas, le C renvoi '?' au PC et ne modifie pas le choix de squence.

crire et tester ce programme

Note : La valeur du chiffre associ au code ASCII peut tre obtenue par une soustraction. En C, le premier lment du
tableau est 0. Une matrice est un tableau de tableau.
8.2.2. Devinette
Le programme Devinette est un jeu entre le C et vous, les communications se faisant via le PC
(hyperterminal). Le principe est simple, le C choisi un nombre entre 0 et 255 et doit vous le faire deviner en un temps
donn, 1 min. Le temps restant est visible sur les 4 LEDs (1 led correspondant 25s). Si vous trouvez le nombre choisi
avant 1 min, le C vous donne le temps que vous avez mis en secondes, sinon il vous informe que vous avez perdu et
vous donne la rponse, puis le jeu recommence.

Fonctions de communications :

crire et tester les fonctions de communications (RS232) suivantes :


com_init qui initialise les registres de l'EUSART.
com_recieve qui attend l'arrive d'un octet et le renvoie.
com_transmit qui permet d'envoyer un octet vers le PC.
com_string_transmit qui envoie une chane de caractres (tableau d'octets) au PC.
com_string_receive qui permet de recevoir une chane de caractre envoye par le PC, cette fonction reoit en
paramtre l'adresse du tableau (chane) o l'on veut stocker la chane reue. (La fin de la saisie dans l'hyperterminal
peut tre signale par l'appui sur la touche Entre)

Dans l'hyperterminal, le caractre '\n' permet de passer la ligne suivante (touche CTRL+Entre) et '\r' de faire un
retour chariot, retour en dbut de ligne (touche Entre). Une chane se termine par le caractre '\0'.

Fonction de gnration alatoire du nombre :

Cette fonction doit renvoyer le nombre mystre. Pour cela elle incrmente un entier n cod sur 8 octets (de type
unsigned char) tant qu'aucune donne n'est reue sur la liaison srie. Quand n = 255, si on ajoute 1 on a n = 256 qui
se code sur 9 bits mais comme n est sur 8 bits, on aura n = 0. crire cette fonction.

Fonctions de gestion du temps

Le temps maximal pour trouver la solution est dfinit dans le programme principal (main). Le temps restant est
une variable globale (commune toutes les fonctions). On mesure le temps avec le TIMER 0.

crire les fonctions :


timer_init qui initialise les registres du timer, des interruptions,
timer_go qui lance le dcompte et les interruptions,
timer_stop qui arrte le dcompte et les interruptions,
timer_interrupt qui dcrmente le temps et met jour les LED (une LED correspond 25 secondes restantes).

Programme complet

M1 SIS 28 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Lorsque le programme dmarre, le C envoie un message au joueur en lui demandant d'appuyer sur une touche
pour commencer, ce qui permet de gnrer le nombre mystre. Ds l'appui le chrono est lanc, lorsque une proposition
est faire, le C informe le joueur du fait que le nombre mystre est suprieur ou infrieur sa proposition. Si le joueur
trouve, il est inform de son temps sinon le nombre mystre lui est donn. A la fin d'une partie le programme se relance.

crire et tester le programme devine , la conversion d'une chane de caractre en entier peut se faire avec la
fonction atoi de la bibliothque stdlib.h, il y a galement la fonction inverse itoa.

Le temps peut se terminer lorsque le C est en attente d'une saisie du joueur. Le jeu se joue avec le pav numrique du
clavier, tout appui sur une autre touche peut faire bugger le programme. Si vous avez le temps, vous pouvez dtecter les
erreurs de saisie et demander une nouvelle saisie.

M1 SIS 29 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

9. TP n6 : Panneau d'affichage lumineux C


Afin de permettre la secrtaire de la formation de vous diffusez plus facilement divers messages nous allons
raliser un systme d'affichage partir de l'afficheur LCD de la carte. L'affichage se fait sur deux lignes :
Le titre du message sur la premire ligne, il est centr et ne doit pas dpasser 16 caractres.
Le corps du message qui dfile en boucle sur la seconde ligne.
Pour mettre jour le titre et/ou le corps du message la secrtaire utilisera hyperterminal (liaison rs232), elle
aura aussi la possibilit de dsactiv l'afficheur. Le message ainsi que l'tat de l'afficheur actif et inactif devront
tre sauvegard mme en cas de coupure de courant.

9.1. Gestion de l'afficheur LCD

9.1.1. Conversion des fonctions de bas niveau du driver en C


Dans le TP n3, nous avons cris le driver de l'afficheur en assembleur, il n'est donc pas directement utilisable
dans un programme C. Le compilateur MCC18 permet l'intgration de code assembleur dans le code C en utilisant les
directives _asm et _endasm . Contrairement au compilateur MPASMWIN, le compilateur C ne connait pas les
options par defaut des intructions (cf. jeu d'instructions) il faut donc rajouter toutes les options votre code assembleur.
Ainsi la fonction lcd_ecrire_quartet deviendra :
void lcd_ecrire_quartet(char q)
{
WREG=q;
_asm
andlw 0x0F
bcf PORTD,3,0
bcf PORTD,2,0
bcf PORTD,1,0
bcf PORTD,0,0

...

_endasm
}

Complter la fonction void lcd_ecrire_quartet(char q)


Sur le mme principe crire void lcd_dispo(void)

Nous avons maintenant cod les deux fonctions de base pour la gestion du lcd, les autres fonctions vont tre
recodes en C.

crire la fonction void lcd_ecrire_octet(char lcd_db) . Dans MCC18 l'instruction swapf est remplace par la
fonction Swapf. Pour inverser les quartets MSB et LSB de w , il suffit d'crire Swapf (WREG,0,0); .
crire les fonctions void lcd_ecrire_ordre(char o) et void lcd_ecrire_donnee (char d) .
crire les fonctions void lcd_cls(void) , void lcd_l1(void) et void lcd_l2(void) .
crire les fonctions void lcd_init(void) en utilisant la bibliothque delays.h pour les temporisations.
Crer la fonction void lcd_curseur_position(char l, char p) qui permet de positionner le curseur d'affichage
la p ime position de la ligne l . (cf figure, page )
Tester ses fonctions sur la carte d'valuation.
9.1.2. Cration de fonctions de haut niveau
Le langage C nous permet d'crire trs simplement des fonctions plus volues pour la gestion de l'afficheur.

crire la fonction void lcd_lcls(char l) qui efface la ligne l .


crire la fonction void lcd_ecrire_chaine(char *ch) qui affiche une chaine de caractre sur la ligne active.
crire la fonction void lcd_ecrire_chaine_centre(char *ch, char l) qui affiche une chaine de caractre en la
centrant sur la ligne l , selon le principe ci dessous.
- Cas d'une chaine de longueur paire :

M1 SIS 30 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

C H A I N E
- Cas d'une chaine de longueur impaire : (plus d'espace droite).
C H A I N E S

Tester ses fonctions sur la carte.


9.1.3. Cration de la libraire afficheurlcd
Nous disposons maintenant d'un ensemble de fonctions de gestion du LCD afin de les utiliser et de pouvoir les
diffuser plus facilement nous allons les regrouper dans une librairie que l'on nomera afficheurlcd . Une librairie
(fichier *.lib) est en fait une compilation de fichier objets. Les fichiers objets contiennent entre autres la liste des noms
de fonctions ou les tiquettes (pour ASM) ainsi que leur code machine (codage binaire, ces fichiers ne sont pas
ditables). Les fichiers objets (*.o) sont obtenus aprs compilation de votre code dans MPLAB.

Crer un nouveau projet sous MPLAB comme pour faire un programme classique.
Dans le fichier source coller vos fonctions de gestion de l'afficheur avec les diffrents #include
Compiler, une erreur vous informe que la fonction main n'est pas dfinie, c'est normal !

Dans votre rpertoire projet, un fichier objet du mme nom que votre programme a t cr. C'est ce fichier que
nous allons maintenant convertir en librairie l'aide de l'utilitaire de gestion de bibliothque MPLIB. MPLIB est un
programme fonctionnant en mode console sous DOS avec les options suivantes :
/c Cration contenant un ou plusieurs fichiers objets
/t Liste le contenu de la libraire
/d Efface un objet de la librairie
/r Remplace un objet existant dans la librairie
/x Extrait un membre de la librairie

La syntaxe d'utilisation de MPLIB est :


MPLIB /{ctdrx} nom_librairie [liste de fichiers objets]

Ouvrir une fentre dos (Menu dmarrer, Excuter, cmd)


Se positionner dans le rpertoire o vous souhaiter crer la librairie, dans l'exemple D:\tps\tp6\ (commande DOS
cd : change directory)
Crer la librairie en utilisant la commande MPLIB /c afficheurlcd.lib votre_fichier_objet.
Un exemple de cration est reproduit en figure 21.

C:\Documents and Settings\Flavien>D:


D:\>cd tps\tp6
D:\tps\tp6>
D:\tps\tp6>mplib /c afficheurlcd.lib D:\tps\tp6\lib\lcdlib.o
MPLIB 4.12, Librarian
Copyright (c) 2007 Microchip Technology Inc.
Errors : 0
D:\tps\tp6>

Figure 21: Cration d'une librairie avec MPLIB


Pour utiliser une librairie il faut soit lui associer un fichier d'entte (*.h) dans lequel se trouve les prototypes de
vos fonctions soit dclarer les prototypes dans votre programme. Le fichier d'entte tant simplement un fichier texte
renomer afficheurlcd.h .

Crer le fichier afficheurlcd.h dans le mme rpertoire que afficheurlcd.lib

Inclure la librairie dans un projet

Si l'on souhaite utiliser notre bibliothque comme une bibliothque dj installe (avec

M1 SIS 31 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

#include<afficheurlcd.h> avec MPLAB, il est necesaire de modifier la variable d'environnement MCC_include et de


modifier le fichier d'dition de liens (*.lkr). Dans le cadre des travaux pratiques nous n'utilerons pas cette mthode.

La procdure suivre pour utiliser la bibliothque est la suivante :


Dans votre rpertoire projet, copier-coller les fichiers afficheurlcd.lib et afficheurlcd.h .
Ajouter le fichier afficheurlcd.lib au dossier Library Files de votre projet.
Insrer la directive #include "afficheurlcd.h" au dbut de votre programme.

Tester votre librairie.

9.2. Gestion de l'EEPROM


La mmoire EEPROM (Electrically-Erasable Programmable Read-Only Memory ou mmoire morte effaable
lectriquement et programmable) (aussi appele E2PROM ou EPROM) est un type de mmoire morte. C'est dire
utilise pour enregistrer des informations qui ne doivent pas tre perdues lorsque l'appareil qui les contient n'est plus
aliment en lectricit. Toutes les informations ncessaires la lecture est l'criture dans l'EEPROM interne se
trouvent dans la datasheet pages 83 87. Le PIC 18F4520 dispose de 256 octets de mmoire EEPROM interne qui sont
rparties de la manire suivante :

l'tat du panneau (1 octet)


le titre du message (17 octets : 16 caractres + le caractre '\0' de fin de chaine)
le corps du message (237 octets : 236 caractres + le caractre '\0')

crire les fonctions char eeprom_lire(char ad) et void eeprom_ecrire(char data, char ad) qui permettent
respectivement de lire et d'crire l'adresse ad de l'EEPROM. L'adresse mmoire varie entre 0x00 et 0xFF.

Dans la fonction d'criture l'interdiction des interruptions est ncessaire seulement si celle-ci ont t active et on ne
doit pas quitter cette procdure tant que l'enregistrement dans la mmoire n'est pas termin. Vous pouvez tester les
fonctions d'criture et de lecture dans l'EEPROM avec le simulateur de MPLAB condition de dsactiver l'attente de
fin d'criture... Aller dans le menu View > EEPROM en double cliquant sur un espace mmoire vous pouvez le
modifier.

Pour notre panneau d'affichage, nous allons venir lire la chaine (ligne 1) ou une partie de la chaine (ligne 2) dans
l'EEPROM. Pour cela vous allez crie la fonction void eeprom_lire_chaine( char *ch, char len, char ad) . Cette
fonction copie dans la chaine ch le contenu de l'EEPROM partir de l'adresse ad jusqu' ce que le caractre '\0'
soit rencontrer ou que la chaine ch soit de longeur len
Quel sont les plages d'adresse en EEPROM de l'tat de l'afficheur, le titre et le corps du message ?
crire la fonction eeprom_lire_chaine. Simuler cette fonction avec MPLABSIM.

9.3. Panneau d'affichage

9.3.1. Panneau message fixe


crire un programme qui affiche le titre du message sur la premire puis fait dfiler en continu le corps du
message sur la seconde ligne: le corps du message commence apparatre sur la droite de l'cran, puis dfile vers la
gauche. Quand la dernire lettre du corps du message sort de la gauche de l'cran, le dfilement recommence. Dans
ce programme, vous devez galement grer l'tat du panneau : si l'tat vaut 0, le texte ne dfile pas et "Hors Service"
est affich sur le panneau, si l'tat vaut 1, le corps du message dfile. La vitesse de dfilement est de 500
ms/caractre. Lorsque l'afficheur est en service la led connecte RB0 est allume, en hors service elle clignote
une frquence de 1 Hz.

Vous pouvez programmer l'EEPROM interne du C via MPLAB afin d'initialiser le texte afficher. Vous
pouvez initialiser vous mme le texte afficher dans l'EEPROM en respectant les plages mmoires, les valeurs et le
caractres '\0' ou alors importer directement le fichier tp6_eeprom.mch qui vous est fourni. Lors de la
programmation du C, l'EEPROM le sera galement.

Tester ce programme sur la carte, penser essayer le cas o le panneau est actif et celui o il est hors service.

M1 SIS 32 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

9.3.2. Panneau message variable


Le programme que vous venez d'crire est trs utile pour diffuser un message mais peu pratiques. En effet, si
chaque fois que la secrtaire veut modifier le message elle doit prendre un programmateur et reprogrammer l'EEPROM,
elle ne voudra pas l'utiliser : c'est compliqu, a prend du temps, il faut sortir le microcontrleur du panneau...
Pour rgler ce problme vous allez mettre en place un systme de mise jour distance en utilisant le protocole
RS232 comme vous l'avez dans le TP n5. Via hyperterminal la secrtaire accdera une interface d'administration qui
lui permettra de modifier l'tat du panneau, le titre et le corps du message.
Le programme va donc afficher en continu le message et basculer en mode mise jour lorsque la commande sera
reue. Les diffrentes commandes et la procdure de mise jour sont dfinis dans l'algorigramme figrue 22 page
suivante.

Complter le progammme prcdent pour intgrer l'interface d'administration. Commentez bien ce programme
afin d'expliquer ce que vous fates et pourquoi.

Penser grer la taille maximale des chaines et le carctre '\0' en cas de dpassement de la taille maximale en inform
la secrtaire (hyperterminal).

Valeur dans
RCREG ?
RCREG='d' RCREG='e' RCREG='s' RCREG='u'

Mettre le panneau Renvoyer l'tat du panneau Afficher Mise jour


hors leservice
Mettre panneau Mettre le panneau et le contenu du titre et du sur le panneau
hors service en service corps du message
dans hyperterminal Rcuprer le nouveau
titre du message

Rcuprer le nouveau
corps du message

Afficher dans hyperterminal,


que la commande a t effectue

Figure 22: Algorigramme de l'interface d'administration du panneau

L'application ralise ici est trs proche d'un cas d'utilisation relle si ce n'est que l'afficheur aurait peut tre plus
de lignes. La diffrence majeure serait dans l'interace d'administration elle ne serait pas ralise avec hyperterminal,
mais avec un programme spcial en C, C++, etc ... qui serait crit avec des botes de dialogues beaucoup plus conviales
pour la secrtaire.

M1 SIS 33 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

10. TP n7 : Station Service C


Dans ce TP nous allons raliser de la manire la plus raliste possible le programme de commande d'un automate
de pompe essence.

10.1. Automate de Pompe


Le bouton poussoir connect RB0 reprsente la poigne de distribution de carburant. Lorsque le bouton est
appuy, la distribution est en cours, le moteur de la pompe est alors est alors activ (led RB3 claire). Un dbitmtre
mesure le dbit de carburant afin de calculer le volume, il donne une impulsion chaque centilitre vers. Ici, il sera
simul par le timer 0 qui effectura une impulsion toute les 15 ms environ.

crire un premier programme qui initialise les entres sorties utilises, le timer 0, autorise les interruptions puis
l'infini xcute :
moteur pompe arrt
dbimtre arrt
tant que Poigne Accroche faire
fin faire
moteur pompe activ
dbimtre activ
tant que Poigne Dcroche faire
fin faire
Pour tester ce programme lors d'une interruption, inverser l'tat de RC2 afin d'envoyer un signal d'environ 50 Hz sur le
transducteur pizo-lectrique.

Nous allons maintenant intgr au programme les calculs de volume et de prix. Le volume est compt en
centilitres de 0 9999 cl. Il peut donc tre stocker dans une variable de type entier (16 bits). Le prix du litre est fix
1,08, un centilitre vaut donc 1,08 centime d'euro. Le prix maximun peut atteindre 108,00 . Le prix sera donc un
nombre de centimes de centimes variant entre 0 et 1079892, il doit tre cod sur entier long (32 bits).
Chaque interruption du timer 0 correspond un centrilitre vers. Le sous programme d'interruption incrmentre
le volume (+1cl) et le prix en centime de centime (+108c). On aurait galement pu calcul le prix en multipliant le
volume par le prix au litre mais cela aurait ncessit des multiplications, plus longues effectuer que les additions.

Modifier votre programme pour intgrer ces calculs, puis assurez-vous en simulation que le volume et le prix
voluent correctement.

L'afficheur LCD va nous permettre (via la librairie crite au TP n6) d'afficher le prix et le volume lorsque la
distribution est en cours. Le volume est un entier compris entre 0 et 9999 et nous voulons l'afficher l'cran sous la
forme dcimale :
<m><c>,<d><u> l
o < m >, ..., < u > reprsentent respectivement le chiffre des milliers, centaintes, dizaines et units.
Si on effectue la division euclidienne de la variable volume par 1000, < m > est le quotient et le
reste reprsente centaines, dizaines, units ...

En C, le quotient de la division euclidienne est donne pas l'oprateur / et le reste par %.

Ajouter ces calculs au programme prcdent, et le simuler. Vrifier l'exactitude des diffrents chiffres afficher.
Puis en utilisant les points d'arrt, mesurer la dure d'xcution du code de calcul des chiffres afficher.
Pour acclrer les calculs, nous allons utiliser l'algorithme suivant, donn ici pour le chiffre <m>. Les calculs
tant effectu dans la variable vol afin de ne pas modifier la variable volume.

m = 0
vol = volume
tant que vol >= 1000 faire
m = m + 1
vol = vol 1000
fin faire

M1 SIS 34 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Aprs avoir bien compris cet algorithme, remplacer toutes les divisions de votre programme par ces boucles
(fonction : deux valeurs sont retourner effectuer un passage par adresse pour l'une des deux ...). Simuler le
fonctionnement et mesurer la dure d'xcution. Attention ! La dure dpend du chiffre dterminer. Faites des
essais avec le volume 1 puis avec les valeurs qui donneront la plus grande dure. Avons nous gagn beaucoup de
temps ?

Le prix et le volume sont affichs de la manire suivante :


G a z o l e 1 , 0 8 E / l
x x , x x l y y y , y y E

On calcule le prix afficher de la mme faon que le volume. Quel est le premier chiffre afficher ? crire le
code corresspondant au calcul des yyy,yy .

Lorsque que le client raccroche la poigne, la pompe est bloque tant que celui-ci n'a pas pay. La validation du
paiement tant reue de l'automate de caisse. Pour l'instant un appui sur RA4 validera la paiement et permettra au client
suivant de se servir en carburant. Intgrer galement la contrainte que le volume ne doit pas dpasser pas 9999cl, sinon
la pompe s'arrte et attends le paiement.

crire et tester ce programme sur la carte.

10.2. Communication avec l'automate de caisse


Gnralement une station service est constitue de plusieurs pompes. On ne peut donc pas utiliser une connexion
de type RS232 pour communiquer avec l'automate de caisse ou alors il faut, chaque client, aller brancher le cble sur
la bonne pompe... Heuresement il existe d'autres manires de communiquer afin de mettre plusieurs entits en rseau.
Le PIC 18F4520 intgre un module MSSP de communication srie (Master Synchronous Serial Port) qui gre entre
autre le protocole IC que nous allons utiliser.
10.2.1. Le bus IC
IC (pour Inter Integrated Circuit Bus) est le nom du bus historique, dvelopp par Philips pour les applications
de domotique et dlectronique domestique au dbut des annes 1980, notamment pour permettre de relier facilement
un microprocesseur les diffrents circuits dune tlvision moderne . Le bus IC est un bus srie synchrone constitu
de deux lignes : Serial Data Line (SDA) et Serial Clock Line (SCL) qui assurent la communication entre diffrents
modules.

SDA
SCL

Maitre Esclave 1 Escalve n


m etteur, rcepteur m etteur, rcepteur
... m etteur, rcepteur

Figure 23: Architecture IC

Le module qui demande le transfert de donnes et qui gnre lhorloge est le matre, le module qui rpond est un
esclave. Un mme systme peut disposer de plusieurs matres, on le nomme alors multimatre. Dans ce cas, il faut
arbitrer la discussion entre les diffrents modules. Nous ne verrons ici seulement le cas d'un seul matre avec plusieurs
esclaves. Le bus IC travaille une vitesse de 100 kbits/s en mode standard et 400 kbits/s en mode rapide. Les lignes
SDA et SCL sont bidirectionnelles. Au repos, elles sont au niveau haut.
Le format d'une trame standard est reproduit dans le tableau 4. Un transfert type IC est reproduit en figure 25.

S Adresse RW A Donnee A ... Donnee A P


Tableau 4: Trame IC
S : bit de start, est la condition de dpart : SDA passe de ltat haut ltat bas pendant que SCL est au
niveau haut (cf. figure 24).
Adresse : reprsente celle du module laquelle on veut s adresser, elle est compose de 7 bits
A6A5A4A3A2A1A0, A6A5A4A3 sont fixs par lIC commitee A2A1A0 sont libres pour nous permettre de

M1 SIS 35 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

mettre plusieurs fois le mme esclave sur le bus (au maximum 8).
RW (Read Write) : est le bit de mode de transmission. Sil est 0, on est en mode criture, cest le matre
qui envoie des donnes lesclave. Sil est 1, on est en mode lecture, cest lesclave qui envoie des
donnes au matre. LAdresse et R/W sont transmis ensemble ce qui forme un mot de 8 bits.
A : bit dacquittement, il a lieu la fin de chaque transmission dun mot pour dire que le rcepteur a bien
reu les donnes. Aprs, lenvoi du mot de 8 bits, au coup dhorloge, le rcepteur force SDA ltat bas.
Donne : sont les huit bits de donnes que lon transmet.
P : bit de stop, est la condition de stop. SDA passe de ltat bas ltat haut pendant que SCL est au niveau
haut (cf. figure 24).

Figure 24: Bus IC, Bit de Start et Bit de Stop


Daprs le protocole de transfert, on peut voir que le nombre maximal desclaves est 27 soit 128. Comme les
lignes SDA et SCL sont au repos au niveau haut, les composants (matres, esclaves) IC ne peuvent donc que les forcer
qu ltat bas. Ce fonctionnement impose aux circuits des sorties collecteur (figure 26) ouvert ou drain ouvert pour
SDA et SCL (cf. Documentation IC).

Le matre met l'adresse de l'esclave, RW l'metteur met les donnes, le matre


et gre l'horloge. gre l'horloge.

Le matre met l'adresse de l'esclave, RW et l'metteur met les donnes, le matre gre
gre l'horloge. l'horloge.
Figure 25: Transfert de donnes sur le bus IC

M1 SIS 36 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Pour stopper une transmission, en mode lecture le matre nacquitte pas le dernier mot transmis et gnre un bit
de stop. En mode criture, si lesclave nacquitte pas le dernier mot, le matre gnre le bit de stop. Les donnes ne sont
valides que sur un niveau haut de SCL. Une extension de l'IC permet d'avoir plus de priphriques en codant l'adresse
sur 10 bits, nous ne verrons pas ce cas dans ce tp.

Figure 26: Connexions collecteur ouvert

Sur un bus IC, le pic peut tre soit matre soit esclave. Dans notre application qui jouent les rles de matre et
d'esclave ? Justifier votre rponse.
10.2.2. change entre les automates de caisse et de pompes
Les tableaux suivants reprsentent les changes entre les automates :
Message

En attente de client 'c'


Distribution en cours 'o'
Distribution termine, attente de validation du paiement 'ayyyyy' *
Tableau 5: Communication Automate de pompe vers caisse

Message

Validation du paiement 'v'


Tableau 6: Communication Automate de caisse vers pompe
* : yyyyy sont les chiffres du montant payer.
10.2.3. Le bus IC et l'automate de caisse
Nous allons commencer par tudier le programme de l'automate de caisse. Ce programme permet via
hyperterminam de communiquer avec les pompes. Pour connatre le statut d'une pompe, il suffit de saisir son numro
dans hyperterminal l'aide du pav numrique. Nous nous intressons seulement la partie IC du programme dans le
TP.

Expliquer, commenter les fonctions de l'automate de caisse reproduite dans le tableau 7.


partir de ces fonctions de gestion du bus, crire les fonctions de communication void i2c_master_to_slave(
char adresse, char donnee ) et char i2c_slave_to_master( char adresse ) ralisant respectivement le transfert
d'un octet du matre vers l'esclave et de l'esclave vers le matre.

Les chronogrammes page 192 et 193 de la datasheet pourraient vous tre utile.
Quelles modifications faut-il apporter aux fonctions que vous venez d'crire pour qu'elles soient utilisables dans
le cas de la station service ?

M1 SIS 37 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

void i2c_master_init( void ) void i2c_master_ack( void )


{ {
TRISCbits.TRISC3=1; SSPCON2bits.ACKDT=0;
TRISCbits.TRISC4=1; SSPCON2bits.ACKEN=1;
SSPCON1=0b00101000; while(SSPCON2bits.ACKEN);
SSPSTATbits.SMP=1; }
SSPADD=9;
SSPCON2=0; void i2c_master_nack( void )
} {
SSPCON2bits.ACKDT=1;
void i2c_master_start_bit( void ) SSPCON2bits.ACKEN=1;
{ while(SSPCON2bits.ACKEN);
SSPCON1bits.SSPEN=1; }
SSPCON2bits.SEN=1;
while(SSPCON2bits.SEN); char i2c_master_ecrire( char octet )
} {
SSPBUF=octet;
void i2c_master_restart_bit( void ) while(SSPSTATbits.R_W);
{ return SSPCON2bits.ACKSTAT;
SSPCON2bits.RSEN=1; }
while(SSPCON2bits.SEN);
} char i2c_master_lire( void )
{
void i2c_master_stop_bit ( void ) SSPCON2bits.RCEN=1;
{ while(SSPCON2bits.RCEN);
SSPCON2bits.PEN=1; return SSPBUF;
while(SSPCON2bits.PEN); }
SSPCON1bits.SSPEN=0;
}

Tableau 7: Fonction IC Automate de Caisse

10.2.4. Le bus IC et l'automate de pompe


Intressons nous maintenant au programme d'un automate de pompe, la pompe tant intrrog par l'automate de
caisse. L'adresse de l'automate de pompe sur le bus IC est code sur 7 bits et correspond au code ASCII du numero de
la pompe. Ainsi l'adresse de la pompe n1 sera 0x31 qui se code bien sur 7 bits. La plage d'adresse est de 0x31 0x38.
L'adresse doit tre stocke dans les bits de poids fort du registre correspondant, le bit 0 de ce registre restant zro. Les
lignes SCL et SDA sont connectes respectivement aux broches RC3 et RC4, broches qui doivent tre configures en
entre. Nous utiliserons le mode de fonctionnement standard et sans interruptions de bits de Start et de Stop.

C'est l'automate de caisse qui va venir demander l'automate de pompe la somme encaisser. Lorsque

A6 A5 A0 RW D7 D6 D5...0

Bit de Bit de
Acquittement de Acquittement du rcpeteur si ce n'est
Start l'esclave pas la fin du transfert Stop

l'automate de caisse veut faire une demande, il envoi sur le bus l'adresse de la pompe intrroge (mode lecture). Si
l'automate de pompe reconnat son adresse et le flag SSPIF se lve. Si les interruptions ont t autorise le programme
passe alors la routine associe.

L'automate de pompe fonctionnant en mode esclave il est donc ncessaire d'utiliser les interruptions car sinon, le
programme va passer son temps surveiller le bus et ne pourra pas effectuer la distribution de carburant. D'autant plus
que la demande de l'automate de caisse peut intervenir n'importe quand. (Nous utiliserons les messages reproduits en
tableau 5.)

M1 SIS 38 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Complter la fonction d'initialisation (ci-aprs) du module MSSP pour l'utilisation en mode IC dans le cas d'un
automate de pompe. Expliquer vos initialisations.

void i2c_slave_init(void)
{
TRISCbits.TRISC3 = ...
TRISCbits.TRISC4 = ...
SSPCON1 = ... //CKP=1 ...
SSPCON2=0;
SSPSTAT=0;
SSPSTATbits.SMP = ...
SSPADD = ...
IPR1bits.SSPIP = 1
... = ...
... = ...
}

En utilisant la datasheet du pic, quels sont les bits initialiser pour autoriser l'interruption du module IC ?
Rajouter ces initialisations la fonction void i2c_slave_init( void ) .

En regardant la datasheet on s'aperoit quand mode esclave, il y'a 3 bits qui permettent de connitre l'tat de la
communication IC. Tout le reste tant grer par le module MSSP et donc transparent pour nous. Ceux sont les bits
R_W, D_A et BF du registre SSPSTAT.

Quelles sont les informations que nous donnent chacun de ces bits ?

L'tude des chronogrammes page 176 et 177 de la datasheet montrent les diffrentes configurations possibles de
ces bits lors d'une interruption du module IC :

D_A R_W BF Point de vue Matre Point de vue Esclave


0 0 1
1 0 1
0 1 0
1 1 0
Mode lecture : le matre a gnr un Fin de l'envoi, ce cas n'est pas obliger
1 0 0 ACK signifiant la fin de la lecture. d'tre traiter dans le programme.

Tableau 8: IC, esclave, interruption MSSP : Diffrentes configurations possibles

Complter le tableau 8. En fonction de la configuration de D_A, R_W, BF , expliquer ce que veut le mettre
et ce que doit faire l'esclave.

Lors d'une requte de lecture, le module IC esclave du PIC force SCL 0 pour empcher que le matre
reprenne le contrle du bus avant qu'il est pu prparer la donne transmettre. Une fois que la donne transmettre est
prtre il faut repositionner le bit CKP du registre SSPCON1 1 afin de relcher l'horloge. On parle de clock stretch.

Erratum Microchip Mode IC : Dans la datasheet du PIC18F4520, il est dit que dans le cas d'une lecture du matre, la
rception de l'octet d'adresse ne positionne pas le bit BF, or ce n'est pas le cas ! Tenez compte de cette erreur dans
l'criture de votre routine d'interruption IC.

Intgrer les fonctions IC au programme de l'automate de pompe et tester son fonctionnement. Le programme de
l'automate de caisse vous est fournit. Lisez la partie suivante avant de tester votre programme sur la carte.
10.2.5. Connexion IC entre deux cartes PICDEM 2 Plus
Comme on peut le voir sur la figure 26, la partie physique d'un bus IC est ralise par trois lignes lectriques : la
masse (GND), les donnes (SDA) et l'horloge (SCL). Comme les composants connects sont de types collecteur ouvert

M1 SIS 39 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

ou drain ouvert, les lignes SDA et SCL doivent tre maintenues l'tat haut par une rsistance. Ces rsistances sont
dites de pull-up et sont cacules en fonction du nombre de composants, de la longueurs du bus ... (cf. documentation
IC de Phillips).
Dans le cas des cartes PICDEM 2 Plus, chacune d'entre elle a dj ses rsistances puisqu'elles disposent d'un
capteur de temprature et d'une EEPROM IC. Donc si on connecte directement deux cartes ensemble, on se retrouve
avec les deux rsistances en parallle sur chaque ligne (le courant est donc multipli par 2) et on a deux fois le mme
composant sur le bus (cela ne serait pas grave si les composants n'avait pas la mme adresse, hors les deux cartes sont
identiques). Pour vos tests, vous devez donc utiliser le microcontrleur pour lequel le support a t modifi : les broches
RC3, RC4 et GND ont t remplaes par des fils connects une autre carte PICDEM 2 Plus.

PICDEM 2 Plus - I PICDEM 2 Plus - II


PIC PIC

24L256
24L256
TC74

TC74
GND GND

RC3 RC4 RC3 RC4

SDA SDA
GND GND
SCL SCL
R R R R
+5 V +5 V
Figure 27: Connexion en IC de deux cartes PICDEM 2 Plus

Dans le programme de caisse, si vous taper le caractre 't' dans hyperterminal, la temperature sera affiche en utilisant
le capteur TC74 connect au bus l'adresse 0x4D.

Rdiger un petit bilan sur l'ensemble des travaux pratiques : Qu'est ce qui vous a plu, dplu, ennuy ? Qu'avez
vous appris, retenu ? Y'a t'il des choses amliorer pour les futurs tudiants ? ...

M1 SIS 40 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520

Notes :

M1 SIS 41 2011/2012
Travaux Pratiques de Microcontrleur