|
Le fonctionnement:
L'afficheur se présente de la façon suivante:
__A__
| |
D B
|__C__|
| |
G E
|__F__|
Le segment A est connecté au RA0
Le segment B est connecté au RC0
Le segment C est connecté au RA1
Le segment D est connecté au RA2
Le segment E est connecté au RA5
Le segment F est connecté au RA4
Le segment G est connecté au RA3
Le segment . est connecté au RC1
La commande de validation du 74HCT573 , LE actif au niveau haut
est connecté à RC2 pour le digit des unités,
à RC3 pour le digit des dizaines, à RC4 pour le digit
des centaines. L'entrée OE est connectée à
la masse.
Pour le circuit ULN2003 qui est un simple buffer de puissance, il
fonctionne en mode transparent.
Dans le tableau ci-dessous on retrouve les valeurs à mettre
dans les registres du Port du PIC.
| Chiffre |
PORTA |
PORTC |
opérateur logique |
Unité |
Dizaine |
Centaine |
| 0 |
0x3D |
0x01 |
OU
|
0x04 |
0x08 |
0x10 |
| 1 |
0x20 |
0x01 |
OU
|
0x04 |
0x08 |
0x10 |
| 2 |
0x1B |
0x01 |
OU
|
0x04 |
0x08 |
0x10 |
| 3 |
0x33 |
0x01 |
OU
|
0x04 |
0x08 |
0x10 |
| 4 |
0x26 |
0x00 |
OU
|
0x04 |
0x08 |
0x10 |
| 5 |
0x37 |
0x00 |
OU
|
0x04 |
0x08 |
0x10 |
| 6 |
0x3E |
0x00 |
OU
|
0x04 |
0x08 |
0x10 |
| 7 |
0x21 |
0x01 |
OU
|
0x04 |
0x08 |
0x10 |
| 8 |
0x3F |
0x01 |
OU
|
0x04 |
0x08 |
0x10 |
| 9 |
0x37 |
0x01 |
OU
|
0x04 |
0x08 |
0x10 |
| effacé |
0x00 |
0x00 |
OU
|
0x04 |
0x08 |
0x10 |
Par exemple on veut afficher la valeur 1 sur le digit des unités:
On met 0x20 sur le port A et 0x05 ( 0x1 OU 0x04) sur le port
C.
Autre exemple si on veut 3 sur le digit des centaines. On met
0x33 sur le port A et 0x09 sur le portC. Pour votre information
on peut afficher d'autre chose que des chiffres, il suffit de
programmer les segments en fonction sachant qu'ils sont tous
indépendants les uns des autres. il y a juste un multiplexage
du bus de données, la sélection se fait avec la
pattre LE(unité), LE(dizaine), LE(centaine).
Le code:
Le code est trés simple puisqu'on retrouve une fonction
d'initialisation des ports.OS_ConfigurationProcesseur();
Ensuite, on retrouve l'affichage du titre: LG AffichageLG();
Une petite tempo pour avoir le temps de lire: Delay10KTCYx(200);
// attente de 2s
Ensuite on efface l'affichage :OS_EffacementAffichage();
On retrouve la boucle principale construite avec un while(1), on
attent que l'utilisateur appuie sur le bouton de start. while(BOUTON_START
== 1 );
Un compteur assure le décomptage du temps, le réglage
du temps de boucle est fait avec des delay. Il est aussi possible
d'utiliser un timer sous interruption mais dans un soucis de simplicité
pour les néophytes, c'est plus facile avec des delay.
Delay10KTCYx(99); // ajustement du temps de boucle.
Delay1KTCYx(9);
Delay100TCYx(2);
Delay10TCYx(2);
Delay1TCY();
Delay1TCY();
Delay1TCY();
Delay1TCY();
Pendant la boucle un test est fait pour savoir si on est arrivé
à 0 dans le cas on sort, et on réarme le compteur.
while (LUI_Compteur >0)
Un autre test est fait pour savoir si l'utilisateur veut interrompre
le comptage par exemple en cas de faux départ.
if (BOUTON_START == 0) // utile si on veut arreter le comptage.
{
LUI_Compteur =0; // on sort!
OS_AffichageTemps(0); // on reset l'affichage à 0
}
Le code C avec le .hex à charger
dans le PIC
Le debug avec ICD2
L'interêt est d'avoir un connecteur RJ11 sur la carte qui
permet de brancher directement l'icd2 de mplab pour le debug et
la programmation du pic. En conséquence vous pouvez faire
le debug de votre programme depuis MPLAB. C'est pratique pour tester
l'affichage en mode manuel, en mettant les valeurs hexa directement
dans les registres LATA et LATC qui correspondent au port du PIC.
Quelques photos de la réalisation:
photo1
photo2
photo3
photo4
Si vous avez des questions n'hésitez pas pas à nous
contacter. De même si vous ne pouvez pas le réaliser
vous même, programmer le PIC etc...
Lionel, pour les fribottes.
|