Chapitre 4 : les périphériques d’entrées / sorties
logiques (GPIO)
OBJECTIF : échanger des informations logiques entre
les broches GPIO du microcontrôleur et l’extérieur du
composant
General Purpose INPUT OUTPUT : entrée-sortie à usage
général
Exemples d’applications
Port GPIO en entrée :
●
Lorsqu'un port est configuré en entrée, le microcontrôleur vient lire l’état
logique des broches concernées (un port peut avoir plusieurs broches en
entrées).
Où est le µC ? Son port GPIO ?
Comment ça marche ?
2 IUT de TOURS GEII INFO2 07/03/2023
Exemples d’applications
Où est le µC ? Son port GPIO ?
Port GPIO en entrée : le µC reçoit une information logique Comment ça marche ?
µC S1 ouvert : tension de 5V sur la broche 37
=> 1 logique vu par le code
S1 fermé : tension de 0V sur la broche 37
=> 0 logique vu par le code
3 IUT de TOURS GEII INFO2 07/03/2023
Exemples d’applications
Port GPIO en sortie : le µC force l’état logique de la broche
Hypothèse : µC
alimenté en 5V GPIO forcé par le code au 1 logique :
tension de 5V sur la broche => LED allumée
GPIO forcé par le code au 0 logique :
tension de 0V sur la broche => LED éteinte
Le courant dans la LED provient du µC.
Attention : quelques mA seulement
4 IUT de TOURS GEII INFO2 07/03/2023
Exercice : GPIO en entrée ou en sortie ?
Le courant entre ou sort de la broche GPIO ?
La broche doit être configurée en entrée ou sortie ?
Réponse :
●
Le courant entre dans la broche du µC
●
La broche GPIO est une sortie.
●
Direction d’une GPIO : indépendante de la direction du courant !
5 IUT de TOURS GEII INFO2 07/03/2023
Port GPIO en entrée et sortie
Port de 8 broches : 4 en entrées, 4 en
sorties
Principe : on alimente une ligne parmi 4 à
un instant t (GPIO P4 à P7) puis on fait la
lecture des colonnes (P3 à P0).
Exemple :
●
Ligne P4 active (0 logique), P5 à P7
inactives (1 logique)
●
Lecture des colonnes P3 à P0 pour
identifier si touches 1, 2, 3 ou F
appuyées
●
Si touche F appuyée alors P3=0
6 IUT de TOURS GEII INFO2 07/03/2023
Applications typiques des GPIO
Commande multiplexée pour afficheur 7 segments
Les GPIO 10 et 11 pilotent
alternativement l’alimentation des
afficheurs 7 segments (GPIO actif
niveau bas)
Les GPIO 2 à 9 pilotent les 7
segments et le point décimal DP
(par des 0 logiques)
Rappel : persistance rétinienne
environ 20 images / seconde
7 IUT de TOURS GEII INFO2 07/03/2023
Applications typiques des GPIO
Commande de moteurs type MCC Rappel : courant µC qq mA !
Interface de puissance entre la
GPIO et le moteur : transistors
D1 : diode de roue libre pour la
protection du transistor (sur-
tension causée par l’inductance
du moteur)
Montage Darlington Réseau de transistors
8 IUT de TOURS GEII INFO2 07/03/2023
Applications typiques des GPIO
Commande de charge alimentée en alternatif
La charge est pilotée par un Triac,
lui même commandé par un µC
(GPIO PA0 ici)
Obligation d’isoler la partie
commande (0-5V continu) de la
partie puissance (230 V alternatif)
par un opto-coupleur
Opto-coupleur
9 IUT de TOURS GEII INFO2 07/03/2023
Configuration logicielle d’un port GPIO
Port GPIO de 4 broches,
configurées ici en sorties
Démonstration !
(voir document autorisé aux
contrôles pour les copies
d’écrans)
10 IUT de TOURS GEII INFO2 07/03/2023
Les fonctions C des GPIO
PSoC Creator => Fonctions de lecture / écriture
/***************************************
* Function Prototypes
***************************************/
void Pin_1_Write(uint8 value);
uint8 Pin_1_Read(void);
Expliquez les 2 prototypes !
11 IUT de TOURS GEII INFO2 07/03/2023
Les fonctions C des GPIO
void Pin_1_Write(uint8 value);
//Fonction d’écriture sur le port, on force la
ou les broches aux niveaux logiques de value
Exemple : Pin_1_Write(0b0011);
1
1
Rappel : 0
0
0b : valeur en binaire
0x : valeur en héxa => Pin_1_Write(0x03);
Rien : valeur en décimale => Pin_1_Write(3);
12 IUT de TOURS GEII INFO2 07/03/2023
Les fonctions C des GPIO
Pin_1_Write(0b0011);
Problème : on impose l’état logique de toutes les broches
On voudrait modifier l’état logique d’une broche SANS
modifier l’état logique des autres broches !
Comment faire ???? (Ressource Numérique, à l’aide !)
13 IUT de TOURS GEII INFO2 07/03/2023
Exemple
Pin_1.0 pilote la LED D1
Pin_1.1 pilote la LED D2
Pin_1.2 et Pin_1.3 pilotent le sens de
rotation du moteur (01 ou 10) et son
arrêt (00 ou 11)
Problématique : je veux piloter la
LED1 sans modifier l’état de l’autre LED
ainsi que l’état actuel du moteur !
14 IUT de TOURS GEII INFO2 07/03/2023
Opérations de masquages
Rappel : table de vérité du OU logique
X Y Sortie Si X représente l’état logique
0 0 0 d’une broche :
0 1 1
1 0 1 X + 1 = 1 => on force la sortie à
1 1 1 1 qq soit X
X + 0 = X => la sortie n’est pas
modifiée
15 IUT de TOURS GEII INFO2 07/03/2023
Forçage à 1 d’une GPIO en C
Pin_1_Write(Pin_1_Read() | 0b0001) ;
X X X X ← Pin_1_Read() : Lecture des 4 broches
+
0 0 0 1 ← OU LOGIQUE avec le masque 0001
X X X 1 ← Nouvelle valeur à écrire sur le port
X : valeur logique actuelle de la
broche (0 ou 1)
Forçage à 1 de la broche de poids faible du port GPIO
Pas de modifications de ces 3 broches
16 IUT de TOURS GEII INFO2 07/03/2023
Opérations de masquages : ET logique
Rappel : table de vérité du ET logique
X Y Sortie Si X représente l’état logique
0 1 0 d’une broche :
0 0 0
1 1 1 X . 0 = 0 => on force la sortie à
1 0 0 0 qq soit X
X . 1 = X => la sortie n’est pas
modifiée
17 IUT de TOURS GEII INFO2 07/03/2023
Forçage à 0 d’une GPIO en C
Pin_1_Write(Pin_1_Read() & 0b1110) ;
X X X X ← Pin_1_Read() : Lecture des 4 broches
&
1 1 1 0 ← ET LOGIQUE avec le masque 1110
X X X 0
← Nouvelle valeur à écrire sur le port
X : valeur logique actuelle de la
broche (0 ou 1)
Forçage à 0 de la broche de poids faible du port GPIO
Pas de modifications de ces 3 broches
18 IUT de TOURS GEII INFO2 07/03/2023
Opérations de masquages : OU EXCLUSIF
Rappel : table de vérité du OU EXCLUSIF
X Y Sortie Si X représente l’état logique
0 0 0 d’une broche :
0 1 1
1 0 1 X ⊕ 1 = X => on complémente
1 1 0 la sortie
X ⊕ 0 = X => la sortie n’est pas
modifiée
19 IUT de TOURS GEII INFO2 07/03/2023
Complémentation d’une GPIO en C
Pin_1_Write(Pin_1_Read() ^ 0b0001) ;
X X X 0 ← Pin_1_Read() : Lecture des 4 broches
⊕
0 0 0 1 ← OU EXCLUSIF avec le masque 0001
X X X 1
← Nouvelle valeur à écrire sur le port
X : valeur logique actuelle de la
broche (0 ou 1)
La broche à 0 est forcée à 1
Pas de modifications de ces 3 broches
20 IUT de TOURS GEII INFO2 07/03/2023
Forçage de plusieurs broches d’un port GPIO
Pin_1_Write(Pin_1_Read() | 0b0101) ;
Il suffit de modifier le masque en conséquence !
A vous de jouer :
Pin_1_Write(Pin_1_Read() & 0b0001) ;
Pin_1_Write(Pin_1_Read() ^ 0b1001) ;
Pin_1_Write(Pin_1_Read() & 0b0000) ;
Pin_1_Write(Pin_1_Read() | 0b1111) ;
21 IUT de TOURS GEII INFO2 07/03/2023
Forçage de plusieurs broches d’un port GPIO
Correction :
Pin_1_Write(Pin_1_Read() & 0b0001) ;
→ Forçage à 0 des 3 bits de poids forts
Pin_1_Write(Pin_1_Read() ^ 0b1001) ;
→ Complémentation des 2 bits de rang 0 et 3
Pin_1_Write(Pin_1_Read() & 0b0000) ;
→ Forçage à 0 des 4 broches du port !
Pin_1_Write(Pin_1_Read() | 0b1111) ;
→ Forçage à 1 des 4 broches du port !
22 IUT de TOURS GEII INFO2 07/03/2023
Lecture de quelques broches d’un port GPIO
/*Lecture et test des bits de rang 1 et 3 de Pin_1
sans tenir compte des autres bits */
if ( (Pin_1_Read() & 0b1010) == 0b1010)
{
/*les entrées Pin_1_1 et Pin_1_3 sont à 1*/
}
else
{
/*les deux entrées ou l'une des deux entrées sont à 0*/
}
23 IUT de TOURS GEII INFO2 07/03/2023
Niveaux logiques et Tensions !!!
Un niveau logique n’est pas une tension mais une plage de
tension...
0 ou 1 ?
1 ou 0 ?
Dans la zone indéterminée, c’est la m…
Faut donc pas tomber dedans !
24 IUT de TOURS GEII INFO2 07/03/2023
Niveaux logiques et Tensions !!!
Règles à respecter : VOH > VIH et VOL < VIL
Sortie
Entrée
Sortie Entrée porte ET Sortie porte OU
Vcc : tension positive
d’alimentation des portes
logiques
25 IUT de TOURS GEII INFO2 07/03/2023
Quelques vidéos :
Une vidéo de nos amis suisses sur les GPIO (15 mn) :
[Link]
hjLdoXacy8&index=13
La manipulation individuelle des bits (15 mn)
[Link]
Sf9bTjISthjLdoXacy8
26 IUT de TOURS GEII INFO2 07/03/2023