<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte



Introduction

Que peut bien faire un chrono sur ce site. La réponse est simple chronométrer les robots pendant la coupe E=M6. D'ailleurs à ce sujet, la première utilisation va avoir lieux pendant la coupe 2005.

Le principe est trés simple, 3 digits formés par des segments de leds, des buffers pour la partie commande de puissance et un PIC 18F242 pour la partie commande. Bon c'est vrai qu'un PIC 18F c'est un peut le luxe, vu la taille du programme et des fonctionnalités demandées, mais c'est ce que j'avais en stock, d'autre part cela m'a permis de tester et valider mon ICD2 pour la partie debug.

Au niveau des caractèristiques, le chronométre peut décompter de 999s à 1s, mais rien n'empéche d'adapter le programme pour compter des minutes, des heures, ces millisecondes etc... Il suffit juste de changer la boucle de tempo, sachant que le quartz du PIC est de 4Mhz dans le présent montage.

Réalisation du chrono.

Afficheur:
Commençons par la partie affichage des informations. Pour cela on réalise 3 plaques identiques, qui chacune représente un digit. On a donc les centaines, les dizaines, les unités. La réalisations de cette partie est trés simple, la seule chose est de s'assurer que les leds sont bien alignées. Les souder une sur deux, puis compléter. Cela provoque un leger chevauchement qui donne l'illusion d'un segment continu.
Le typon
L'implantation

Voici aussi les datasheets des composants.
74HCT573 qui est un buffer latch 8 bits. La patte LE permet la validation des données en entrée.
ULN2003 qui est le buffer de commande du circuit de puissance.

Voici la liste des composants pour la partie affichage:
59 leds rouges 5mm kingbright (1800mcd tension de commande 2.1V) cela suffit pour voir les chiffres à 30m.
R1 = 150 ohm 1/4W
R2 = 150 ohm 1/4W
R3 = 150 ohm 1/4W
R4 = 150 ohm 1/4W
R5 = 150 ohm 1/4W
R6 = 150 ohm 1/4W
R7 = 150 ohm 1/4W
R8 = 470 ohm 1/4W
R9 = 4.7K ohm 1/4W
IC1 = ULN2003
IC2 = 74HCT573
T1 = BC547C
Nappe 12 fils pas 2.54 ou 1.27mm

Carte de commande:

La partie carte de commande est architecturé autour du PIC18F242. Il est possible d'utiliser une pic moins puissant, pourquoi pas un 16F.

Il est possible de brancher jusqu'à trois groupes de trois segments ( centaine, dizaine, unité) sur la carte de commande. Dans ce cas le radiateur sur le LM317 doit être un peut plus gros pour ne pas chauffer.

Pour la rréalisation vous retrouvez :
Le typon
L'implantation

Pour relier la carte de commande avec les afficheurs, utilisez de la nappe au pas de 2.54mm ou éventuellement 1.27mm. Relier le GND de la carte de commande au GND de la carte d'affichage, puis la 1 au 1 etc..


Voici la liste des composants pour la partie commande:
REG1 = LM317
REG2 = LM317
IC1 = PIC18F242
IC2 = MAX 485 ( en option pour la mise en réseau RS485).
Q1 = Quartz 4Mhz
R1 = 100Kohm CMS 1206
R2 = 100Kohm CMS 1206
R3 = 100Kohm CMS 1206
R4 = 120 ohm CMS 1206
R5 = 3Kohm CMS 1206
R6 = 1kohm CMS 1206
R7 = 15.8Kohm CMS 1206
R8 = 1Kohm CMS 1206
C1 = 33pF
C2 = 33pF
C3 = 100nF
C4 = 100µV/40V electrochimique
C5 = 100nF millefeuille
C6 = 100nF millefeuille
C7 = 100nF millefeuille
C8 = 100nF millefeuille
Pont de diode 110B6 1.5A/600V
CON1 = RJ11 femelle coudé à monter sur circuit.
CON2 = DB9 femelle coudé à monter sur circuit.
CON3 = barette sécable male
CON4 = barette sécable male
Bouton poussoir et cable de liason avec prise 2 broches au pas de 2.54mm
Prévoir un petit radiateur pour le LM317 REG2 car c'est lui qui alimente les leds.

Programmation du PIC 18F242

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.

 

 

   




Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/Chrono/Chrono.html modifiée le 03/05/2005.
Libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail