Professional Documents
Culture Documents
Travaux Pratiques
de
Microcontrleur
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
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
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
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.
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.
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
RB0 = 1 RB0 = 0
Allumer L1 Eteindre L1
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
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,
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
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.
Longlet Pin / Register Actions de la fentre Stimulus permet la saisie des vnements en programmant
leurs dates darrive (vnements 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 :
M1 SIS 5 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
Aprs chaque changement dans lchancier dvnement, cliquer sur Apply afin que ces changements
soient pris en compte par la simulation.
Dclencher
M1 SIS 6 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
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.
Dmarche de transfert :
Connecter le programmateur PICSTART Plus sur le port srie du PC et au secteur
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
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.
;----- Initialisation
Init clrf PORTB Remise zro des bascules D du port B et dfinition du
movlw h'00' port B en sortie.
movwf TRISB
;----- 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
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.
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.
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
M1 SIS 10 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
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
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.
Les connexions entre le contrleur d'affichage et le microcontrleur sont regroupes dans le tableau 1.
M1 SIS 11 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
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
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
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.
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.
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
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 .
M1 SIS 16 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
Interruptions de dbordement
max
T
Figure 14: Interruption de dbordement du TIMER0
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
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
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.
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)
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!
M1 SIS 18 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
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 :
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.
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,
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.
M1 SIS 20 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
Assembleur Compilateur C
Fichiers pr-
compils
script de
configuration de
l'diteur de lien
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.
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).
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.5. Applications
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
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.
//-------------------------------------------------
// Configuration des interruptions, cf. sections 9 et
// 11 du datasheet et le fichier header p18h4520.h
//-------------------------------------------------
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).
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
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).
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 :
M1 SIS 26 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
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).
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
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)
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.
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 :
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'.
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.
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.
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
...
_endasm
}
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.
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
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
Si l'on souhaite utiliser notre bibliothque comme une bibliothque dj installe (avec
M1 SIS 31 2011/2012
Travaux Pratiques de Microcontrleur PIC 18F4520
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.
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
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'
Rcuprer le nouveau
corps du message
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
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 ...
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 ?
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.
SDA
SCL
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.
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).
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.
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
Message
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
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 :
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.
24L256
24L256
TC74
TC74
GND GND
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