Dernière mise à jour le 10/02/18

Présentation


Nous avons tous envies pour une première fois de faire clignoter une ou voir même plusieurs leds “seule” ou bien à l’aide d’un petit bouton poussoir. Et bien vous savez quoi?!C’est ce que nous allons voir dans ce présent article.

Afin de pouvoir faire fonctionner les entrées/sorties du MINI-32 mettant à disposition le PIC32MX534F064H il faut avant tout passer par quelques réglages élémentaires qui sont : TRISx/LATx/PORTx (x représente la lettre du PORT utilisé), ces 3 réglages sont ce qu’on appel ceci des registres.

Registre TRISx

Ce registre permet d’écrire sur le port entrée/sortie, et c’est ce registre qui permet de changer les états des broches afin de les configurées soit en entrées soit en sortie. Par exemple, si nous voulons que le port B – broche RB4 soit une entrée, il suffit de mettre TRISB.4:=1. Si par contre cette même broche nous décidons que celle-ci soit une sortie il suffira d’écrire TRISB.4:=0. Alors attention quand même lorsque je parle des broches!! Les broches ne correspondent pas au n° de broche en elle même, mais plutôt au bit qui lui correspondent. Ici dans l’exemple proposé RB4 est le bit n°4. En effet si on regarde le schéma ci-dessous la broche n°4 ou est branchée la led D4 correspond au bit RB4. Mais je préfère parler de broches pour simplifier la lecture car en utilisant les bits, il en résulte que le portB est un port qui contient au total 16 bits (16 broches) de RB0 à RB15. L’inconvénient c’est que que le MINI-32 n’a pas toutes ses broches à disposition, mais seulement RB0/RB1/RB4/….On ne va pas se plaindre!! car il y’a suffisamment assez pour réaliser des tonnes de montages electroniques!!
 

 
Que ce passe t’il au niveau de la programmation? cela ne changer rien car si vous décidez de déclarer la broche RB2 (bit 2) comme une sortie ” TRISB.2:=0″vous n’obtiendrez jamais rien de celle-ci puisque celle-ci n’est pas cablée…

Registre LATx

Ce registre permet d’écrire sur le port entrée sortie, et c’est ce registre qui permet de changer les état des broches. Nous verrons tout ça en toute simplicité

Registre PORTx

Ce registre quant à lui permet de lire le port, et c’est ce registre qui permet de « détecter » l’état des entrées. l’appui sur un bouton pousssoir sera détecter en utilisant PORTx.y (avec y le n° de la broche concernée. Des exemples ci-dessous permettront de vous familiariser avec les entrées sorties et de mieux comprendre l’utilisation de ces registres.

Schéma PIC32 Sorties Actives




Comme vous pouvez le constater, afin de ne pas encombrer le schéma, je n’ai pas représenté toutes les leds, mais uniquement de la led D1 à D10.
Pour les autres leds non représentées sur le shéma électronique, le câblage est identique en utilisant des résistances de 1 kilo-ohms qui feront bien l’affaires. Soyons économiques niveau courant ;-). Ce montage ne fait que alimenter les leds afin de tester si toutes les sorties sont bien toutes à l’état haut soit à l’état “1” logique.

Programme du PIC


Programme disponible aussi en MikroC

program PIC32_Sorties_Actives;
procedure init;
begin
AD1PCFG := $FFFF; // Utilisation de l’entrée en mode numérique (digital)
TRISB := $0000; // toutes les broches du PORTB sont configurées en sorties
LATB := $0000; // Initialise toutes les sorties du PORTB à l’état logique 0
TRISD := $0000; // toutes les broches du PORTD sont configurées en sorties
LATD := $0000; // Initialise toutes les sorties du PORTD à l’état logique 0
TRISE := $0000; // toutes les broches du PORTE sont configurées en sorties
LATE := $0000; // Initialise toutes les sorties du PORTE à l’état logique 0
TRISF := $0000; // toutes les broches du PORTF sont configurées en sorties
LATF := $0000; // Initialise toutes les sorties du PORTF à l’état logique 0
TRISG := $0000; // toutes les broches du PORTG sont configurées en sorties
LATG := $0000; // Initialise toutes les sorties du PORTG à l’état logique 0
end;
begin
init;
while true do
begin
LATB:=$FFFF;
LATD:=$FFFF;
LATE:=$FFFF; // ici on force toutes les sorties à l’état logique 1
LATF:=$FFFF; // même pour les “broches” non cablées!!
LATG:=$FFFF;
end;
end.

 
Dans ce programme, on retrouve dans la procédure d’initialisation “procedure init;” le réglages des bits TRISx et LATx.
Puisque ici nous faisons que allumer des leds, la réglage de TRISx est configuré en sortie en écrivant “TRISx.y:=0” (x le port associé, et y le n° de broche (bit)), puis j’ai forcé l’état des sorties via le bit “LATx:=$FFFF” à 1 afin que les 16 bits (ou broches) soient toutes mises à l’état haut ce qui entraîne forcément la mise sous tension et l’éclairage des leds.
 
En ce qui concerne le bit AD1PCFG celui-ci permet uniquement de programmer les entrées en numérique (tout ou rien), j’aurais bien pu mettre ce bit AD1PCFG à l’état 0 soit “AD1PCFG:=$0000” afin d’obtenir cette fois-ci des entrées analogiques pouvant récupérer un signal qui variera entre 0 et 3,3V maxi!! Oui 3,3V maxi car l’alimentation du PIC est sous 3,3V et de même pour ces broches. Cela donne des idées l’analogique vous ne trouvez pas? je pense que vous me voyez venir…..
 
Que dire de plus mise à part que ce programme ne fait que d’allumer les leds à la mise sous tension. C’est un moyen simple de vérifier si tout les sorties du PIC vont changer d’état.

Schéma PIC32 Activer sortie à 1 bouton


Nous allons voir un autre montage éléctronique, qui celui-ci permettra à l’aide d’un boutons poussoirs d’allumer ou d’éteindre une leds.
Regardons ensembles ce nouveau schéma électronique et son programme:

Programme du PIC


Programme disponible aussi en MikroC

program PIC32_Activer_sortie_a_1_bouton;

procedure init;
begin
AD1PCFG := $FFFF; // Utilisation de l’entrée en mode numérique (digital)

TRISB := $0010; // configure la broche RB1 comme une entrée
LATB := $0000; // Initialise toutes les sorties du PORTB à l’état logique 0
TRISD := $0000; // toutes les broches du PORTD sont configurées en sorties
LATD := $0000; // Initialise toutes les sorties du PORTD à l’état logique 0
end;
procedure Allumer_Led;
begin
if PORTB.1=1 then LATD.10:=1 else LATD.10:=0; // Si on appuie sur le bouton la led s’allume sinon elle s’éteint
end;
begin
init;
while true do
begin
Allumer_Led;
end;
end.

La procédure “Allumer_led” permet comme son nom l’indique d’allumer la led D1. Lorsque le bouton Bp1 n’est pas pressé, la tension de 3,3V est appliquée directement sur la broche RB1 ce qui représente un “1” logique.
Lorsque cette fois-ci le bouton poussoir est relâché l’entrée RB1 se voit avec une tension de 0V ce qui entraîne l’extinction de la led. Avez vous remarquez que j’ai modifier le bit “TRISB” qui est configurée comme une entrée (broche RB1) en binaire sur 32 bits cela donne:
00000000 00000000 00000000 00000010 – 32 bits car je le rappel il y’a 16 Entrées/Sortie (E/S)

Schéma PIC32 Activer sorties à 2 boutons


Nous venons de voir avec 1 bouton poussoir, regardons maintenant ce qu’il en est avec 2 boutons poussoirs.

Programme du PIC


Programme disponible aussi en MikroC

program PIC32_Activer_sortie_a_2_boutons;

procedure init;
begin
AD1PCFG := $FFFF; // Utilisation de l’entrée en mode numérique (digital)

TRISB := $0003; // configure la broche RB0 et RB1 comme des entrées
LATB := $0000; // Initialise toutes les sorties du PORTB à l’état logique 0

TRISD := $0000; // toutes les broches du PORTD sont configurées en sorties
LATD := $0000; // Initialise toutes les sorties du PORTD à l’état logique 0
end;

procedure Allumer_Led_D1;
begin
if PORTB.0=1 then LATD.10:=1 else LATD.10:=0; // Si on appuie sur le bouton la led D1 s’allume sinon elle s’éteint
end;

procedure Allumer_Led_D2;
begin
if PORTB.1=1 then LATD.11:=1 else LATD.11:=0; // Si on appuie sur le bouton la led D2 s’allume sinon elle s’éteint
end;

begin
init;
while true do
begin
Allumer_Led_D1;
Allumer_Led_D2;
end;
end.

Que dire …… Ah oui!!! j’ai encore modifié le bit TRISB car cette fois-ci 2 entrées sont raccordées sur les broches RB0 et RB1.

Historiques


– 10/02/18
Ajout programmation en MikroC
– 03/02/18
Première mise à disposition.