0% ont trouvé ce document utile (0 vote)
48 vues26 pages

Introduction aux GPIO et leur utilisation

Transféré par

anyzonn
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
48 vues26 pages

Introduction aux GPIO et leur utilisation

Transféré par

anyzonn
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi