Vous êtes sur la page 1sur 5

Ecole Nationale Supérieure de Technologie Département GEII

Ing 3 Automatique et informatique industrielle Année : 2021/2022


Matière : Systèmes temps réel Mr. B.ABBADI
----------------------------------------------------------------------------------------------------------------------------------------------------------------

TP1 : Exploitation des E/S parallèles d’un microcontrôleur

But de TP
Comprendre l’organisation et le fonctionnement des E/S parallèles d’un microcontrôleur. Maitrise de quelques
applications courante mettant en œuvre les E/S parallèles.

Notions théoriques
Les interfaces d’E/S parallèle sont des périphériques ayant pour rôle de gérer l’échange de données sous forme
de mots binaires avec l’environnement extérieur du microcontrôleur. Chacune des broches du microcontrôleur,
qui sont dédiées à transmettre ou recevoir des données, est reliée à l’une des interfaces d’E/S parallèles. Cela
est expliqué par l’utilisation courante de ces périphériques simples. L’ensemble des broches reliées à la même
interface parallèle forment un port parallèle. Ces broches sont ordonnées par le fabricant et leur nombre varie
d’un port à l’autre (voir le brochage dans le Datasheet p.3).
Un port parallèle peut être entièrement configuré en entrée ou en sortie, ou quelques lignes en entrée et/ou
quelques-unes en sortie. De plus, un port peut être, à un moment donné, utilisé partiellement pour transférer un
mot de taille inférieur au nombre des lignes du port ou un bit unique. Dans le premier cas, les lignes du port sont
souvent manipulées séparément (le mot est transféré sur plusieurs reprises) ou en un seul coup, mais cela fait
appel à un masquage lorsque les lignes à utiliser au moment de transfert ne sont pas contiguës ou se trouvent
dans l’ordre supérieur du port. Il est d’ailleurs inutile de transférer une donnée quelconque dans un sens sur une
ligne configurée dans le sens inverse.
A chaque interface d’E/S parallèle est associée deux registres de 8 bits : PORTx et TRISx, où x est un caractère
qui désigne un port. Chaque bit contenu dans ces registres est lié à ligne dont l’ordre est égal au rang de ce bit.
Dans le cas où le port est utilisé partiellement, ou sa taille est inférieur à 8, les parties des deux registres
associées aux lignes non utilisées au moment de transfert sont inhibée quelques soit leurs contenus.
 PORTx est un registre accessible en lecture et écriture, sert à contenir le mot à sortir ou le mot reçu de
l’extérieur. Il est à noter que les bits non affectés par une opération de transfert ne subissent aucune
modification par rapport à leurs états précédents.
 TRISx est un registre accessible en lecture et écriture. Le mot binaire y contenu définit le sens de transfert
de donnée à travers le port. Un bit à l’état bas veut dire que la ligne associée est configurée en sortir,
autrement la ligne est en entrée. Tous les bits sont par défaut à l’état bas. Avant de réaliser n’importe
quel transfert sur un port, il faut d’abord définir le sens de données désiré de chacune de ses lignes.
Par ailleurs, la majorité des broches d’E/S sont reliées à d’autres périphériques et donc peuvent être utilisées à
d’autres fonctions en dehors le transfert parallèle des mots binaires.
Il faut donc configurer convenablement les contenus des registres associés à ces périphériques pour éviter des
conflits. De même pour les registres de configuration associés à l’unité de traitement.

1
Ecole Nationale Supérieure de Technologie Département GEII
Ing 3 Automatique et informatique industrielle Année : 2021/2022
Matière : Systèmes temps réel Mr. B.ABBADI
----------------------------------------------------------------------------------------------------------------------------------------------------------------

Le microcontrôleur PIC16F877A possède cinq (5) ports parallèles : PORTA (6 lignes), PORTB (8 lignes), PORTC
(8 lignes), PORTD (8 lignes), PORTE (4 lignes). En plus des deux registres discutés auparavant, l’ensemble des
registres associés à chaque port sont énumérés dans ce qui suit. Les bits concernés et les pages contenant
l’explication de chaque registre sont mentionnés :

 PORTA : CMCON (0~2, 4~7 p.135), CVRCON (6,7 p.141), ADCON1 (0~3 p.128).
 PORTB : OPTION (6,7 p.23)
 PORTC : pas de registres.
 PORTD : TRISE (4 p.50).
 PORTE : ADCON1 (0~3 p.128)
A titre de préparatif, il est demandé de comprendre les différentes configurations possibles de chaque
registre (uniquement les bits concernés), en se référant au document technique de PIC16F877A.

Manipulations
Activité 1 : Visualisation des données numériques sur des LED.
1. Ecrire puis tester un programme en C qui permet de sortir le mot binaire AAh à travers le port B et de le
visualiser infiniment sur les LED connectées à ce port.
2. Ecrire puis tester un programme en C qui permet de sortir successivement les mots binaires AAh et 55h à
travers le port B et de les visualiser infiniment par alternance avec un intervalle de 1s pour chacun (utiliser
la fonction Delay_ms(xx) pour créer des temporisations exprimés en ms).
Activité 2 : Utilisation des boutons poussoirs.
A chaque broche d’E/S est connecté un bouton poussoir. Etant donné qu’une tension de 5V est appliquée sur
l’autre borne du bouton, et qu’une résistance de tirage bas (pull-down) est mise entre la borne de contact avec
le microcontrôleur et la masse, cette configuration permet de générer une impulsion positive lors de l’appui du
bouton.
1. Ecrire puis tester un programme en C qui permet de scruter infiniment les lignes du port C afin de détecter
un potentiel appui. Le port doit être ainsi configuré en entrée. A chaque appui d’un bouton, la LED connectée
à la ligne du port B de même ordre que la ligne à laquelle le bouton est connecté s’allume tout au long de
l’appui.
2. Ecrire puis tester un programme en C qui exploite le même principe de celui précèdent, mais les boutons
doivent avoir un double effet : un appui permet d’allumer la LED qui correspond (même si le bouton est
relâché par la suite), l’appui suivant permet d’éteindre la LED, et ainsi de suite. Cela nécessite un variable
de type ‘bit’ associée à chaque bouton et qui doit être basculée à chaque détection d’appui.
Activité 3 : Gestion des afficheurs 7 segments par multiplexage.
Un afficheur 7-segments est un dispositif électronique qui permet de visualiser des chiffres sous forme des
segments lumineux. Ces segments ne sont à l’intérieur de l’afficheur que des LED qui partagent une seule anode
ou cathode (figure 1). De ce fait, l’afficheur 7-segments possède 8 liaisons et parfois une liaison en plus pour
point décimal. Un segment émet de la lumière s’il y a une chute de tension aux bornes de la LED qui correspond.
La liaison commune doit être mise à la masse s’il s’agit d’une cathode ou alimentée par une tension positive si
elle est une anode. Grace à cette liaison il est possible donc de commander l’état de l’afficheur tout entier.

2
Ecole Nationale Supérieure de Technologie Département GEII
Ing 3 Automatique et informatique industrielle Année : 2021/2022
Matière : Systèmes temps réel Mr. B.ABBADI
----------------------------------------------------------------------------------------------------------------------------------------------------------------

Pour afficher un nombre à n chiffre, il faut n afficheurs et donc n x 8 lignes d’E/S sont nécessaires pour piloter
ces derniers. Ce nombre peut être minimisé à n + 8 en utilisant la technique de multiplexage des afficheurs.
Chacune des n lignes est appliquée sur la base d’un transistor qui permet de relier le point commun d’un afficheur
à la masse ou à la borne de tension positive. Les 8 lignes sont partagées par tous les afficheurs et permet
chacune d’actionner le même segment dans tous les afficheurs. Pour visualiser un chiffre sur un afficheur, le
microcontrôleur s’occupe d’envoyer le mot convenable à travers les 8 lignes et met à l’état haut l’une des n lignes
de commande afin d’activer l’afficheur qui correspond. Si on parcourt les n afficheurs dans des laps de temps
couts, cela donnera l’impression qu’ils sont commandés simultanément par le microcontrôleur.

Fig. 01 : Organisation d’un afficheur 7 segments et techniques de multiplexage de deux afficheurs.

1. Ecrire puis tester un programme en C qui permet de visualiser à l'éternité le chiffre ‘0’ sur le premier afficheur.
2. Ecrire puis tester un programme en C qui permet de visualiser à l'éternité le chiffre ‘0’ sur les quatre
afficheurs. L’intervalle de multiplexage est 10 ms.
3. Ecrire puis tester un programme en C qui permet de visualiser à l'éternité les chiffres 0, 1, 2, 3 par ordre sur
les quatre afficheurs. L’intervalle de multiplexage est 10 ms.
NB : Il est nécessaire de voir le schéma du câblage des afficheurs avec le microcontrôleur qui est présenté dans
le manuel de la carte de développement (p.27).
Activité 3 : Gestion d’un clavier matriciel de 12 touches.
Un clavier matriciel dispose d’un ensemble de boutons poussoirs rangés sous forme d’une matrice. A son
intérieur se trouve une grille des fils conducteurs et chaque bouton permet d’établir un contact au niveau du
point d’intersection deux conducteurs. En effet, il existe autant de fils que la somme des lignes et des colonnes
formés par les boutons. Chaque fils est relié à l’une des bornes extérieures du clavier. Un clavier de 12 touches
est organisé sous forme d’une matrice de 4 lignes et 3 colonnes des boutons. Il communique donc avec
l’extérieur à travers 7 bornes : 4 pour les lignes et trois pour les colonnes (figure 2).

3
Ecole Nationale Supérieure de Technologie Département GEII
Ing 3 Automatique et informatique industrielle Année : 2021/2022
Matière : Systèmes temps réel Mr. B.ABBADI
----------------------------------------------------------------------------------------------------------------------------------------------------------------

Fig. 2 : Organisation interne d’un clavier matriciel de 12 touches.

Il existe plusieurs méthodes de gestion des claviers matriciels. L’une de ces méthodes est la suivante : les
bornes du clavier sont connectées au microcontrôleur à travers les lignes d’E/S parallèle. Chaque borne est
reliée en plus à une résistance de tirage haut (pull-up). Pour faciliter la programmation, il est préférable d’utiliser
un port parallèle unique. L’organigramme de scrutation et de décodage du clavier est présenté dans la figure 3.
Le principe est de mettre à l’état bas les lignes du clavier et tester les colonnes. En repos, ces dernières sont à
l’état haut à cause des résistances de tirage haut. Un appui provoque un état bas sur l’une des colonnes. Cela
permet de trouver la colonne à laquelle appartient le bouton appuyé. L’état du port doit être sauvegardé dans
variable après une petite temporisation (100us). Pour trouver la ligne du bouton appuyé, l’opération doit être
inversée. Le contenu de la même variable doit être mis à jour par le nouvel état du port après avoir inversé
l’opération. En fonction du mot contenu dans la variable, le caractère qui correspond au bouton appuyé est
affecté à une nouvelle variable. Il est possible de l’affecter directement le mot qui va être envoyé à l’afficheur 7
segment. Autrement, quelques lignes de code doivent être ajoutées pour générer ce mot en fonction du contenu
de la nouvelle variable. Ceci est pratique lorsque la tâche de décodage de clavier et celle d’affichage sont écrites
sous formes des fonctions.

Fig. 3 : Méthode de gestion d’un clavier de 12 touches.

4
Ecole Nationale Supérieure de Technologie Département GEII
Ing 3 Automatique et informatique industrielle Année : 2021/2022
Matière : Systèmes temps réel Mr. B.ABBADI
----------------------------------------------------------------------------------------------------------------------------------------------------------------

Exemple : On suppose que le bouton 5 d’un clavier de 12 touches soit enfoncé. Le clavier est relié au
microcontrôleur à travers le port C : RC1, RC2, RC3 pour les lignes et RC4, RC5, RC6, RC7 pour les colonnes.
RC0 est non utilisé (sa valeur est notée par X). Pour trouver le mot qui correspond au bouton 5 appuyé, on
procède comme suit :

 On met à 0 les colonnes et on teste les lignes, on trouvera que la ligne 6 soit à 0, les autres soient à 1.
 On met les lignes à 0, on trouvera que la colonne 2 soit à 0, les autres soient à 1.
 Or, le mot récupéré dans la première variable est : 1011101X, qui correspond selon le tableau à 5.
A faire : Développer en C les trois fonctions suivantes :

 Une fonction de scrutation et de décodage d’un clavier de 12 touches. Le clavier est relié au
microcontrôleur tel qu’il est expliqué en figure ci-dessous. La fonction renvoie une variable de type
‘char’ qui contient le code d’un bouton : char clavier()
 Une fonction qui renvoie le mot à envoyer vers l’afficheur 7 segments à partir du code renvoyé par la
première fonction (* et # sont affichés 0) : char digit(char)
 Une fonction qui gère la visualisation du caractère appuyé sur un seul afficheur et ne renvoie rien : void
affiche(char)
A partir de ces trois fonctions développer puis tester un programme qui permet de gérer l’affichage d’un
chiffre qui correspond à un bouton appuyé sur le clavier.

E/S Borne
RC4 7
RC0 5
RC5 3
RC1 1

RC2 6/2
RC6 8/4
RC7 9

Vous aimerez peut-être aussi