Vous êtes sur la page 1sur 5

SCO_BP1 Suivi de Chariot Opto guidé : Gestion du bouton poussoir et des leds

Système : Suivi de Chariot Opto guidé Durée : 3 heures Travail individuel

Compétences :
C4.5 Tester et valider un module logiciel et matériel.
C4.7 Documenter une réalisation logicielle.

Outils nécessaires : Logiciel MPLAB – Kit PICkit – Programmateur PICkit3 – Oscilloscope numérique
Documents annexes : Schéma du PICkit3 – Documentation du PIC18F45K20
Documents réponse : Le document réponse sera rédigé sous WORD et imprimé en fin de TP. L’utilisation de la page doit être
optimisée.

Présentation : Dans le cas d’un projet de suivi de chariot opto guidé, des bornes de localisation disposent d’un bouton poussoir
et de 2 leds. Ils permettent de placer la borne dans différents modes de fonctionnement pour le test et la configuration.

1 – PICkit3
 A l’aide du schéma du PICkit3 et du kit mis à disposition, indiquer : Exemple de rédaction :
Référence du microcontrôleur : …..
 La référence du microcontrôleur utilisé sur le kit
Port (I/O) pour la commande des 8 leds :…
 Le port (I/O) du microcontrôleur utilisé pour commander les 8 leds
 La ligne de port utilisé pour lire l’état du bouton poussoir SW1 …..
 La présence ou non d’un quartz pour l’oscillateur du microcontrôleur

2 – Configuration du projet
 Décompresser le projet SCO_BP1.mcw dans le répertoire travail
 Ouvrir le projet sous MPLAB
 Indiquer sur le document réponse :
 Les 3 fichiers sources du projet
 Les 2 fichiers d’entête déclarés dans le projet
 La référence du microcontrôleur déclaré
 Le mode de fonctionnement de l’oscillateur du µP (Interne – Externe RC – HS – EC – XT ou LP)
 Le compilateur utilisé (ou répertoire du compilateur)
 Les chemins des répertoires include déclarés. (Project/Build Options/Project/Directories/Include Search Path)

3 – Configuration des ports


 A la lecture du fichier HardwareProfile.h, indiquer :
 Quelle étiquette est équivalente au PORTD
 Quelle ligne du microcontrôleur permet de commander la led LED0
 Quelle ligne du microcontrôleur permet de commander la led LED1
 Quelle ligne du microcontrôleur permet de lire l’état du bouton poussoir SW1

Les registres TRIS (TRISA, TRISB, TRISC …) du microcontrôleur permettent de configurer les lignes d’un port en entrée ou en
sortie.
Pour commander les leds, il faut que le port correspondant soit programmé en sortie. Pour lire l’état du bouton poussoir il faut
que la ligne du port soit programmée en entrée.

 A la lecture de la fonction InitBoard (dans fichier HardwareProfile.c), indiquer :


 La ligne de programme qui permet la programmation du PORTD en sortie.
 La ligne de programme qui permet la programmation de la ligne RB0 en entrée.

4 – Configuration de l’oscillateur du µP
Les fonctions du fichier tempo.c permettent d’ajouter des temporisations dans les programmes.

Dans le fichier HardwareProfile.h est déclaré un oscillateur de 64MHz (#define OSC_64MHZ). Cette déclaration est utilisée dans
le fichier tempo.c (#ifdef OSC_64MHZ ….).
Une fonction 4XPLL interne au microcontrôleur permet une multiplication de fréquence par 4.

 Indiquer comment il est possible d’obtenir une fréquence de 64MHz pour l’oscillateur.

5 – Test et validation de la fonction temporisation


Le premier programme de test (fonction main() contenu dans le fichier main.c) répond à l’algorithme et organigramme ci-
dessous :

 Compiler le projet
 Télécharger le programme dans le PICkit3
 Vérifier à l’aide d’un oscilloscope la durée de la temporisation.
 Placer le relevé dans un document WORD qui sera imprimé en fin de TP
 Modifier le programme pour obtenir l’algorithme suivant :

 Tester le programme
 Placer le nouveau programme en C dans le document WORD
6 – Test et modification de la fonction clignote_led
 Modifier le projet pour avoir les fichiers sources et les fichiers d’entête suivants (les fichiers sont fournis dans le répertoire) :

La fonction void clignote_led(unsigned char led,unsigned char nb_clignote) du fichier led.c répond au cahier des charges suivant

void clignote_led(unsigned char led,unsigned char nb_clignote)


Entrées :
led définit la led qui doit clignoter
nb_clignote définit le nombre de clignotement
Sortie : néant
Description : A l’appel de la fonction, LED0 (argument DEL0) ou LED1 (argument DEL1) clignote un nombre de
fois égal à l’argument nb_clignote. L’état des leds doit retrouver son état initial.
Algorithme :

L’algorithme du programme principal est le suivant :

Vérifier le fonctionne du programme sur le PICkit3

On souhaite modifier la fonction clignote_led en ajoutant 2 arguments :


SIMULTANE pour faire clignoter les 2 leds en même temps
ALTERNE pour faire clignoter les 2 leds de façon alternée

 Vérifier la présence des déclarations des étiquettes SIMULTANE et ALTERNE dans le fichier d’entête led.h (sinon il faut les
ajouter)

 Modifier la fonction clignote_led pour répondre à l’algorithme suivant :

 Proposer une modification du programme principal qui permet le test des 4 cas
 Tester le programme sur le PICkit3 (prendre en compte la remarque ci-après en cas de dysfonctionnement)
Remarque :
Un BUG peut se produire au niveau du µP lorsqu’on change 2 lignes de port l’une après l’autre de façon trop rapide, par
exemple : LED0=1 ; LED1=0 ;
Ce BUG est probablement dû à des effets capacitifs à l’intérieur du µP, pour des lignes trop proches l’une de l’autre.
Une solution consiste à placer un petit délais entre les 2 changements : soit par l’instruction Nop() (Nop = no operation)
qui ajoute un délais correspondant à 1 temps de cycle du µP, soit ajouter un délais beaucoup plus grand.
Avec un Nop, l’exemple précédent devient : LED0=1 ;Nop() ;LED1=0 ;

 Faire vérifier le fonctionnement par le prof.

 Reporter sur document WORD, à imprimer en fin de TP, le programme de la fonction clignote_led modifié, le programme
principal de test et l’algorithme de ce programme principal.

7 – Test et documentation de la fonction lecture_BP


 A partir du projet précédent, modifier le programme principal pour répondre à l’algorithme ci-dessous :
(début de solution : if (SW1 == …….) …….. ; else ……. ;)

 Modifier le projet pour avoir les fichiers sources et les fichiers d’entête suivants (les fichiers sont fournis dans le répertoire) :

La fonction lecture_BP répond aux cahier des charges suivants :


unsigned char lecture_BP(void)
entrée : néant
sortie : la fonction renvoie les valeurs suivantes :
BP_RELACHE si le bouton poussoir n’est pas appuyé
APPUI_BP1 si le bouton a été appuyé moins de 3 secondes
APPUI_LONG_BP1 si le bouton a été appuyé entre 3 secondes et 6 secondes
APPUI_TRES_LONG_BP1 si le bouton a été appuyé plus de 6 secondes

 Tester le programme sur PICkit3


 Compléter l’algorithme de la fonction lecture_BP ci-dessous :

déclaration de la variable locale i


SI (SW1 non appuyé)
retourner BP_RELACHE
FIN SI
SI (SW1 appuyé)
mettre i à 0
allumer LED0
éteindre LED1
TANT QUE (SW1 appuyé)
incrémenter i
attendre 10 ms
SI (i>300)
allumer LED0 et LED1
FIN SI

FIN TANT QUE

FIN SI
 Placer l’algorithme dans le document WORD

 Imprimer le document WORD et le remettre au prof.

Vous aimerez peut-être aussi