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
Question sur l'interruption avec un PIC16F18345
Question sur l'interruption avec un PIC16F18345
Bonjour,
Voici mon code actuel mais le problème qu'il y a c'est que mon bouton poussoir ne fonctionne pas quand j'effectue un appui. Par contre la LED rester allumer.
Voici mon code actuel mais le problème qu'il y a c'est que mon bouton poussoir ne fonctionne pas quand j'effectue un appui. Par contre la LED rester allumer.
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)
// PORT A
#define ICSPDAT RA0 // Port de programmation
#define POWER RA1 // Retour d etat charge batterie
#define MCLR RA3 // Port de programmation
#define Vactiv RA5 // Grille transistor ventilateur
// PORT B
#define ledR RB7 // +LED rouge
// PORT C
#define BP RC5 // Bouton poussoir
#define ON 0 // Led tirée au +VCC
#define OFF 1 // Led tiréé au gnd
//#define _XTAL_FREQ 8000000 // Oscillateur réglé à 8MHz
#include <xc.h>
int count = 0;
void interrupt Interrupt_bp (void)
{
if(( PIE0bits.IOCIE ) && (PIR0bits.IOCIF))
PIR0bits.TMR0IF = 0; // RAZ flag IT
count++;
if (count==76){
count = 0;
ledR = ~ledR;
}
}
void main(void)
{
// Reglages des entrees/sorties
TRISA = 0b00001011; // Choix entrees/sorties
LATA = 0b00000000; // RAZ des ports
ANSELA = 0b00000000; // Choix mode analogique/numerique
WPUA = 0b00000010; // Resistances de pull-up interne
TRISB = 0b00000000; // Choix entrees/sorties
LATB = 0b10000000; // RAZ des ports
ANSELB = 0b00000000; // Choix mode analogique/numerique
WPUB = 0b00000000; // Resistances de pull-up interne
TRISC = 0b00100000; // Choix entrees/sorties
LATC = 0b11000000;; // RAZ des ports
ANSELC = 0b000110000; // Choix mode analogique/numerique
WPUC = 0b00100000; // Resistances de pull-up interne
//Reglage des interuptions
INTCONbits.GIE = 1; // Valide les interruptions generales
INTCONbits.PEIE = 1; // Valide les interruptions peripheriques
INTCONbits.INTEDG = 0; // Interruption sur un front descendant
//Reglage des peripheriques
PIE0bits.TMR0IE = 1; // Valide l'interruption generee par le debordement du Timer0
PIE0bits.IOCIE = 1; // Valide le changement d'etat
PIE0bits.INTE = 1; // Autoise l'interruption sur un peripherique exterieur
PIR0bits.TMR0IF = 0; // RAZ flag IT
PIR0bits.IOCIF = 1; // Activation du front descendant
PIR0bits.INTF = 1; // Detection d'une interruption
while (1){
}
}
Question sur l'interruption avec un PIC16F18345
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
moi, j'ai gardé la vieille , mais tres utile habitude, d'aligner les parentheses
d'autant que mikroC nous fournit une ligne verticale de reperage entre la parenthese ouvrante et fermante
en plus de l'identation.
ça permet de ne pas en oublier ..
void interrupt Interrupt_bp (void)
{
if(( PIE0bits.IOCIE ) && (PIR0bits.IOCIF))
{
PIR0bits.TMR0IF = 0; // RAZ flag IT
count++;
if (count>75) // was count==76 , c'est mieux de tester superieur que strictement egal , meme si ça marche dans ce cas là
{
count = 0;
ledR = ~ledR;
}
}
nota pour le webmaster:
je n'ai pas utilisé QUOTE , car on ne peut pas surligner ou changer la couleur dans du code entre quote..
à moins qu'il y ait un autre moyen ?
d'autant que mikroC nous fournit une ligne verticale de reperage entre la parenthese ouvrante et fermante
en plus de l'identation.
ça permet de ne pas en oublier ..
void interrupt Interrupt_bp (void)
{
if(( PIE0bits.IOCIE ) && (PIR0bits.IOCIF))
{
PIR0bits.TMR0IF = 0; // RAZ flag IT
count++;
if (count>75) // was count==76 , c'est mieux de tester superieur que strictement egal , meme si ça marche dans ce cas là
{
count = 0;
ledR = ~ledR;
}
}
nota pour le webmaster:
je n'ai pas utilisé QUOTE , car on ne peut pas surligner ou changer la couleur dans du code entre quote..
à moins qu'il y ait un autre moyen ?
Question sur l'interruption avec un PIC16F18345
Question sur l'interruption avec un PIC16F18345
Question sur l'interruption avec un PIC16F18345
Question sur l'interruption avec un PIC16F18345
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Pourquoi armer l'interuuption TIMER0 ..
le MCU va aller sans arret dans l'interrupt
puisque TMR0IF ne sera pas desarmé ...
PIE0bits.TMR0IE = 0;
comment est cablé ton BP sur RC5 ?
tu as choisi Front descendant
le BP doit etre relié au 0V d'un coté et au +5V de l'autre via une R pullup de quelques Ko ( 4,7K par ex.)
le MCU va aller sans arret dans l'interrupt
puisque TMR0IF ne sera pas desarmé ...
PIE0bits.TMR0IE = 0;
comment est cablé ton BP sur RC5 ?
tu as choisi Front descendant
le BP doit etre relié au 0V d'un coté et au +5V de l'autre via une R pullup de quelques Ko ( 4,7K par ex.)
Question sur l'interruption avec un PIC16F18345
Question sur l'interruption avec un PIC16F18345
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
R pullup à rajouter
attention à ce genre de Bouton Poussoir
les pins sont reliees 2 par 2
si le BP est mal positionné ( à 90° pres) il est en court-circuit
sinon tu peux mettre en serie une led ,
comme ça , tu voit bien si ton BP est actionné ou pas
attention à ce genre de Bouton Poussoir
les pins sont reliees 2 par 2
si le BP est mal positionné ( à 90° pres) il est en court-circuit
sinon tu peux mettre en serie une led ,
comme ça , tu voit bien si ton BP est actionné ou pas
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 36 invités