PIC 18F452 creer une interruption
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

PIC 18F452 creer une interruption



  1. #1
    invite4828afd1

    PIC 18F452 creer une interruption


    ------

    bonjour....

    j'utilise un PIC 18F452.
    Dans mon utilisation le PORT RB0 est en entrée et le port RB1 en sortie.

    sur RBO est branche un bouton poussoir.Je voudrais simplement lors de l'appui sur le bouton poussoir générer une interruption (vecteur 08) et chnager l'etat de la led (allumer>éteinte ou éteinte >allumé )
    L'interruption fonctionne bien mais l'etas de la led ne bouge pas malgré l'appuis sur le bouton

    voila mon code ..


    #include <p18F452.h>
    #include <delays.h>
    #include <portb.h>
    #pragma config WDT = OFF
    void inter2(void) ;





    #pragma code HightVector=0x08
    void atInterrupthigh(void)
    {
    _asm GOTO inter2 _endasm
    }
    #pragma code



    #pragma interlow vect08
    void inter2()
    {

    INTCONbits.RBIF = 0;
    PORTBbits.RB1 =!PORTBbits.RB1;
    }



    void main(void)

    {
    TRISBbits.TRISB0=1;
    TRISBbits.TRISB1=0;
    RCONbits.IPEN=1;// Interruption prioritaires
    INTCONbits.GIE=1;
    OpenRB0INT (PORTB_CHANGE_INT_ON & /* enable the RB0/INT0 interrupt */
    PORTB_PULLUPS_ON & /* configure the RB0 pin for input */
    FALLING_EDGE_INT);
    INTCONbits.RBIF = 0;

    while(1)
    {
    }

    }

    il manque un truc ??

    -----

  2. #2
    invite4828afd1

    Re : PIC 18F452 creer une interruption

    jai modifier le code


    #include <p18F452.h>
    #include <delays.h>

    #pragma config WDT = OFF
    void inter2(void) ;





    #pragma code HightVector=0x08
    void atInterrupthigh(void)
    {
    _asm GOTO inter2 _endasm
    }
    #pragma code



    #pragma interlow vect08
    void inter2()
    {

    PORTBbits.RB1=!PORTBbits.RB1;
    INTCONbits.INT0IF = 0;
    }
    void main(void)

    {
    ;
    TRISBbits.TRISB0=1;
    TRISBbits.TRISB1=0;
    PORTBbits.RB1 = 0;

    RCONbits.IPEN=1;// Interruption prioritaires
    INTCONbits.INT0IE= 1;
    INTCONbits.GIE=1;
    INTCONbits.INT0IF = 0;

    INTCON2bits.RBPU = 0; // ==> pull up sur le portB
    INTCON2bits.INTEDG0 = 0 ; //==> front descendant


    while(1)
    {
    }

    }

    mais lorsque je rappuit sur RB0 la led ne s'eteint pas ....


    quelqu'un a une idee?

    merci

  3. #3
    invite4828afd1

    Re : PIC 18F452 creer une interruption

    eux excusez moi.. je me suis trompe..

    au demmarrage led eteinte

    appuis sur RBO le pic rentre bien en interruption la led sallume

    par contre si je rappui...rien ne se passe
    et la est le probleme..

  4. #4
    invite5637435c

    Re : PIC 18F452 creer une interruption

    Bonsoir,

    faut avouer qu'avec une syntaxe pareil pour les interruptions(je suppose que c'est du CCS ) c'est vraiment imbitable, désolé.

    On a une déclaration assembleur dans l'interruption haute qui fait appel à la fonction inter2 qui est définie dans l'interruption basse, ... du charabia de C pour moi.
    Sans connaitre ton compilo, et son fonctionnement qui à l'air particulier comparé à ceux que je connais difficile de t'aider.
    Bon courage.

  5. A voir en vidéo sur Futura
  6. #5
    invite4828afd1

    Re : PIC 18F452 creer une interruption

    alors apres test sur carte reel et simulation temps reels...
    le probleme est le suivant

    l'interruption est detectee...la led sallume...
    mais si je veux detecter une autre "touche" du bouton poussoir en interruption je dois fixer RB1 à 1 et la ca fonctionne

    cependant je bloque dans la syntax finale..comment ecrire tout ca..

  7. #6
    invite5637435c

    Re : PIC 18F452 creer une interruption

    Une dernière idée peut-être:

    lorsque tu appuies il se peut que des rebonds te fasse revenir en interruption aussitôt et que tu aies l'impression que rien ne se passe, alors qu'en fait tu réallumes ta led en un pouillème de seconde.
    Essaye de mettre plutôt un flag dans l'interruption que tu récupères dans ton programme principal pour activer ta led, puis une tempo genre 100ms et tu remets le flag à 0.

    Code:
    volatile char flag;
    
    #pragma interlow vect08
    void inter2()
    {
    if(flag==0)  flag = 1;
    
    INTCONbits.INT0IF = 0;
    }
    
    while{
    
    .......
    if(flag == 1)
    {
    Delay_ms(100);
    PORTBbits.RB1 =!PORTBbits.RB1;
    flag=0;
    }
    ......
    }
    @+

  8. #7
    invite4828afd1

    Re : PIC 18F452 creer une interruption

    #include <p18F452.h>
    #include <delays.h>
    #include <portb.h>

    #pragma config WDT = OFF
    void inter2(void) ;





    #pragma code HightVector=0x08
    void atInterrupthigh(void)
    {
    _asm GOTO inter2 _endasm
    }
    #pragma code



    #pragma interlow vect08
    void inter2()
    {



    PORTBbits.RB1 = !PORTBbits.RB1;
    INTCONbits.INT0IF = 0;
    INTCON=0b10010000;

    }
    void main(void)

    {

    TRISBbits.TRISB0=1;
    TRISBbits.TRISB1=0;



    RCONbits.IPEN=1;// Interruption prioritaires
    INTCON=0b10010000;
    //INTCONbits.INT0IE= 1;
    //INTCONbits.GIE=1;
    //INTCONbits.INT0IF = 0;
    //INTCONbits.RBIF = 0;
    //INTCON2bits.RBPU = 0; // ==> pas de pull up sur le portB
    //INTCON2bits.INTEDG0 = 0 ; //==> front descendant
    INTCON2=0b00111010;
    PORTBbits.RB1 = 0;
    while(1)
    {
    }

    }

    Avec ce code en mode simulation temps reel (ISIS) tout fonctionne parfaitement...

    je me suis rendu compte que lorsque le pic rentrait dans une interruption il couper les interruptions...donc en remettant le flag a zero je les reautorise et ca fonctionne..


    seulement sur la carte reel cela ne fonctionne pas...toujours oblige de mettre RB0 a VDD puis ca declenche ....puis VDD puis ca declenche ..
    si je repasse pas le RB0 a vdd reste bloque..

  9. #8
    invite4828afd1

    Re : PIC 18F452 creer une interruption

    le programme fonctionne seulement cest lactivation des pull up interne au port B qui marche pas..

    alors ma question est la suivante

    savez vous activez les pull up interne au port B ?

    Merci

  10. #9
    invite5637435c

    Re : PIC 18F452 creer une interruption

    C'est le bit 7 de INTCON2 qu'il faut mettre à 0.
    Chaque ligne en entrée verra son pull-up activé.
    Mais c'est déjà ce que tu fais sans le savoir:
    Code:
    //INTCON2bits.RBPU = 0; // ==> pas de pull up sur le portB (et bien si)
    et ton flag est bien remis à 0 aussi:
    Code:
    INTCONbits.INT0IF = 0;

Discussions similaires

  1. interruption PIC 18F452
    Par invite4828afd1 dans le forum Électronique
    Réponses: 4
    Dernier message: 23/02/2009, 21h29
  2. 18F452 interruption timmer 0 et changement etat port possible?
    Par invite4828afd1 dans le forum Électronique
    Réponses: 7
    Dernier message: 22/02/2009, 20h04
  3. interruption haute priorite sur 18F452
    Par invite4828afd1 dans le forum Électronique
    Réponses: 2
    Dernier message: 21/02/2009, 15h51
  4. pic 18f452
    Par inviteeab4d8e2 dans le forum Électronique
    Réponses: 14
    Dernier message: 21/11/2008, 22h28
  5. pic 18F452
    Par invite38254ebb dans le forum Électronique
    Réponses: 0
    Dernier message: 01/02/2007, 17h37
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...