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 ---
Forum général sur le langage C !

Modérateur : Jérémy

Question sur l'interruption avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#11 Message par jo7 » ven. 22 juin 2018 10:51 lien vers la Data-Sheet : Cliquez ici

Oui voilà quelle serait alors la fonction d'interruption avec toutes informations si vous avez une idée?

Question sur l'interruption avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#12 Message par jo7 » ven. 22 juin 2018 13:56 lien vers la Data-Sheet : Cliquez ici

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.

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
Avatar de l’utilisateur
Expert
Expert
Messages : 1135
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#13 Message par paulfjujo » ven. 22 juin 2018 15:47 lien vers la Data-Sheet : Cliquez ici

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.
:sifflotte: ç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 ?
Aides toi, le ciel ou Fantastpic t'aideras

Question sur l'interruption avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#14 Message par jo7 » ven. 22 juin 2018 15:58 lien vers la Data-Sheet : Cliquez ici

Oui cela fais exactement la même chose je ne comprends pas pourquoi le bouton ne fais rien. Faut-il ajouter dans la fonction interruption le bouton ?

Question sur l'interruption avec un PIC16F18345
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1135
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#15 Message par paulfjujo » ven. 22 juin 2018 16:21 lien vers la Data-Sheet : Cliquez ici

polarisé par la parenthese, j'avis meme pas vu ça:

tu ne RAZ pas le bon flag interrupt !
remplace
PIR0bits.TMR0IF = 0; // RAZ flag IT
par PIR0bits.IOCIF=0;
Aides toi, le ciel ou Fantastpic t'aideras

Question sur l'interruption avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#16 Message par jo7 » ven. 22 juin 2018 16:30 lien vers la Data-Sheet : Cliquez ici

J'ai effectué ce changement à l'instant. La LED clignote très lentement. J'observe sur l'oscilloscope un signal carré quand la LED est allumée et éteinte --> 5V.
Il manque pas grand chose je pense il faut juste adapter pour activer le bouton poussoir.

Question sur l'interruption avec un PIC16F18345
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1135
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#17 Message par paulfjujo » ven. 22 juin 2018 16:50 lien vers la Data-Sheet : Cliquez ici

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.)
Aides toi, le ciel ou Fantastpic t'aideras

Question sur l'interruption avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#18 Message par jo7 » ven. 22 juin 2018 17:10 lien vers la Data-Sheet : Cliquez ici

35955062_1614810195294815_3947559816766947328_n.jpg

Mon BP est câblé de la façon suivante :
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Question sur l'interruption avec un PIC16F18345
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1135
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#19 Message par paulfjujo » ven. 22 juin 2018 17:30 lien vers la Data-Sheet : Cliquez ici

R pullup à rajouter
Image1.jpg


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
Image2.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aides toi, le ciel ou Fantastpic t'aideras

Question sur l'interruption avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#20 Message par jo7 » ven. 22 juin 2018 22:39 lien vers la Data-Sheet : Cliquez ici

Bonsoir,

Je suis obligé de rajouter cette résisance de pull up ?
Une fois que j'aurais mis cette résistance, il faudra modifier le programme?


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité