Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Erreur Programme LED + BP PIC16F18345
Bonjour à tous,
J'ai un petit problème sur mon programme. Il consiste à allumer une led rouge (RB7) à l'aide d'un bouton poussoir (RC5). Quand j'appuie sur le bouton, la LED s'allume au bout d'un certain temps et s'éteint après plusieurs appuis. Je n'arrive pas simplement à allumer et éteindre une led avec ce bouton poussoir. J'utilise MPLAB X IDE v4.01 pour la programmation du PIC. Si quelqu'un pourrait m'aider, avec plaisir !
Voici le programme actuel
J'ai un petit problème sur mon programme. Il consiste à allumer une led rouge (RB7) à l'aide d'un bouton poussoir (RC5). Quand j'appuie sur le bouton, la LED s'allume au bout d'un certain temps et s'éteint après plusieurs appuis. Je n'arrive pas simplement à allumer et éteindre une led avec ce bouton poussoir. J'utilise MPLAB X IDE v4.01 pour la programmation du PIC. Si quelqu'un pourrait m'aider, avec plaisir !
Voici le programme actuel
Code : Tout sélectionner
// CONFIG1
#pragma config FEXTOSC = OFF // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled)
#pragma config RSTOSC = HFINT1 // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz))
#pragma config CLKOUTEN = OFF // Clock Out Enable bit (CLKOUT function is enabled; FOSC/4 clock appears at OSC2)
#pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
// CONFIG2
#pragma config MCLRE = ON // Master Clear Enable bit (MCLR/VPP pin function is MCLR; Weak pull-up enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config WDTE = OFF // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored)
#pragma config LPBOREN = OFF // Low-power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = SBOREN // Brown-out Reset Enable bits (Brown-out Reset enabled according to SBOREN)
#pragma config BORV = LOW // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V)
#pragma config PPS1WAY = OFF // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence))
#pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will not cause a Reset)
#pragma config DEBUG = OFF // Debugger enable bit (Background debugger disabled)
// CONFIG3
#pragma config WRT = OFF // User NVM self-write protection bits (Write protection off)
#pragma config LVP = ON // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.)
// CONFIG4
#pragma config CP = OFF // User NVM Program Memory Code Protection bit (User NVM code protection disabled)
#pragma config CPD = OFF // Data NVM Memory Code Protection bit (Data NVM code protection disabled)
#include <xc.h>
// PORT A
#define ICSPDAT RA0 // Port de programmation
#define POWER RA1 // Retour d etat charge batterie
#define MCLR RA3 // Port de programmation
// PORT B
#define ledR RB7 // +LED rouge
// PORT C
#define BP RC5 // Bouton poussoir
#define _XTAL_FREQ 16000000
int etat_Bp = 0;
unsigned char unite;
void main(void)
{
// Reglages des entrees/sorties
TRISA = 0b00001011; // Choix entrees/sorties
LATA = 0b00000000; // RAZ des ports
ANSELA = 0; // Choix mode analogique/numerique
INLVLA = 0b00000010; // Niveaux TTL
WPUA = 0b00000010; // Resistances de pull-up interne
TRISB = 0b01010000; // Choix entrees/sorties
LATB = 0b10000000; // RAZ des ports
ANSELB = 0; // Choix mode analogique/numerique
INLVLB = 0b10000000; // Niveaux TTL
SLRCONB = 0b10101111; // Slew rate
WPUB = 0; // Resistances de pull-up interne
TRISC = 0b00111000; // Choix entrees/sorties
LATC = 0b11000000; // RAZ des ports
ANSELC = 0b00011000; // Choix mode analogique/numerique
INLVLC = 0b11000111; // Niveaux TTL
SLRCONC = 0b11111111; // Slew rate
WPUC = 0b00100000; // Resistances de pull-up interne
while(1) // boucle infinie
{
if (BP == 1){
__delay_ms(30);
etat_Bp = 1;
ledR = 1;
}
if (etat_Bp == 1 && (BP == 0))
{
unite ++;
etat_Bp = 0;
ledR = 0;
__delay_ms(30);
}
}
}
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Erreur Programme LED + BP PIC16F18345
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir ici,
Pour ton probléme , c'est juste une question de logique ! J'ai fais un tuto dessus mais peut etre qu'il n'est pas très clair.
Je ne connais pas MAP LABX . alors ce sera à toi d'adapter le code .
Dans ta boucle met des commentaires cela t'aidera.
Si le bouyton est appuyé tu rentre dans une boucle ? OK
Ensuite tu attends 30 millisecondes pour eviter justement les fameux rebonds ud BP . OK
Ensuite tu léve un drapeau et tu allume ta led ??? Là il y a un probléme . Il faut que tu refasse le test de condition "si le bp est appuyé ou non" ? Sinon ta pause ne sert a rien.
Si il s'agit d'un simple bouton poussoir ( suivant le code qu'il y a derriere) , il est préférable de faire une boucle du genre
Tant que le bouton est appuyé je reste ici
While(BP ==1); Ainsi tu téssure d'avoir relache le BP
Pour ton probléme , c'est juste une question de logique ! J'ai fais un tuto dessus mais peut etre qu'il n'est pas très clair.
Je ne connais pas MAP LABX . alors ce sera à toi d'adapter le code .
Dans ta boucle met des commentaires cela t'aidera.
Si le bouyton est appuyé tu rentre dans une boucle ? OK
Ensuite tu attends 30 millisecondes pour eviter justement les fameux rebonds ud BP . OK
Ensuite tu léve un drapeau et tu allume ta led ??? Là il y a un probléme . Il faut que tu refasse le test de condition "si le bp est appuyé ou non" ? Sinon ta pause ne sert a rien.
Si il s'agit d'un simple bouton poussoir ( suivant le code qu'il y a derriere) , il est préférable de faire une boucle du genre
Tant que le bouton est appuyé je reste ici
While(BP ==1); Ainsi tu téssure d'avoir relache le BP
Code : Tout sélectionner
while(1) // boucle infinie
{
if (BP == 1){ // Si le bouton est appuyé ...
__delay_ms(30);
if (BP == 1){
etat_Bp = 1;
ledR = 1;
}
}
if (etat_Bp == 1 && (BP == 0))
{
unite ++;
etat_Bp = 0;
ledR = 0;
__delay_ms(30);
}
}
Erreur Programme LED + BP PIC16F18345
Erreur Programme LED + BP PIC16F18345
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
attention au niveau logique !
BP appuyé = niveau zero
il faut aussi initialiser le point de depart sur un etat reel possible .
etat_Bp=0;
BP appuyé = niveau zero
il faut aussi initialiser le point de depart sur un etat reel possible .
etat_Bp=0;
Code : Tout sélectionner
// init au depart !
etat_Bp = 0;
.. etc ..
while(1) // boucle infinie
{
if ( (etat_Bp == 0) && (BP == 0) // Si le bouton est appuyé => niveau 0 !
{
__delay_ms(30); // attend la fin des rebons mecaniques
if (BP == 0) // on confirme ;, il est appuyé !
{
etat_Bp = 1;
ledR = 1;
}
} // if
if (etat_Bp == 1 && (BP == 1)) // BP relaché, tiré au +VCC par Pull up
{
__delay_ms(30); // attend la fin des rebons mecaniques
if (BP == 1) // il est bien relaché
{
etat_Bp = 0;
unite ++;
ledR = 0;
}
} //if
} //while
.. etc
Erreur Programme LED + BP PIC16F18345
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
attention au niveau logique !
BP appuyé = niveau zero
il faut aussi initialiser le point de depart sur un etat reel possible .
etat_Bp=0;
du rebond sur mon clavier !
BP appuyé = niveau zero
il faut aussi initialiser le point de depart sur un etat reel possible .
etat_Bp=0;
Code : Tout sélectionner
// init au depart !
etat_Bp = 0;
.. etc ..
while(1) // boucle infinie
{
if ( (etat_Bp == 0) && (BP == 0) // Si le bouton est appuyé => niveau 0 !
{
__delay_ms(30); // attend la fin des rebons mecaniques
if (BP == 0) // on confirme ;, il est appuyé !
{
etat_Bp = 1;
ledR = 1;
}
} // if
if (etat_Bp == 1 && (BP == 1)) // BP relaché, tiré au +VCC par Pull up
{
__delay_ms(30); // attend la fin des rebons mecaniques
if (BP == 1) // il est bien relaché
{
etat_Bp = 0;
unite ++;
ledR = 0;
}
} //if
} //while
.. etc
du rebond sur mon clavier !
Erreur Programme LED + BP PIC16F18345
Erreur Programme LED + BP PIC16F18345
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Le hic c'est qu'on a l'impression d'avoir seulement la moitié des éléments à la vue de tes photos de la carte .
Sur ton BP il faut aussi un R de Pull UP ? je ne la vois pas sur le schéma ? est elle activée en interne ?
AS tu fais clignoter cette LED au départ , sans appui sur le BP pour vérifier que ton programme tourne bien? que tu OSC est bon ? que ta LED est bien branchée ?
Pas de souci on devrait réussir à faire clignoter une LED quand même
Sur ton BP il faut aussi un R de Pull UP ? je ne la vois pas sur le schéma ? est elle activée en interne ?
AS tu fais clignoter cette LED au départ , sans appui sur le BP pour vérifier que ton programme tourne bien? que tu OSC est bon ? que ta LED est bien branchée ?
Pas de souci on devrait réussir à faire clignoter une LED quand même
Erreur Programme LED + BP PIC16F18345
Erreur Programme LED + BP PIC16F18345
Erreur Programme LED + BP PIC16F18345
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
jo7 a écrit :Source du message On est en 5V en et en appuyant sur le bouton --> 0V.
Donc :
Code : Tout sélectionner
while(1) // boucle infinie
{
if (BP == 0){ // Si le bouton est appuyé ...
__delay_ms(30);
if (BP == 0){
etat_Bp = 1;
ledR = 1;
}
}
if (etat_Bp == 1 && (BP == 1))
{
unite ++;
etat_Bp = 0;
ledR = 0;
}
}
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 49 invités