Vous êtes sur la page 1sur 4

TP Durée : 3 heures

TSTI2 année 2011/2012

Programmation en C TP n°2 : Le chronomètre

2011/2012 Programmation en C TP n°2 : Le chronomètre Prérequis : - algorithme, algorigramme - notions

Prérequis :

- algorithme, algorigramme - notions de programmation en langage C

Objectifs :

C : traitement programmé de l'information :

- structures algorithmiques de base (linéaire, alternative, itérative) ;

- élément de programmation

Compétence F3 : utiliser un système informatique d'aide au développement

L'affichage multiplexé

Notre chronomètre est un système élémentaire à deux afficheurs, le premier pour les secondes, le second pour les 1/10 de secondes.

Schéma de la carte

le second pour les 1/10 de secondes. Schéma de la carte Implantation de la carte LE

Implantation de la carte

1/10 de secondes. Schéma de la carte Implantation de la carte LE CHRONOMÈTRE {\TP progC_chronomètre.odt} -

Afin de limiter le nombre d’entrées–sorties au niveau du microcontrôleur, on réalise un « affichage multiplexé ». On va envoyer le code sur tous les afficheurs ( deux dans notre cas, mais nous verrons des cas où il y en a davantage ) et sélectionner à l’aide de signaux logiques l’afficheur qui doit afficher le code.

1. A l’aide de la documentation technique des afficheurs MAN74, donner le type de l’afficheur ( anodes ou

cathodes communes ). Quel niveau logique faut-il mettre sur la broche 4 de l'afficheur pour l'allumer ? Quel

niveau logique en RA0 ou RA1 permet d’allumer un segment ?

2. Remplir le tableau ci-dessous :

RA0

RA1

Q1

Q2

aff D1

aff D2

0

0

       

0

1

       

1

0

       

indiquer dans le tableau :

Bloqué ou Saturé pour les transistors Allumé ou Éteint pour les afficheurs

Déterminer les codes de l’affichage

Le but est de trouver les codes à envoyer sur le PORTB du PIC pour d'allumer les chiffres sur un afficheur.

3. Copier le dossier \TP\prog_c\TP2 - chronomètre\chrono_mplab_eleve sous votre lecteur v:\. Ouvrir le projet

« chrono_mplab ». Ouvrir le fichier source « chiffre_eleve.c ». Compléter le sous-programme init() qui déclare

les ports A et B en sortie.

4. Ce fichier envoie sur le PORTB le code du chiffre « 0 » qui est $3F (voir détail ci-dessous). Compiler,

assembler le fichier source. Connecter le programmateur ICD2 au PC puis la carte chronomètre au

programmateur. N'oubliez pas d'alimenter cette carte sous +9V. Télécharger le programme dans le

microcontrôleur. Tester et faire valider par le professeur.

5. Compléter ci-dessous le tableau donnant les codes de chaque chiffre. Tester chaque chiffre sur la carte en

modifiant votre programme.

6. Modifier le programme afin d'allumer l‘autre afficheur. Expliquer vos modifications.

 

2 7

2 6

2 5

2 4

2 3

2 2

2 1

2 0

 

anode

X

g

f

e

d

c

b

a

 

code afficheur

X

0

1

1

1

1

1

1

 

Chiffre 0

 

0

1

2

 

3

4

5

6

7

8

9

$3F

           

Défilement des secondes et 1/10 de seconde

7. Sauvegarder le programme précédent sous seconde.c. Modifier ce programme afin de faire défiler à l'infini les

secondes sur l'afficheur de gauche. Tester et faire vérifier par le professeur.

Temporisation de 1s : delay_ms(1000);

8. Modifier ce programme pour afficher les dixièmes de seconde sur l'afficheur de droite. Faire vérifier par le

professeur.

Votre programme a une structure très lourde, on répète souvent la même chose. Il faut trouver une autre manière de l'écrire de manière plus compacte. Vous allez ranger les codes dans une table et aller les chercher en fonction d'un indice. Par exemple :

code_afficheur n°0 = $3F. C'est la notion de tableau.

On déclare en début de programme un tableau de valeurs. Ex : unsigned char static const tab[10]={0x3F, ,0xF4}; Il faut spécifier le type du tableau : ici c'est un tableau de constantes de type caractères non signés. Le nom tab est le nom du tableau. Vous utiliserez chiffre comme nom de tableau par exemple

Ensuite, nous appellerons la donnée par tab[i]. Comme vous connaissez le nombre de répétition de votre itération, vous utiliserez une boucle for.

9. Modifier votre programme afin d’utiliser un tableau. Tester et faire vérifier par le professeur.

Le chronomètre

10. Ouvrir le programme chrono_eleve.c. Compiler et télécharger ce programme dans la maquette. Vérifiez le fonctionnement du chronomètre.

Gestion de l'arrêt : on demande de modifier ce programme afin que le chronomètre reparte à zéro lorsqu'on appuie sur RAZ. Il faut reconfigurer le PORTA avec RA2 déclarée cette fois en entrée. Il faut lire périodiquement cette entrée et mettre i et j à 0 si celle-ci est à 1.

11. Modifier le programme. Tester et faire vérifier par le professeur.