Module ETRS-604
Travaux Pratiques
Microprocesseurs & Microcontrôleurs
Sylvain MONTAGNY
sylvain.montagny@univ-savoie.fr
Bâtiment chablais, bureau 13
04 79 75 86 86
TP1
Programmation sur microcontrôleur PIC
I. Présentation
Ces microcontrôleurs sont à la base d’un grand nombre d’applications industrielles et leur
fonctionnement peut être transposé à la plupart des familles de microcontrôleurs. On se propose
de découvrir la totalité d’une chaîne de développement des microcontrôleurs PIC. Ces
microcontrôleurs développés par la société Microchip sont extrêmement répandu dans le milieu
industriel grâce à leur simplicité et leur coût réduit. Le microcontrôleur utilisé sera le 16F877.
L’ensemble des ports d’E/S du composant installé sur son support peut être relié au choix par
des Leds, des boutons poussoirs, ou simplement déportés pour être visualisé sur l’oscilloscope.
Les connexions de ces différents éléments se font par des cavaliers et des interrupteurs. La
documentation explique très bien les différentes options disponibles.
4. Lancement du programme
En mode release, le programme est lancée automatiquement après son chargement en mémoire.
(Aucun debugage possible)
5. Configuration de la carte
Vous devez vous référer systématiquement à la documentation de la carte lorsque vous
souhaitez réaliser une application.
III. Applications
1. Mesure du temps de cycle du processeur
En reprenant l’exemple du TD, mettez en place une application permettant de mesurer le temps
de cycle instruction du processeur. N’oublier pas de bien faire la configuration de la carte afin
de pouvoir visualiser les données du PORTB sur les broches d’extension.
Q3. Modifier le programme précédent afin de réaliser cette mesure de temps de cycle.
Justifiez ce que vous visualisez à l’oscilloscope. Est-ce cohérent avec la fréquence de
cadencement du microcontrôleur ?
Q4. Dessiner sur votre feuille le schéma du montage que vous voulez réaliser. Expliquer les
configurations des interrupteurs que vous faites sur la platine.
Q5. Ecrivez et tester le programme en précisant la persistance rétinienne que vous avez
trouvez.
3. Appareil photographique
On désire utiliser le PIC16F877A pour réaliser une partie de la gestion d’un appareil
photographique. L’objectif du logiciel implanté sur cette architecture de microcontrôleur est de
permettre de déterminer la vitesse d’obturation, de gérer le flash, et de préciser le nombre de
photos utilisées.
Commande de prise de vue (bouton déclencheur) : 1 bit.
Mesure de l’intensité lumineuse de la scène à photographiée : 1 bits
Nombre de photos réalisées (16 poses au maximum) : 4 bits
Sélection de la commande manuelle ou automatique du flash : 1 bit
Commande du Flash : 1bit
Rappel : La PORTA est un port Multiplexé, cela signifie qu’il est utilisé pour deux choses
différentes. Il peut être utilisé en mode Analogique (pour le convertisseur AN) ou en mode
numérique (pour les ports d’entrée sortie numérique). Vous devez régler le registre ADCON1
afin de configurer ce port en mode numérique.
Q6. Réaliser un programme qui, à chaque appui sur le déclencheur, incrémente le nombre
de photos prises.
Déclencheur
t
Flash
600ms t
TP2
Programmation sur microcontrôleur PIC
I. Etude du WatchDog
Q1. Expliquer le rôle du WatchDog dans un système à microcontrôleur.
Transférer ce fichier HEX dans le PIC une fois en validant le WatchDog et une autre fois sans
sélectionner l’option WatchDog. Le changement des « fusibles » ou « device flags » du
WatchDog se font dans Project>Edit Project.
PORTA.F0 Oui
appuyé ?
Non Allumer PORTB.F0
Q3. Mettre en place l’application ci-dessus sans la gestion du WatchDog. Vérifier que le
plantage du logiciel est bien effectif.
Q4. Mettre en place l’application ci-dessus avec gestion du WatchDog. Vérifier que le
RESET du microcontrôleur s’effectue bien lorsque celui-ci plante (rentre dans la boucle
infinie).
Q5. Expliquer quelle instruction il faut utiliser périodiquement pour éviter le RESET du
microcontrôleur lorsque le programme fonctionne normalement. Que fait cette instruction
exactement?
Q6. Parmi ces 3 interruptions, laquelle est la plus prioritaire dans le cas où deux sources
d’interruption deviennent actives en même temps ?
3. Interruption timer
On désire générer une note proche du La (fréquence 440Hz) Ce signal carré périodique doit
être disponible sur le Bit1 du port A et sera visualisé sur l’oscilloscope. Ce fonctionnement est
analogue à celui du clignotement étudié lors du TP précédent. La principale différence réside
dans le fait que l’on utilisera l’interruption du timer pour générer les durées à l’état haut et à
l’état bas du signal périodique et non la procédure delay_ms(…).
Q10. Proposer un programme qui génère la note « LA », lorsque l’on appuie sur un bouton
poussoir.
Q12. Proposer le même programme en intégrant cette fois seulement la fonction « note
suivante » dont la détection de l’appui de la touche est gérée par une interruption externe.
Université de Savoie
Module ETRS-604
Microprocesseurs et microcontrôleurs
TP3
Programmation sur microcontrôleur PIC
I. Présentation
Les microcontrôleurs doivent souvent rendre compte de certaines informations au monde
extérieur au moyen d’afficheurs (en général des afficheurs 7 segments). Pour Piloter les 7
segments et le point d’un afficheur, il est nécessaire de disposer de 8 signaux logiques (et un
autre supplémentaire pour activer l’afficheur) comme par exemple ceux d’un port d’un
microcontrôleur. Lorsque qu’un seul afficheur est à commander, un port du microcontrôleur
lui sera dédié (plus un signal logique supplémentaire issu d’un autre port pour activer
l’afficheur). En revanche, si 4 afficheurs sont à piloter, il devient rédhibitoire d’utiliser autant
de port du microcontrôleur que d’afficheurs : il faut alors utiliser la technique du multiplexage
à l’affichage où un seul port pilotera chaque afficheur mais seulement à un moment donné.
Q2. Ecrire et tester le code d’une 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 délivrer les bons niveaux logiques à affecter au port D pour afficher le
nombre N sur l’afficheur DIS0.
Note : Pour obtenir une TEMPO de 500 ms, on pourra utiliser la fonction :
delay_ms (Nb de milliseconde)
Q5. Modifiez votre programme afin que l’on puisse observer le sigle « STIC » en entier
sans effet d’intermittence.
Q7. Concevez un programme qui permet de réaliser les fonctionnalités d’un minuteur
pouvant au maximum donné un temps jusqu'à 10 minutes avec une précision égale à la
seconde.
Note 1 : Les afficheurs DIS0 et DIS1 afficheront les secondes précises de 0 à 59, l’afficheur
DIS2 affichera en permanence un point et enfin l’afficheur DIS3 affichera les minutes
précises de 0 à 9.
Nota 3: Pensez à utiliser l’interruption timer0 (qu’il faudra paramétrer comme dans le TP2)
pour un rafraîchissement correct des afficheurs afin que notre œil n’ait pas la sensation
d’intermittence ou de scintillement.
Q8. Dans un premier temps, afficher les 8 bits de poids fort sur les leds du PORTB.
Q9. Dans un deuxième temps, affiché les valeurs en décimal (de 0 à 1023 ) sur les
afficheurs 7 segments.