Computing">
More Web Proxy on the site http://driver.im/TP5 Asp GBM3-LMD
TP5 Asp GBM3-LMD
TP5 Asp GBM3-LMD
Afficheur 7 segments
et interruption (TIMER0)
Objectifs pédagogiques :
Maîtriser les notions avancées de la programmation C des PIC :
o Opérations sur les Entrées/Sorties avec accès direct aux
registres et masquage
o Utilisation des fonctions (appel, déclaration et passage de
variables).
o Création & Utilisation des bibliothèques pour
périphériques
Préalables :
Notions élémentaires sur la programmation C, sur les
interruptions, maitrise de l’environnement PICC et la
plateforme EasyPIC v7.
ISTMT TP5 26
TP Architecture des systèmes à processeurs GBM3
1. Description du travail
2. Fonctionnement
Un afficheur est constitué de 7 segments identifiés par les lettres de A à G et du point
décimal DP. Chaque segment est rattaché à l'une des broches du µC. Pour les activer, vous
écrirez dans le registre correspondant au port x, une valeur hexadécimale (mais on pourrait
également donner une valeur binaire ou octale).
En vous aidant du schéma de l'afficheur, complétez le tableau 1.
Tableau 1
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
Affichage Hexa
DP G F E D C B A
0 0 0 1 1 1 1 1 1 0x3F
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
Ce tableau représente une opération de masquage qui sera mise en œuvre dans un fichier
de définition (.h). Autrement dit, chaque symbole (0, 1, 2 etc.) est remplacé par un mot
binaire. Par exemple, le symbole 8 (0000 1000)b est remplacé par le mot binaire (0111 1111)b.
Mais on pourrait s’y prendre autrement et utiliser un tableau de 10 cases pour mémoriser les
valeurs hexadécimales.
ISTMT TP5 27
TP Architecture des systèmes à processeurs GBM3
Figure 1
Questions préliminaires :
1. Quel port permet de sélectionner l'afficheur actif ?
2. Quelles valeurs faut-il envoyer pour sélectionner :
a. L'afficheur DIS0 ? .................................................
b. L'afficheur DIS1 ?.................................................
c. L'afficheur DIS2 ?................................................
d. L'afficheur DIS3 ?................................................
3. Quel port permet d'afficher les segments ?
4. Est-il possible d'activer 2 segments en même temps ?
5. Est-il possible d'afficher 2 symboles en même temps ?
6. Quelle est l'utilité du multiplexage?
3. Travail demandé
Exercice 1 : Gestion de l'afficheur DIS0 seul
ISTMT TP5 28
TP Architecture des systèmes à processeurs GBM3
// Fichier Display_utils.h
unsigned int mask(unsigned int num) {
switch (num) {
case 0 : return 0x3F;
case 1 : return ... ;
case 2 : return ... ;
case 3 : return ... ;
case 4 : return ... ;
case 5 : return ... ;
case 6 : return ... ;
case 7 : return ... ;
case 8 : return ... ;
case 9 : return ... ;
}
}
Remarques
- Utilisation du format unsigned int, sur 8 bits (de 0 à 255), ce qui est largement suffisant.
- Il est également possible de n'indiquer que le prototype de la fonction dans le fichier .h
(càd. seulement la ligne " unsigned int mask(unsigned int num); ") et de coder la fonction dans
un autre fichier .c.
➔Avant d’aller plus loin, analyser le code. Que va faire l’afficheur DIS0 ?
3. Configurer le switch SW4 pour permettre l'activation de l'afficheur DIS0 (SW4.1
on).
4. Compiler le programme et vérifier son bon fonctionnement sur la carte.
5. Modifier le programme afin d’utiliser l’afficheur DIS1, puis DIS2 et finalement DIS3.
ISTMT TP5 29
TP Architecture des systèmes à processeurs GBM3
A présent il s’agit de mettre en œuvre 2 afficheurs (DIS0 et DIS1) afin d’afficher une
valeur qui s’incrémentera de 00 à 99. Etant donné qu’il n’est pas possible de valider
simultanément plusieurs afficheurs (en raison du câblage de la carte EasyPic7), il vous
faudra basculer de l’un à l’autre (multiplexage). Si le multiplexage fonctionne bien, le
basculement ne doit pas être visible. Dans cet exercice, il sera indispensable de basculer
entre les 2 afficheurs en passant par l’algorithme suivant :
ISTMT TP5 30
TP Architecture des systèmes à processeurs GBM3
Nous allons à présent utiliser une autre méthode pour réaliser le multiplexage. Il s’agit ici
d’utiliser l’interruption généré par le Timer0. Le programme Disp4affich.c permet d’afficher
un compteur sur les 4 afficheurs 7 segments de la carte Easypic7.
#include "Display_utils.h"
unsigned int shifter, portd_index;
unsigned int16 digit, number;
unsigned int portd_array[4];
#int_rtcc
void interrupt() {
// Turn off all 7seg displays
// bring appropriate value to PORTD
// turn on appropriate 7seg. display
// Décaler shifter vers le prochain digit
// increment portd_index de 1
portd_index++ ;
if (portd_index > 3)
portd_index = 0; // turn on 1st, turn off 2nd 7seg.
set_timer0(0); // reset TIMER0 value
}
void main() {
// Set TMR0 in 8bit mode, assign prescaler to TMR0
// clear TMR0L
//configurer les ports d'E/S
digit = 0;
portd_index = 0;
shifter = 1;
number = 9981; // Initial number value
//Activer les interruptions
//Activer l’interruption sur débordement Timer0
While(1){
digit = number / 1000u ; // extract thousands digit
portd_array[3] = mask(digit); // and store it to PORTD array
digit = (number / 100u) % 10u; // extract hundreds digit
portd_array[2] = mask(digit); // and store it to PORTD array
digit = (number / 10u) % 10u; // extract tens digit
portd_array[1] = mask(digit); // and store it to PORTD array
digit = number % 10u; // extract ones digit
portd_array[0] = mask(digit); // and store it to PORTD array
}
}
I. Test du programme
Vérifier que le compteur démarre bien à 9981 et bascule à 0000 après 9999. Vous
pouvez à tout moment « reseter » la carte en appuyant sur le bouton « reset » situé en haut
à droite de la carte Easypic7.
ISTMT TP5 32
TP Architecture des systèmes à processeurs GBM3
ISTMT TP5 33