Sie sind auf Seite 1von 11

Université de Savoie

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 (1)


TP2 : Programmation sur microcontrôleur PIC (2)
TP2 : Programmation sur microcontrôleur PIC (3)

Retrouver tous les documents nécessaires au TP sur le site


www.master-electronique.com
Université de Savoie
Module ETRS-604
Microprocesseurs et microcontrôleurs

TP1
Programmation sur microcontrôleur PIC

Objectifs : Mise en œuvre des fonctions d’un microcontrôleur PIC en langage C

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.

II. Prise en main de l’environnement


1. La carte de développement
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 utilisée pour l’alimentation de la carte.

1.2. La suite logiciel et matériel de Mikroelektronika


Nous utiliserons l’environnement développé par Mikroelektronika qui rassemble :
 La carte de développement EasyPIC
 L’outil de développement logiciel : mikroC (éditeur de texte, compilateur et éditeur de
liens)
 Le chargeur du programme exécutable en mémoire : PicFlash .
 Le debugger : MikroICD Debugger

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.

1.3. Utilité d’une carte de développement


Celles-ci permettent de faire des tests d’application avant la mise en production d’un produit.
La carte de développement permet donc d’avoir une connexion directe entre le PC et le
microcontrôleur afin de connaître en temps réel les valeurs des registres ou de n’importe quel
emplacement mémoire du microcontrôleur. Cette liaison de DEBUG (connexion entre PC et
microcontrôleur) n’est pas définitive mais seulement temporaire à la durée de développement
et de test du programme. Celle-ci à l’inconvénient de prendre 2 broches d’entrée sortie du PIC
(Pins 6 et 7 du port B).
Une autre forme de test, moins puissante mais qui ne prend aucune ressource au
microcontrôleur est la simulation. Le code n’est alors pas chargé dans la cible
(microcontrôleur) et le code s’exécute sur le PC en simulation.

1.4. Les modes de compilation


Lors de la compilation, deux configurations peuvent être envisagées :
Le mode Release : Le code généré est débarrassé de toutes les informations de debugage (ex :
numéro de ligne, communication avec le PC, etc…). Le code pourra être simulé sur ordinateur
mais en aucun cas avec le débuggeur.
Le mode Debug : Les informations de debugage sont liées au fichier exécutable. Le fichier est
donc plus important et permet une utilisation du débuggeur. Les broches 6 et 7 du port B seront
utilisées.

2. Développement d’une application


Avant de lancer l’environnement de développement créez un répertoire de travail sur votre
compte. Tous vos fichiers seront rassemblés dans ce répertoire. Pour tous projets, les étapes
suivantes doivent être réalisées :
 Création d’un nouveau projet. File>New>New Project
 Paramétrage du projet (choix du composant cible, emplacement du projet…)
 Ajout de fichiers (sources, librairies…) au projet

Votre fonction main ( ) pour ce projet sera constitué de la fonction suivante :


1. void main (void)
2. {
3. TRISB=0xF0;
4. while(1){
5. PORTB=0x0F;
6. delay_ms(500);
7. PORTB=0x00;
8. delay_ms(500);
9. }
10. }

 Compilation du projet qui génèrera les fichiers suivants :


fichier.asm : Un fichier en langage assembleur avec les codes machines correspondant à
chaque instruction et les adresses mémoire du code.
fichier.lst : Même information que le fichier.asm avec en plus la résolution des adresses pour
les variables utilisées.
fichier.hex : Un fichier en langage machine qui peut être transféré en mémoire programme du
microcontrôleur à l’aide d’un chargeur.

3. Chargement du programme en mémoire


Ceci est réalisé avec PicFlash qui est intégré à l’interface de développement. Il va servir à
transférer le fichier exécutable (clignotement.hex) dans la mémoire du microcontrôleur.
L’icône correspondante au chargeur est située à droite ( ou F11). Le code compilé
auparavant sera directement chargé en mémoire du composant spécifié.

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.

Q1. Faite fonctionner votre application et valider son fonctionnement.

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.

Q2. Quelle est la fréquence de cadencement du microcontrôleur de votre platine ?

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 ?

2. Détermination de la persistance rétinienne


La persistance rétinienne est la sensation d’avoir une image fixe due au changement trop rapide
d’état de la led. Nous allons essayer de déterminer la persistance rétinienne de nos yeux en
utilisant les fonctions de temporisation à notre disposition. Les temporisations sont très
pratiques et très souvent utilisées en programmation industrielle. Vous pouvez retrouver ces
fonctions de temporisation en tapant le mot clé « delay » dans l’aide.

Pour le calcul de la persistance rétinienne, on se propose de réaliser un programme qui ajuste


la durée à l’état haut et à l’état bas d’un signal carré sur la broche 0 du PORTB. Cette durée
sera sélectionnable suivant le bouton poussoir appuyé sur le PORTC comme préciser ci-
dessous.
 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

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

3.1. Incrémentation du nombre de photos


On propose d’interconnecter les ports A et B aux divers signaux d’entrées et de sortie du
système de la manière suivante :
 Déclenchement de la prise de vue : Bit 0 du Port A en entrée. Si le bit est au niveau 1
alors le déclencheur est pressé. Cela sera réalisé par un bouton poussoir.
 Nombre de photos : Bits 0 à 3 du Port B en sortie. Affichage en binaire sur les leds.

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.

3.2. Commande du flash


On rajoute à notre application une commande d’un flash pour améliorer la luminosité de
certaines scènes. Le flash sera soit inactif, soit utilisé en mode automatique. C'est-à-dire qu’il
se déclenchera lorsque la mesure d’éclairage est inférieure à un seuil donné par un capteur
d’intensité. Ce capteur est symbolisé par un bouton poussoir sur le bit 2 du Port A.

Le flash sera commandé de la manière suivante :

Déclencheur

t
Flash

600ms t

Figure 1 : Chronogramme de la commande du flash

Les connexions utilisées seront les suivantes :


 Mode de fonctionnement du flash : Bit 1 du Port A en entrée. Si le bit A1 est au niveau
1 le mode du flash est automatique sinon il est inactif.
 Mesure de l’intensité lumineuse pour l’ouverture du diaphragme : Bits 2 du Port A en
entrée. Cela sera réalisé par un bouton poussoir. Si le bit est à 1, la scène est sombre,
sinon l’intensité lumineuse est suffisante (pas besoin du flash).
 Commande du flash : Bit 4 du Port B. Une LED symbolisera le flash.

Q7. Modifiez votre programme C afin de faire fonctionner la commande du flash


Université de Savoie
Module ETRS-604
Microprocesseur & Microcontrôleur

TP2
Programmation sur microcontrôleur PIC

Objectifs : WatchDog TIMER & Gestion des interruptions sur un microcontrôleur en C

I. Etude du WatchDog
Q1. Expliquer le rôle du WatchDog dans un système à microcontrôleur.

1. Mise en évidence du fonctionnement du WatchDog


Pour illustrer le fonctionnement du WatchDog, éditez le programme principal de
chien_garde.c suivant dans un nouveau projet :

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. }

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.

Q2. Valider les différences de fonctionnement avec et sans WatchDog.

2. Développement d’une application avec le WatchDog


Pour illustrer totalement le fonctionnement du WatchDog on se propose de coder une
simulation de plantage d’un logiciel. Le plantage du logiciel sera simulé par une boucle
infinie. L’organigramme du programme est le suivant:
Allumer PORTB.F0
TEMPO 100 ms
Eteindre PORTB.F0

PORTA.F0 Oui
appuyé ?
Non Allumer PORTB.F0

Plantage : Boucle infinie


>> while(1) ;

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?

II. Etude des interruptions


1. Présentation des interruptions
Ce microcontrôleur peut être interrompu par des sources multiples. En revanche il ne dispose
que d’un seul vecteur d’interruption. Ce vecteur est en fait l’adresse 0x0004 de l’espace
programme.
Après une interruption il est donc nécessaire que le sous-programme d’interruption identifie
l’interruption qui a été activée. Il remontera à la source de l’interruption à l’aide des bits d’état
associés aux interruptions (exemple : Flag T0IF=1 pour un overflow du Timer 1).

2. Exemple de gestion des interruptions


Le programme gestion_IT.c propose une illustration du fonctionnement de ces interruptions.
Vous pouvez récupérer ce fichier sur l’espace étudiant du site www.master-electronique.com
Analyser le contenu de ce programme d’exemple.

Q6. Parmi ces 3 interruptions, laquelle est la plus prioritaire dans le cas où deux sources
d’interruption deviennent actives en même temps ?

Q7. Comment peut-on modifier les priorités relatives de ces 3 interruptions ?


Q8. Faire un schéma du microcontrôleur avec les Leds et les boutons poussoir qui
permettront de valider le fonctionnement de ce programme. Configurer votre carte
correctement. Tester et expliquer son fonctionnement.

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(…).

Q9. Modifier le programme gestion_IT.C pour réaliser la génération de cette note en


utilisant l’interruption Timer.

III. Accordeur de guitare


Dans cette partie on se propose d’utiliser le microcontrôleur défini précédemment pour
réaliser un accordeur de guitare.

4. Génération d’une note


L’accord d’une guitare peut être réalisé à l’aide d’un diapason. La note émise par le diapason
est un LA (440 Hz). Elle correspond à la 5ème corde d’une guitare jouée à vide.

Q10. Proposer un programme qui génère la note « LA », lorsque l’on appuie sur un bouton
poussoir.

5. Modification de la corde à accorder.


A l’aide des 2 boutons « Suivante » et « Précédente » on souhaite pouvoir modifier la note
générée par l’accordeur. Il sera alors possible d’accorder une nouvelle corde de la guitare.
Lorsque l’on appuie sur le bouton « Suivante » on passe à l’accord de la corde suivante et
lorsque c’est le bouton « Précédente » c’est l’accord de la corde précédente. Par exemple une
fois la 5ème corde accordée on peut générer la note qui correspond à la 4ème corde si l’on a
appuyé une fois sur la touche « Précédente ».
Les notes et les fréquences associées à chaque corde jouée à vide sont :
6ème corde : Mi 3= 330Hz 5ème corde : La 3 = 440Hz
4ème corde : Ré 4 = 588Hz 3ème corde : Sol 4 = 830Hz
ème ère
2 corde : Si 4 = 988Hz 1 corde : Mi 5 = 1320Hz

Q11. Proposer un programme C intégrant les interruptions permettant de générer les 6


notes de chaque corde d’une guitare. Les détections des appuis des touches « notes
suivantes » et « note précédente » seront scrutées dans le main().

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

Objectifs : Mise en œuvre et utilisation des afficheurs 7 segments, multiplexage à


l’affichage, gestion de l’affichage par interruption.

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é.

II. Mise en œuvre d’un afficheur


Nous souhaitons réaliser un compteur allant de 0 à 9 chaque fois que l’on appuie sur un
bouton poussoir. Un autre bouton poussoir permettra le décomptage de 9 à 0. On gérera aussi
le dépassement : si on est à 9 et que le BP comptage est de nouveau appuyé, on repasse à 0
(même principe pour le décomptage : si on est à 0 on repasse à 9). On prévoira aussi un autre
bouton poussoir pour effectuer une remise à zéro à tout moment.

Q1. Afficher le chiffre 0 sur l’afficheur DIS0.

Note : Pensez à utiliser l’outil dédié AFFICHEUR 7 SEGMENTS dans le menu :


Tools --> Seven Segment Convertor

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.

Q3. Ecrire l’application finale.


III. Multiplexage et persistance rétinienne
Q4. Réaliser un programme cyclique (qui tourne en permanence) qui utilisera les 4
afficheurs en faisant apparaître successivement pendant 500 ms : d’abord un « S » sur
l’afficheur DIS3, puis un « T » sur l’afficheur DIS2, ensuite un « I » sur l’afficheur DIS1 et
enfin un « C » 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.

IV. Application : minuteur


Q6. Ecrire le code d’une fonction C « Separe_DU » (séparation des Dizaines et des
Unités) qui prend un nombre entier N (inférieur ou égal à 59) comme argument et qui sépare
alors les dizaines et les unités en plaçant ces deux nombres dans deux variables différentes de
type entier.

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.

Note 2: Un BP démarrera le comptage, un BP l’arrêtera et enfin un BP permettra la RAZ du


minuteur.

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.

V. Application Convertisseur A/N


Réaliser une conversion analogique / numérique d’une valeur comprise entre 0V et 5V
réglable à l’aide du potentiomètre de votre platine.

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.

Das könnte Ihnen auch gefallen