Vous êtes sur la page 1sur 7

TP3 : Gestion des E/S

et opérations de masquage sous PIC C

Objectifs pédagogiques :
Maîtriser les notions élémentaires 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 temporisations
o Utilisation des fonctions (appel, déclaration et passage de
variables).

Préalables :
Notions avancées sur la programmation C, maitrise des
outils ISIS et PICC.

Durée : 1 séance de 3H
TP Architecture des systèmes à processeurs GBM3

1. Description du travail

Le TP consiste à écrire un programme C pour PIC permettant de commander le système


de contrôle d'un feu de carrefour. Le banc de gestion de trafic comprend :
- Une partie opérative, simulateur d'un carrefour routier, intégrant les commutateurs et
voyants de signalisation (figure 1)
- Une partie commande se basant sur la carte de développement pour PIC : EasyPIC
(figure 2). On exploitera un microcontrôleur 16F877.

2. Fonctionnement
Carte de simulation des deux de carrefour

La carte de contrôle de la figure 1 alimentée par une tension (0-15V). Elle permet de
simuler un carrefour routier (une intersection entre deux routes). Ce carrefour est réglé par des
feux de signalisation tricolores (Rouge/Orange/Vert).
L'organisation de la circulation est assurée par des cycles synchronisés des feux de
chacune des deux voies, de détecteurs de présence et un détecteur Jour/Nuit.

Figure 1

La voie 1 est une double voie gérée par les feux (Q5, Q6 et Q7) tel que indiqué sur la
figure précédente.
La voie 2 est une voie auxiliaire gérée par les feux (Q0, Q1 et Q2), la présence d’une
voiture sur cette voie est provoquée par simulation sur appui sur S3
La voie 1 comporte un passage piéton géré par l’appui manuel sur les boutons S1 ou
bien S2
Grâce à un capteur LDR de lumière et un circuit approprié, La carte de contrôle peut
gérer deux modes de fonctionnement :
- Mode Nuit : activé lorsque le signal JRNT est à l’état bas (0 logique). Les feux Q1 et
Q6 se mettent alors à clignoter avec un pas de 2s.
- Mode Jour : activé lorsque le signal JRNT est à l’état haut (1 logique). Les feux verts
sur la voie 1 (Q5) sont allumés tant qu’il n’y a pas une demande de passage piéton (S1
ou S2 activés) ou une présence d’une voiture en attente de passage sur la voie
auxiliaire (S3 activé).
Le mode jour fait appel à trois cycles en fonction des entrées S1,S2 et S3 :

ISTMT TP3 14
TP Architecture des systèmes à processeurs GBM3

- Cycle 1 (par défaut) : feux Q5, Q2 et Q4 allumés, autorisant le passage des voitures
sur la voie 1
- Cycle 2 (Passage des voitures sur la voie 2) : la séquence suivante est commandée :
Tableau 1
Séq. Feux allumés durée
1 Q6 (Orange voie1) 2s
Q2 (Rouge voie2)
Q4 (Rouge Piéton)
2 Q7 (Rouge voie1) 6s
Q0 (Vert voie2)
Q4 (Rouge Piéton)
3 Q7 (Rouge voie1) 2s
Q1 (Orange voie2)
Q4 (Rouge Piéton)

- Cycle3 (Passage des piétons) : la séquence suivante est commandée :


Tableau 2
Séq. Feux allumés durée
1 Q6 (Orange voie1) 2s
Q2 (Rouge voie2)
Q4 (Rouge Piéton)
2 Q7 (Rouge voie1) 10s
Q2 (Rouge voie2)
Q3 (Vert piéton)
3 Q6 (Orange voie1) 3s
Q2 (Rouge voie2)
Q4 (Rouge piéton)
Remarque : Sur une même voie, un seul feu parmi les 3 tricolores doit être allumé à la fois.

Carte de développement EasyPIC

La figure 2 illustre la carte de développement EasyPIC qui sera exploitée pour la


commande du moteur.
N.B. : Il vous est demandé de se référer à la documentation relative à cette carte et étudier les
détails techniques qui lui sont associés.

Figure 2

ISTMT TP3 15
TP Architecture des systèmes à processeurs GBM3

3. Travail demandé

Elaboration et simulation de la commande


On considère le montage de la commande (ici à base de PIC 16F84A) de la figure 3 et le
tableau 3 de connexion des entrées/sorties du système.

Figure 3

Tableau 3
Feu Broche du PIC Bouton Broche du PIC
Vert voie 1 : Q5 RB1
S1 et S2 RB0
Orange voie 1 : Q6 RB2
Rouge voie 1 : Q7 RB3
S3 RB7
Vert voie 2 : Q0 RB4
Orange voie 2 : Q1 RB5
JRNT RA4
Rouge voie 2 : Q2 RB6
Rouge piéton voie 1 : Q4 RA0
Vert piéton voie 1 : Q3 RA1

1- Soit le code C incomplet de la fonction mode_nuit () :

void mode_nuit()
{
PORTA= (PORTA&….) | ….;
PORTB= (PORTB&….) | ….;
delay_ms(1000);
PORTA= (PORTA&….) | ….;
PORTB= (PORTB&….) | ….;
delay_ms(1000);
}

ISTMT TP3 16
TP Architecture des systèmes à processeurs GBM3

Les variables PORTA et PORTB sont assignées aux registres internes du PIC affectant l’état
respectivement de ses ports A et B d’entrées/sorties. L’utilisation de ces variables permet de
forcer les sorties d’un port sans affecter l’état de ses entrées, et ce en une seule ligne de code.
Cette technique est recommandée à chaque fois qu’un port contient des broches en entrées et
d’autres en sorties (voir annexe pour plus de détails).

a) Compléter les valeurs des masques pour que la fonction commande correctement le
mode nuit des feux de carrefour.

b) Développer et tester le programme C qui commande ce mode lorsqu’il fait nuit


(JRNT=0).

2- En se basant sur le même principe de la fonction mode_nuit() précédente, ajouter à votre


programme les fonctions suivantes :

- Mode_jour_cycle1() : qui commande le cycle 1 du mode jour,


- Mode_jour_cycle2() : qui commande le cycle 2 du mode jour,
- Mode_jour_cycle3() : qui commande le cycle 3 du mode jour.

Puis tester leurs fonctionnements.

Le programme principal est décrit par l’organigramme de la figure 4. Développer et tester


le programme correspondant.

Main()

Pic_config()

non
JRNT=1

oui

non non
autorisation_voie2 Presence_pietons

oui oui

Mode_jour_cycle2() Mode_jour_cycle3() Mode_jour_cycle1() Mode_nuit()

Fin

Figure 4

ISTMT TP3 17
TP Architecture des systèmes à processeurs GBM3

Implantation et validation de la commande

La carte de développement EasyPIC intégrant un PIC 16F877 est utilisée pour assurer la
commande du feu de carrefour.
1- Vérifier les différentes connexions d’entrées/sorties utilisées avec la carte de contrôle.
2- Faire les modifications nécessaires au niveau du code C élaboré afin de l’adapter à la
carte EasyPIC exploitée et au microcontrôleur PIC 16F877.
3- Ajouter les directives suivantes à votre code :
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
4- Charger alors le programme compilé dans le PIC 16F877 monté dans la carte EasyPIC
et valider le fonctionnement des deux modes.

Amélioration du fonctionnement

3- Afin d’éviter les problèmes liés à la manipulation des boutons poussoirs S1 et S2


entrainant un arrêt exagéré de circulation sur la voie 1, on propose une fonction
int presence_pieton() qui détecte précisément l’évènement d’appui sur un des boutons S1
ou S2.

int presence_pieton()
{
int Sreq=input(PIN_B0);
int OK;
if ((state ==0) && Sreq)
OK=1;
else
OK=0;
state = Sreq;
return(OK);
}

Insérer cette fonction dans votre programme et tester le nouveau fonctionnement (state est
déclarée comme variable globale).

ISTMT TP3 18
TP Architecture des systèmes à processeurs GBM3

Annexe

1) Accès direct aux registres du PIC

2) Exemple d’utilisation du forçage


On suppose que RB0 à RB3 du PORTB sont configurés en entrées les autres broches sont
en sortie. Pour mettre les sorties de ce port à la valeur 0b1010 sans affecter l’état de ses
entrées, on doit exécuter les opérations suivantes :

a) Garder l’état des broches en entrées et forcer à 0 les broches de sorties (masque AND
=0x0F)

b) Forcer les sorties à la valeur désirée (masque OR=0b1010)


Ce qui donne l’instruction suivante :
#byte PORTB=6

PORTB = (PORTB & (0x0F)) | 0b10100000

Broches en sorties Broches en entrées


PortB (valeur initiale) 0 1 1 1 1 0 1 1
& 0x0F 0 0 0 0 1 0 1 1
| 0b10100000 1 0 1 0 1 0 1 1

ISTMT TP3 19

Vous aimerez peut-être aussi