Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

interruption pic 18f4520



  1. #1
    bird12358

    interruption pic 18f4520


    ------

    Bonjour
    j'essaye depuis quelque temps que faire fonctionner un pic 18f4520 en interruption mais j'ai quelques probleme a y parvenir.

    Voici le programme:

    #include <p18f4520.h>
    int var=0;
    void high_isr(void);

    #pragma config OSC = HS // choisir le oscillateur HS


    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void)
    {
    _asm goto high_isr _endasm
    }

    void high_isr(void)
    {
    if(INTCONbits.INT0IF==1)
    {
    if(var==0)
    {
    var=1;
    PORTC=0b01111111;
    INTCON2bits.INTEDG0=0;
    }else{
    var=1;
    PORTC=0b11111110;
    INTCON2bits.INTEDG0=1;
    }

    }
    }
    void main (void)
    {

    int i;
    TRISA=0b11111111; //configure port A en entrée
    TRISB=0b11111111; //configure port B en sortie
    TRISC=0b00000000;
    PORTC=0b00000000;

    INTCON2bits.INTEDG0=1;//interruption0 sur front montant
    INTCONbits.RBIE=1; //enable PORTB
    while(1)
    {
    /* PORTBbits.RB0=0;
    for(i=0;i<10000;i++);
    PORTBbits.RB0=1;
    for(i=0;i<10000;i++);

    */
    }


    }


    Quelqu'un sait ce qu'il faudrait faire ?
    Certainement que j'ai oublié un registre ou autre.
    D'avance merci.

    -----

  2. Publicité
  3. #2
    sdec25

    Re : interruption pic 18f4520

    Salut.
    Il manque 2 infos :
    Quelle source d'interruption veux-tu utiliser ? INTEDG et RBIE ce n'est pas la même interruption.
    Quel est le problème ?

  4. #3
    bird12358

    Re : interruption pic 18f4520

    En fait je voudrais utiliser l'interruption en RB0.Je pensais que RBIE c"'etais pôur valider en interruption le port B enfin les 3 1er pin du port B.Le probleme c'est que lorsque je met le programme c'est qu'il ne se passe rien.

  5. #4
    sdec25

    Re : interruption pic 18f4520

    Il faut activer les interruptions, et en particulier l'interruption sur RB0 :
    Code:
    INTCONbits.INT0IE = 1; // activer irq sur changement RB0
    INTCONbits.GIEH = 1; // activer les interruptions
    Ne pas oublier d'effacer le drapeau d'interruption INT0IF avant de sortie de l'interruption.

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    bird12358

    Re : interruption pic 18f4520

    Euh nan ca fonctionne tjrs pas.Par contre le port B il faut faire un TRISB=0b00000000?

  9. #6
    sdec25

    Re : interruption pic 18f4520

    Ton programme démarre au moins ?
    Tu peux mettre manuellement INT0IF à 1 pour déclencher l'interruption.

    TRISB = 0 ça met tous les RB en sortie.

  10. Publicité
  11. #7
    bird12358

    Re : interruption pic 18f4520

    oui qd je met INT0IF=1 ca marche une fois mais apres il ne detecte plus rien.

  12. #8
    sdec25

    Re : interruption pic 18f4520

    Citation Envoyé par bird12358 Voir le message
    oui qd je met INT0IF=1 ca marche une fois mais apres il ne detecte plus rien.
    C'est que RB0 ne change pas d'état.
    Sinon tu peux reposter ton code ?

  13. #9
    bird12358

    Re : interruption pic 18f4520

    #include <p18f4520.h>
    int var=1;
    void high_isr(void);

    #pragma config OSC = HS // choisir le oscillateur HS


    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void)
    {
    _asm goto high_isr _endasm
    }

    void high_isr(void)
    {
    if(INTCONbits.INT0IF==1)
    {
    if(var==0)
    {
    var=1;
    PORTD=0b01111111;
    //INTCON2bits.INTEDG0=0;
    }else{
    var=0;
    PORTD=0b11111110;
    //INTCON2bits.INTEDG0=1;
    }

    }
    INTCONbits.INT0IF=0;


    }
    void main (void)
    {

    int i;
    TRISA=0b11111111; //configure port A en entré
    TRISB=0; //configure port B en entré
    TRISD=0b00000000;
    PORTD=0b00000000;

    INTCONbits.INT0IE = 1; // activer irq sur changement RB0
    INTCONbits.GIEH = 1; // activer les interruptions
    INTCONbits.INT0IF=1;

    while(1)
    {
    }
    }

  14. #10
    sdec25

    Re : interruption pic 18f4520

    Pourquoi tu as mis RB0 en sortie ?

  15. #11
    bird12358

    Re : interruption pic 18f4520

    Citation Envoyé par sdec25 Voir le message
    Ton programme démarre au moins ?
    Tu peux mettre manuellement INT0IF à 1 pour déclencher l'interruption.

    TRISB = 0 ça met tous les RB en sortie.

    Parce que je croyais que tu me l'avez demandé et dans le cas ou je les met en entré ca marche pas non plus.

  16. #12
    sdec25

    Re : interruption pic 18f4520

    Citation Envoyé par bird12358 Voir le message
    Parce que je croyais que tu me l'avez demandé
    non je répondais à ta question.

    dans le cas ou je les met en entré ca marche pas non plus.
    L'interruption INT0 fonctionne sur un seul front. Il faut donner le front dans INTEDG0.

  17. Publicité
  18. #13
    bird12358

    Re : interruption pic 18f4520

    J'ai testé aussi mais ca ne marche toujour pas.Ca commence a me prendre la tete lol.
    Je met en fichier le teste que je fait sous proteus.
    Images attachées Images attachées

  19. #14
    sdec25

    Re : interruption pic 18f4520

    Il faut que tu choisisses les entrées analogiques et logiques sur le PIC.
    On peut le faire automatiquement avec une directive pragma. Dans l'aide du 18F4520 :
    PORTB A/D Enable bit:
    PBADEN = OFF : PORTB<4:0> pins are configured as digital I/O on Reset
    PBADEN = ON : PORTB<4:0> pins are configured as analog input channels on Reset
    On peut le faire sans la directive pragma mais en modifiant un registre.
    Page 226 de la datasheet : ADCON1.PCFG définit les entrées analogiques (de 0000 à 1111).
    The POR value of the PCFG bits depends on the value of the PBADEN Configuration bit. When
    PBADEN = 1, PCFG<2:0> = 000; when PBADEN = 0, PCFG<2:0> = 111.
    Et comme tu as relié les 3 broches RB0 -> 3 il faut qu'elles soient en entrées les 3.

  20. #15
    bird12358

    Re : interruption pic 18f4520

    Rebonjour
    merci encore de ta reponse.J'ai reesayé avec plein de parametre mais ca ne veut decidemment pas fonctionner.

  21. #16
    sdec25

    Re : interruption pic 18f4520

    Citation Envoyé par bird12358 Voir le message
    J'ai reesayé avec plein de parametre mais ca ne veut decidemment pas fonctionner.
    Si tu espères de l'aide il faut en dire plus que "ça ne veut pas fonctionner" :
    code, schéma (s'ils ont changé), symptômes.

  22. #17
    bird12358

    Re : interruption pic 18f4520

    Donc voila le nouveau code:
    #include <p18f4520.h>
    int var=1;
    void high_isr(void);

    #pragma config OSC = HS // choisir le oscillateur HS


    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void)
    {
    _asm goto high_isr _endasm
    }

    void high_isr(void)
    {
    if(INTCONbits.INT0IF==1)
    {
    if(var==0)
    {
    var=1;
    PORTD=0b01111111;
    //INTCON2bits.INTEDG0=0;
    }else{
    var=0;
    PORTD=0b11111110;
    //INTCON2bits.INTEDG0=1;
    }

    }
    INTCONbits.INT0IF=0;


    }
    void main (void)
    {

    int i;
    TRISA=0b11111111; //configure port A en entré
    TRISB=0; //configure port B en entré
    PORTBbits.INT0=1;
    TRISD=0b00000000;
    PORTD=0b00000000;

    INTCONbits.INT0IE = 1; // activer irq sur changement RB0
    INTCONbits.GIEH = 1; // activer les interruptions
    INTCONbits.INT0IF=1;

    while(1)
    {
    }
    }

    J'ai mis le portB en interruption par contre ce que tu me parlais n'est pas present dans les registres(PBADEN ).

  23. #18
    sdec25

    Re : interruption pic 18f4520

    Donc voila le nouveau code:
    Je ne vois pas de différence avec l'ancien, c'est normal que ça ne marche pas.

    Citation Envoyé par bird12358 Voir le message
    par contre ce que tu me parlais n'est pas present dans les registres(PBADEN ).
    ???

  24. Publicité
  25. #19
    bird12358

    Re : interruption pic 18f4520

    ouf.Enfin ca fonctionne. Il fallait changer les registres analogiques
    voila donc le programme:
    #include <p18f4520.h>


    // function prototypes
    void Low_ISR(void);
    void High_ISR(void);


    void intrb0(void)
    {
    //code : eteindre diode .....etc
    INTCONbits.INT0IF = 0; //efface le drapeau d'IT
    }

    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void)
    {
    _asm GOTO High_ISR _endasm
    }

    #pragma code low_vector=0x18
    void interrupt_at_low_vector(void)
    {
    _asm GOTO Low_ISR _endasm
    }

    // code

    #pragma code
    #pragma interruptlow Low_ISR
    void Low_ISR()
    {

    }

    #pragma interrupt High_ISR
    void High_ISR()
    {
    if(INTCONbits.INT0IF)
    {

    PORTC=PORTC +1 ;
    intrb0(); //vérifie frond sur rbo etappel routine interuption
    }
    INTCONbits.GIE = 1; //réautorise toutes les IT démasquées
    }


    void main (void)
    {

    int i;
    LATB =0x0;
    TRISB =0xff;

    TRISC =0x00;
    PORTC=0b00;
    ADCON1 |=0x0f; //toutes les canaux adc en i/o
    ADCON0bits.ADON = 0; // adc module off

    INTCONbits.INT0IE = 1; //Autorise interruption sur rbR0
    INTCON3bits.INT1IF = 0; //efface le drapeau d'IT

    INTCONbits.PEIE = 1; //autorise toutes les IT périfériques démasquées
    INTCONbits.GIE = 1; //réautorise toutes les IT démasquées

    while(1)
    {

    }
    }


    merci encore pour ton aide.

  26. #20
    sdec25

    Re : interruption pic 18f4520

    ok
    Sinon avec PBADEN à OFF, ADCON1 est configuré pour avoir RB<0-4> en logique au démarrage :
    Code:
    #pragma PBADEN = OFF

Discussions similaires

  1. Réseau ferroviaire embarqué -> 4 pic 18F4520 liaison SPI
    Par antoineleclercq150687 dans le forum Électronique
    Réponses: 19
    Dernier message: 07/07/2009, 10h46
  2. PIC 18f4520
    Par cochy dans le forum Électronique
    Réponses: 1
    Dernier message: 18/03/2009, 14h57
  3. memoire flash du PIC 18f4520
    Par Seraph-01 dans le forum Électronique
    Réponses: 2
    Dernier message: 24/06/2008, 10h13
  4. Conversion analogique-numerique pic 18f4520
    Par Mkv dans le forum Électronique
    Réponses: 1
    Dernier message: 17/05/2008, 21h29
  5. Conversion A/D PIC 18F4520
    Par Mkv dans le forum Électronique
    Réponses: 0
    Dernier message: 14/05/2008, 16h23
Découvrez nos comparatifs produits sur l'informatique et les technologies.