Dans ce cours on va voir comment récupérer la valeur d’un capteur numérique avec un programme en langage C. On part du principe que vous savez déjà utiliser maplab.
Si ce n’est pas le cas nous avons fait plusieurs cours afin de vous aider :
Dans ce cours on va voir comment récupérer la valeur d’un bouton poussoir. Le bouton poussoir est des composants les plus simples à utiliser et très commun dans beaucoup de projets.
On va maintenant comment détecter le bouton poussoir sur MPLAB.
Voici le schéma du circuit :
#include "system.h"
unsigned short bouton_poussoir_variable;
int main(void) {
// Bouton poussoir
#define Bouton_poussoir PORTDbits.RD3
ANSELDbits.ANSELD3=0; // Sortie numérique
TRISDbits.TRISD3=1; // On déclare le bouton poussoir comme une entree
WPUDbits.WPUD3=1; //On met la resistance de pull up
/* Initialisation de l'interruption*/ INT0PPSbits.PORT= 0b001;
INT0PPSbits.PIN= 0b100;
INTCON0bits.INT0EDG =0;
PIR1bits.INT0IF =0;
PIE1bits.INT0IE =1;
while(1) {
bouton_poussoir_variable =Bouton_poussoir;
}
}
On va maintenant expliquer le programme :
Le registre ANSEL permet d’indiquer la carte Microchip si notre broche sera une entrée ou une sortie. Pour cela on doit choisir notre broche. Si on notre bouton poussoir est sur la broche RD3, on écrira : ANSELDbits.ANSELD3. Ensuite comme on veut déclarer notre broche comme numérique, on met :
ANSELDbits.ANSELD3=0;
Cette instruction doit être mise dans le main.
Le registre TRIS permet de définir si votre broche est une entrée ou une sortie. Pour savoir si vous devez déclarer cette broche en entrée ou en sortie, vous devez vous demander si votre composant va envoyer une information à la carte (bouton poussoir, potentiomètre, interrupteur) ou bien c’est la carte qui va envoyer une information pour contrôler votre composant (led, moteur…).
Cette instruction doit être mise dans le main avant le while (1).
En utilisant un bouton poussoir, on doit activer la résistance de tirage interne de la carte ou résistance de pull up afin de notre signal soit bien comprit comme un 1 ou 0 selon si le bouton poussoir est appuyé et ne pas avoir d’état Z. Vous pouvez lire notre cours sur les GPIO pour plus d’explication.
Pour cela on écrit :
WPUDbits.WPUD3=1;
Cette instruction doit être mise dans le main avant le while (1).
On intialise les interruptions pour que le bouton poussoir soit considéré comme tel et que l’on puisse récupérere sa valeur :
/* Initialisation de l'interruption*/ INT0PPSbits.PORT= 0b001;
INT0PPSbits.PIN= 0b100;
INTCON0bits.INT0EDG =0;
PIR1bits.INT0IF =0;
PIE1bits.INT0IE =1;
Cette instruction doit être mise dans le main, avant le while (1).
Pour pouvoir récupérer la valeur denotre bouton poussoir, il faut le déclarer dans le main, avant le while :
#define Contacteur_fin_course PORTDbits.RD3
On va maintenant utiliser le watches pour voir la valeur de notre bouton poussoir.
Pour pouvoir voir notre variable changer, on va regarder dans les watches. C’est une sorte de moniteur qui va afficher seulement la valeur de vos variables.
Le watches s’utilise souvent avec le debugger de MPLAB.
Voici comment afficher les watches :
Le watches s’utilise souvent avec le debugger de MPLAB.
Un debugger va vous permettre de dérouler votre programme pas à pas avec un point d’arrêt ou le programme s’arrêtera. Normalement vous devez placer votre point d’arret juste en dessous de l’instruction ou vous voulez voir l’état des variables de façon a ce que le debugger s’arrête juste dessus.
Une fois que vous avez choisit votre point d’arrêt, vous avez plus qu’à cliquer sur le bouton debug project pour que le programme se lance jusqu’au point d’arrêt :
Si vous voulez relancer le programme, vous avez plusieurs boutons :
Maintenant que vous savez utiliser le debugger, on va pouvoir l’utiliser pour les watches.
Pour pouvoir voir la valeur de votre variable, il faut que celle ci soit globale, c’est à dire initialisé en dehors du main.
Une fois le programme lance avec les watches, il nous reste plus qu’à taper le nom de notre variable ou l’on récupère la valeur de notre bouton poussoir afin de regarder sa valeur :
Voici le valeur de notre bouton poussoir une fois celui-ci appuyé :
On va maintenant voir comment allumer une led avec un bouton poussoir. Ceci permet de voir directement si votre bouton poussoir fonctionne plutôt que de regarder dans les watches.
Dans notre circuit le bouton poussoir est branché sur la pin RD5 de la carte et la led est branchée sur la pin RD1 de la carte :
#include "mcc_generated_files/system/system.h"
unsigned short bouton_poussoir_variable;
int main(void) {
// Bouton poussoir
#define Bouton_poussoir PORTDbits.RD3
ANSELDbits.ANSELD3=0; // Sortie numérique
TRISDbits.TRISD3=1; // On déclare le bouton poussoir comme une entree
WPUDbits.WPUD3=1; //On met la resistance de pull up
// La led rouge
#define LED_ROUGE LATDbits.LATD1
TRISDbits.TRISD1=0; // On déclare la led rouge en sortie
/* Initialisation de l'interruption*/ INT0PPSbits.PORT= 0b001;
INT0PPSbits.PIN= 0b100;
INTCON0bits.INT0EDG =0;
PIR1bits.INT0IF =0;
PIE1bits.INT0IE =1;
while(1) {
bouton_poussoir_variable =Bouton_poussoir; // On recupere la valeur du bouton poussoir
if (bouton_poussoir_variable==0){ // si le bouton poussoir est appuye
LED_ROUGE=1; // On allume la led
}
else {
LED_ROUGE=0; // sinon on eteint la led
}
}
}