Vous êtes sur la page 1sur 14

Universit de Savoie Module ETRS-604

Travaux Pratiques
Microprocesseurs & Microcontrleurs

Sylvain MONTAGNY sylvain.montagny@univ-savoie.fr Btiment chablais, bureau 13 04 79 75 86 86

TP1 : Programmation sur microcontrleur PIC (1) TP2 : Programmation sur microcontrleur PIC (2) TP2 : Programmation sur microcontrleur PIC (3)

Universit de Savoie Module ETRS-604 Microprocesseurs et microcontrleurs

TP1
Programmation sur microcontrleur PIC
Objectifs : Mise en uvre des fonctions dun microcontrleur PIC en langage C

1. Prsentation
Les microcontrleurs sont des composants qui intgrent sur une mme puce toutes les fonctions ncessaires une application ddie linformatique industrielle. Processeur Mmoires : (vives et mortes) Timer Liaison srie Convertisseur analogique-numrique Port dentre/sortie Ces microcontrleurs sont la base dun grand nombre dapplications industrielles et leur fonctionnement peut tre transpos la plupart des familles de microcontrleurs. On se propose de dcouvrir la totalit dune chane de dveloppement des microcontrleurs PIC. Ces microcontrleurs dvelopps par la socit Microchip sont extrmement rpandu dans le milieu industriel grce leur simplicit et leur cot rduit. Le microcontrleur utilis sera le 16F877 ou le 16F877A. Le synoptique de la Figure 1 rappelle le cycle de cration dun programme excutable pour un processeur.

Fichier source MonProg.ASM MonProg.C

1-diteur de texte

2-Compilateur
Fichier Objet MonProg.OBJ

3-Linkeur
Bibliothques Fichier excutable MonProg.EXE Mon Prog.HEX

4-Chargeur

Mmoire

Figure 1 : synoptique dun cycle de compilation

2. Prise en main de lenvironnement


2.1. La carte de dveloppement
Vous disposez dune carte propose par Mikroelektronika qui permet de raliser beaucoup dapplication. Les lments qui peuvent tre relis au microcontrleur sur cette carte sont : Les boutons poussoir, Les leds Un port srie Des entres analogiques Un cran LCD Un port USB Un capteur de temprature numrique

2.1.1 Alimentation et communication avec la carte


La connexion de la carte avec le PC se fait avec la connexion USB (le port USB de gauche sur la carte). Cette communication par USB est aussi utilise pour lalimentation de la carte.

2.1.2 La suite logiciel et matriel de Mikroelektronika


Nous utiliserons lenvironnement dvelopp par Mikroelektronika qui rassemble : La carte de dveloppement EasyPIC 4 Loutil de dveloppement logiciel : mikroC v7.0.0.3 (diteur de texte, compilateur et diteur de liens) Le chargeur du programme excutable en mmoire : PicFlash v7.07 Le debugger : MikroICD Debugger

Lensemble des ports dE/S du composant install sur son support peut tre reli au choix par des Leds, des boutons poussoirs, ou simplement dports pour tre visualis sur loscilloscope. Les connexions de ces diffrents lments se font par des cavaliers et des interrupteurs. La documentation explique trs bien les diffrentes options disponibles.

2.1.3 Utilit dune carte de dveloppement


Celles-ci permettent de faire des tests dapplication avant la mise en production dun produit. La carte de dveloppement permet donc davoir une connexion directe entre le PC et le microcontrleur afin de connatre en temps rel les valeurs des registres ou de nimporte quel emplacement mmoire du microcontrleur. Cette liaison de DEBUG (connexion entre PC et microcontrleur) nest pas dfinitive mais seulement temporaire la dure de dveloppement et de test du programme. Celle-ci linconvnient de prendre 2 broches dentre sortie du PIC (Pins 6 et 7 du port B). Une autre forme de test, moins puissante mais qui ne prend aucune ressource au microcontrleur est la simulation. Le code nest alors pas charg dans la cible (microcontrleur) et le code sexcute sur le PC en simulation.

2.1.4 Les modes de compilation


Lors de la compilation, deux configurations peuvent tre envisages : Le mode Release : Le code gnr est dbarrass de toutes les informations de debugage (ex : numro de ligne, communication avec le PC, etc). Le code pourra tre simul sur ordinateur mais en aucun cas avec le dbuggeur. Le mode Debug : Les informations de debugage sont lies au fichier excutable. Le fichier est donc plus important et permet une utilisation du dbuggeur. Les broches 6 et 7 du port B seront utilises.

2.2. Dveloppement dun programme


Avant de lancer lenvironnement de dveloppement crez un rpertoire de travail sur votre compte. Tous vos fichiers seront rassembls dans ce rpertoire. Recopiez dans votre rpertoire le fichier clignotement.c :
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. void main (void) { TRISB=0xF0; while(1){ PORTB=0x0F; delay_ms(500); PORTB=0x00; delay_ms(500); } }

Dune faon gnrale, pour tout projet, les tapes suivantes doivent tre ralises : Cration dun nouveau projet Paramtrage du projet (options de compilation, choix du composant cible, options de lditeur de lien) Ajout de fichiers (sources, librairies) au projet Compilation du projet qui gnrera les fichiers suivants :

o fichier.asm : un fichier en langage assembleur avec les codes machines correspondant chaque instruction et les adresses mmoire du code. o fichier.lst : mme information que le fichier.asm avec en plus la rsolution des adresses pour les variables utilises. o fichier.hex : un fichier en langage machine qui peut tre transfr en mmoire programme du microcontrleur laide dun chargeur. Note : Dans de nombreux cas, les valeurs par dfaut des options du compilateur et de lditeur de lien (linker) fonctionnent dans un premier temps. Q1. Quelle est la frquence de cadencement du microcontrleur de votre platine ?

Lancez le logiciel MikroC et raliser les tapes de dveloppement dune application (cration dun projetetc..) jusqu' la compilation du programme clignotement.c en mode Release. Vous essayerez de trouver de faon intuitive comment raliser ces tapes une une. Q2. Avant de tester sur la platine, visualiser le code gnr par le compilateur (View>View Assembly). Il sagit du fichier clignotement.asm. Expliquer les instructions importantes qui sont utilises pour linitialisation et le pilotage des leds. Q3. Daprs la documentation EasyPic User Manual sur les switches et sur les LED, dessiner le montage que vous souhaitez raliser sur votre feuille pour faire fonctionner cette application. Prciser alors les rglages apporter sur la carte pour que cela fonctionne.

2.3. Chargement du programme en mmoire


Ceci est ralis avec PicFlash v7.07 qui est intgr linterface de dveloppement. Il va servir transfrer le fichier excutable (clignotement.hex) dans la mmoire du microcontrleur. Licne correspondante au chargeur est situe droite ( ou F11). Le code compil auparavant sera directement charg en mmoire du composant spcifi.

2.4. Debug du programme


Suivant le mode utilis, le lancement du programme est diffrent. En mode DEBUG, dmarrer le debugger (Run>Start Debuger ou F9) et lancer le programme (Run> Run/Pause Debugger ou F6). Vrifier son bon fonctionnement. Remarque : Pour que le debuger soit lanc, il faut quil soit choisi dans Debugger>Select Debugger>MikroICD Debugger. Dans le cas contraire le simulateur sera lanc. En mode release, le programme est lance automatiquement aprs son chargement en mmoire. (Aucun debugage possible)

3. Applications
3.1. Mesure du temps de cycle du processeur
Le temps de cycle est le temps dexcution dune instruction. En faisant passer successivement 1 (une instruction) puis 0 (une instruction) le bit 0 du port B, on peut mesurez loscilloscope le temps de cycle du processeur. Mettre le switch 2 (SW2) convenablement afin davoir accs au mesure directement sur les broches de la carte droite. Reprer lendroit o vous pouvez accder cette mesure daprs le manuel page 32. Q4. Modifier le programme prcdent afin de raliser cette mesure de temps de cycle. Justifiez ce que vous visualisez loscilloscope. Q5. Est-ce cohrent avec les 8 MHz du cadencement du microcontrleur ? Donner une explication cohrente sachant que daprs la documentation, un temps cycle (=une priode dinstruction) correspond 4 priode dhorloge.

3.2. Dtermination de la persistance rtinienne


La persistance rtinienne est la sensation davoir une image fixe due au changement trop rapide dtat de la led. Nous allons essayer de dterminer la persistance rtinienne de nos yeux en utilisant les fonctions de temporisation notre disposition. Les temporisations sont trs pratiques et trs souvent utilises en programmation industrielle. Vous pouvez retrouver ces fonctions de temporisation en tapant le mot cl delay dans laide. Pour le calcul de la persistance rtinienne, on se propose de raliser un programme qui ajuste la dure ltat haut et ltat bas dun signal carr sur la broche 0 du PORTB. Cette dure sera slectionnable suivant le bouton poussoir appuy sur le PORTC comme prciser cidessous. PORTC, bit 0 : 2 ms PORTC, bit 1 : 5 ms PORTC, bit 2 : 10 ms PORTC, bit 3 : 13 ms PORTC, bit 4 : 15 ms PORTC, bit 5 : 18 ms PORTC, bit 6: 20 ms PORTC, bit 7: 22 ms Q6. Daprs les explications du EasyPic User Manual page 18, dessiner sur votre feuille le schma du montage que vous voulez raliser. Expliquer les configurations des interrupteurs que vous faites sur la platine. Q7. Ecrivez et tester le programme en prcisant la persistance rtinienne que vous avez trouvez.

3.3. Appareil photographique


On dsire utiliser le PIC16F877A pour raliser une partie de la gestion dun appareil photographique. Lobjectif du logiciel implant sur cette architecture de microcontrleur est

de permettre de dterminer la vitesse dobturation, de grer le flash, et de prciser le nombre de photos utilises. Commande de prise de vue (bouton dclencheur) : 1 bit. Mesure de lintensit lumineuse de la scne photographie : 1 bits Nombre de photos ralises (16 poses au maximum) : 4 bits Slection de la commande manuelle ou automatique du flash : 1 bit Commande du Flash : 1bit

3.3.1 Incrmentation du nombre de photos


On propose dinterconnecter les ports A et B aux divers signaux dentres et de sortie du systme de la manire suivante : Dclenchement de la prise de vue : Bit 0 du Port A en entre. Si le bit est au niveau 1 alors le dclencheur est press. Cela sera ralis par un bouton poussoir. Nombre de photos : Bits 0 3 du Port B en sortie. Affichage en binaire sur les leds. Note : La PORTA est un port Multiplex, cela signifie quil est utilis pour deux choses diffrentes. Dans notre cas, il peut tre utilis en mode Analogique (pour le convertisseur AN) ou en mode numrique (pour les ports dentre sortie numrique). Vous devez rgler le registre ADCON1 afin de configurer ce port en mode numrique. Q8. Raliser un programme qui chaque appui sur le dclencheur, incrmente le nombre de photos prises.

3.3.2 Commande du flash


On rajoute notre application une commande dun flash pour amliorer la luminosit de certaines scnes. Le flash sera soit inactif, soit utilis en mode automatique. C'est--dire quil se dclenchera lorsque la mesure dclairage est infrieure un seuil donn par un capteur dintensit. Ce capteur est symbolis par un bouton poussoir sur le bit 2 du Port A. Le flash sera command de la manire suivante :
Dclencheur t Flash 600ms t

Figure 2 : Chronogramme de la commande du flash

Les connexions utilises seront les suivantes : Mode de fonctionnement du flash : Bit 1 du Port A en entre. Si le bit A1 est au niveau 1 le mode du flash est automatique sinon il est inactif. Mesure de lintensit lumineuse pour louverture du diaphragme : Bits 2 du Port A en entre. Cela sera ralis par un bouton poussoir. Si le bit est 1, la scne est sombre, sinon lintensit lumineuse est suffisante (pas besoin du flash). Commande du flash : Bit 4 du Port B. Une LED symbolisera le flash. Q9. Modifiez votre programme C afin de faire fonctionner la commande du flash

Universit de Savoie Module ETRS-604 Microprocesseur & Microcontrleur

TP2
Programmation sur microcontrleur PIC
Objectifs : WatchDog TIMER & Gestion des interruptions sur un microcontrleur en C

1. Etude du WatchDog
Q1. Expliquer le rle du WatchDog dans un systme microcontrleur.

1.1. Mise en vidence du fonctionnement du WatchDog


Pour illustrer le fonctionnement du WatchDog, ditez le programme principal de chien_garde.c suivant :
1. void main( void) 2. { 3. PORTB.F0 = 0; 4. TRISB.F0 = 0; /* PORTB.F0 en Sortie */ 5. PORTB.F0 = 1; /* Allumage de la led */ 6. Delay_ms(100); 7. while (1) { 8. PORTB.F0 = 0; 9. } 10. }

Raliser un projet et compiler ce fichier. Transfrer ce fichier HEX dans le PIC une fois en validant le WatchDog et une autre fois sans slectionner loption WatchDog. Le changement des fusibles ou device flags du WatchDog se font dans Project>Edit Project.

Q2. A laide de ces tests et de la documentation (chapitre 14.1 et 14.13 de la datasheet) expliquer les diffrences de fonctionnement entre ces 2 configurations.

1.2. Dveloppement dune application avec le WatchDog


Pour illustrer totalement le fonctionnement du WatchDog on se propose de coder une simulation de plantage dun logiciel. Le plantage du logiciel sera simul par une boucle infinie while(1); . Le programme aura les fonctionnalits suivantes : Allumage de la led (100ms) puis extinction (100ms) en boucle sur le bit 0 du port B. Plantage du logiciel ds que lon appuis sur le bouton poussoir (bit 0 du port A). Q3. Mettre en place lapplication ci-dessus sans la gestion du WatchDog. Vrifier que le plantage du logiciel est bien effectif. Q4. Mettre en place lapplication ci-dessus avec gestion du WatchDog. Vrifier que le RESET du microcontrleur seffectue bien lorsque celui-ci plante (rentre dans la boucle infinie). Q5. Expliquer quelle instruction il faut utiliser priodiquement pour viter le RESET du microcontrleur lorsque le programme fonctionne normalement. Que fait cette instruction exactement?

2. Etude des interruptions


2.1. Prsentation des interruptions
Ce microcontrleur peut tre interrompu par des sources multiples. En revanche il ne dispose que dun seul vecteur dinterruption. Ce vecteur est en fait ladresse 0004H de lespace programme. Aprs une interruption il est donc ncessaire que le sous-programme dinterruption identifie linterruption qui a t active. Il remontera la source de linterruption laide des bits dtat associs aux interruptions (exemple : Flag T0IF pour un overflow du Timer 1). Linterruption active aura un bit dtat au niveau haut.

2.2. Exemple de gestion des interruptions


Le programme gestion_IT.c propose une illustration du fonctionnement de ces interruptions. Analyser le contenu de ce programme dexemple. Q6. Parmi ces 3 interruptions, laquelle est la plus prioritaire dans le cas o deux sources dinterruption deviennent actives en mme temps ? Q7. Comment peut-on modifier les priorits relatives de ces 3 interruptions ?

Q8. Faire un schma du microcontrleur avec les Leds et les boutons poussoir qui permettront de valider le fonctionnement de ce programme. Compilez cet exemple et transfrez-le dans le PIC (sans WatchDog). Expliquer et Tester son fonctionnement.

2.3. Interruption timer


On dsire gnrer une note proche du La (frquence 440Hz) Ce signal carr priodique doit tre disponible sur le Bit1 du port A et sera visualis sur loscilloscope. Ce fonctionnement est analogue celui du clignotement tudi lors du TP prcdent. La principale diffrence rside dans le fait que lon utilisera linterruption du timer pour dterminer les dures de ltat haut et de ltat bas du signal priodique et non la procdure delay_ms(). Q9. Modifier le programme gestion_IT.C pour raliser la gnration de cette note en utilisant linterruption Timer.

3. Accordeur de guitare
Dans cette partie on se propose dutiliser le microcontrleur dfini prcdemment pour raliser un accordeur de guitare.

3.1. Gnration dune note


Laccord dune guitare peut tre ralis laide dun diapason. La note mise par le diapason est un LA (440 Hz).Elle correspond la 5me corde dune guitare joue vide. Q10. Proposer un programme qui gnre la note LA , lorsque lon appuie sur un bouton poussoir.

3.2. Modification de la corde accorder.


A laide des 2 boutons Suivante et Prcdente on souhaite pouvoir modifier la note gnre par laccordeur. Il sera alors possible daccorder une nouvelle corde de la guitare. Lorsque lon appuie sur le bouton Suivante on passe laccord de la corde suivante et lorsque cest le bouton Prcdente cest laccord de la corde prcdente. Par exemple une fois la 5me corde accorde on peut gnrer la note qui correspond la 4me corde si lon a appuy une fois sur la touche Prcdente . Les notes et les frquences associes chaque corde joue vide sont : 6me corde : Mi 3= 330Hz 5me corde : La 3 = 440Hz me me 4 corde : R 4 = 588Hz 3 corde : Sol 4 = 830Hz 2me corde : Si 4 = 988Hz 1re corde : Mi 5 = 1320Hz Q11. Proposer un programme C intgrant les interruptions permettant de gnrer les 6 notes de chaque corde dune guitare. Les dtections des appuis des touches notes suivantes et note prcdente seront scrutes dans le main(). Q12. Proposer le mme programme en intgrant cette fois seulement la fonction note suivante dont la dtection de lappui de la touche est gre par une interruption externe.

Universit de Savoie Module ETRS-604 Microprocesseurs et microcontrleurs

TP3
Programmation sur microcontrleur PIC
Objectifs : Mise en uvre et utilisation des afficheurs 7 segments, multiplexage laffichage, gestion de laffichage par interruption.

1. Prsentation
Les microcontrleurs doivent souvent rendre compte de certaines informations au monde extrieur au moyen dafficheurs (en gnral des afficheurs 7 segments). Pour Piloter les 7 segments et le point dun afficheur, il est ncessaire de disposer de 8 signaux logiques (et un autre supplmentaire pour activer lafficheur) comme par exemple ceux dun port dun microcontrleur. Lorsque quun seul afficheur est commander, un port du microcontrleur lui sera ddi (plus un signal logique supplmentaire issu dun autre port pour activer lafficheur). En revanche, si 4 afficheurs sont piloter, il devient rdhibitoire dutiliser autant de port du microcontrleur que dafficheurs : il faut alors utiliser la technique du multiplexage laffichage o un seul port pilotera chaque afficheur mais seulement un moment donn.

2. Mise en uvre dun afficheur


Figures 26 et 27 page 21 du User Manual de la carte EasyPIC4, vous est donn le schma lectrique complet qui permet le pilotage des 4 afficheurs par le PIC 16F877A.

Partie hardware

Q1. Analysez ce schma puis expliquez qualitativement son fonctionnement. Quel est notamment le rle des broches Ra0 Ra3 du port A et celui de toutes les broches du port D. Q2. Prcisez alors les rglages (Switch SW2 en particulier) apporter sur la carte EasyPIC4 pour que le fonctionnement des 4 afficheurs soit possible.

Partie software

Q3. Quels niveaux logiques doit on prsenter sur chacune des sorties du port D pour pouvoir afficher le chiffre 0 ou la lettre U sur un seul afficheur. Donnez alors la valeur sous binaire, dcimale ou hexadcimale que doit prendre le port D (pour 0 etU).

Nota: pensez utiliser loutil ddi AFFICHEUR 7 SEGMENTS dans le menu : Tools --> Seven Segment Convertor Q4. Ecrire le code dune fonction C Affiche_Chiffre qui prend un nombre entier N comme argument et renvoie un nombre non sign sur 8 bits (unsigned char). Ces 8 bits permettront de dlivrer les bons niveaux logiques affecter au port D pour afficher le nombre N sur lafficheur DIS0 (celui le plus droite). Q5. Ralisez un programme qui permet de tester la fonction FormatAffichChiffre . Ce programme pourra par exemple tre un compteur allant de 0 9 chaque fois que lon appuie sur un bouton poussoir (BP). Un autre bouton poussoir permettra le dcomptage de 9 0. On grera aussi le dpassement : si on est 9 et que le BP comptage est de nouveau appuy, on repasse 0 (mme principe pour le dcomptage : si on est 0 on repasse 9). On prvoira aussi un autre bouton poussoir pour effectuer une remise zro tout moment.

3. Multiplexage et persistance rtinienne


Q6. Raliser un programme cyclique (qui tourne en permanence) qui utilisera les 4 afficheurs en faisant apparatre successivement pendant 500 ms: dabord un 2 sur lafficheur DIS0, puis un P sur lafficheur DIS1, ensuite un U sur lafficheur DIS2 et enfin un I sur lafficheur DIS3. Nota : pour obtenir une priode de 500 ms, on pourra utiliser la fonction : Delay_ms (Nb de milliseconde) Q7. Modifiez votre programme afin que lon puisse observer le sigle IUP2 en entier sans effet dintermittence.

4. Application : minuteur
Q8. Ecrire le code dune fonction C Separe_DU qui prend un nombre entier N (infrieur ou gal 59) comme argument et qui spare alors les dizaines et les units en plaant ces deux nombres dans deux variables diffrentes de type entier. Q9. Concevez un programme qui permet de raliser les fonctionnalits dun minuteur pouvant au maximum donn un temps jusqu' 10 minutes avec une prcision gale la seconde. Nota 1 : les afficheurs DIS0 et DIS1 afficheront les secondes prcises de 0 59, lafficheur DIS2 affichera en permanence un point et enfin lafficheur DIS3 affichera les minutes prcises de 0 9. Nota 2: un BP dmarrera le comptage, un BP larrtera et enfin un BP permettra la RAZ du minuteur.

Nota 3: pensez utiliser linterruption timer0 (quil faudra paramtrer comme dans le TP2) pour un rafrachissement correct des afficheurs afin que notre il nait pas la sensation dintermittence ou de scintillement.