Problème d'interruption sur PIC18F458
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Problème d'interruption sur PIC18F458



  1. #1
    petitnul12

    Problème d'interruption sur PIC18F458


    ------

    Re-Bonsoir,

    Voila, j'essaye de mettre en place un interruption sur ma carte équipé d'un PIC18F458, que je programme avec MPLabX et compile avec XC8.
    Seulement, voila, rien ne marche, et j'ai du mal à trouver à quel niveau.. J'ai déjà mis en place le même code dans des autres PIC et tout allait bien.
    A force de tout relire, je doit passer a coté de quelque chose, mais je ne voit pas ou =)
    (J'ai tester un autre PIC, et c'est pareil)


    main.c
    Code:
    #include <xc.h>        /* XC8 General Include File */
    #include <stdint.h>        /* For uint8_t definition */
    #include <stdbool.h>       /* For true/false definition */
    #include "system.h"        /* System funct/params, like osc/peripheral config */
    #include "user.h"          /* User funct/params, such as InitApp */
    
    int count;
    int tps_fonc;
    
    void interrupt isr(void)
    {
        if(TMR1IF==1)
        {
            TMR1H = 0xD8;
            TMR1L = 0xF0;
            TMR1IF = 0;
            count++;
            tps_fonc++;
            if(count==500)
            {
                L_LED_1 = !P_LED_1;
                L_LED_2 = !P_LED_2;
                L_LED_3 = !P_LED_3;
                count = 0;
            }
        }
    }
    
    void InitTimer1(void)
    {
        INTCON = 0xC0;
        T1CON = 0x01;
        PIE1 = 0x01;
        TMR1H = 0xD8;
        TMR1L = 0xF0;
        TMR1IF = 0;
    }
    
    void main(void)
    {
        InitApp();
        InitTimer1();
    
        while(1)
        {
        }
    }
    user.h
    Code:
    #ifndef USER_H
    #define USER_H
    
    #include <xc.h>
    #include <stdint.h>         /* For uint8_t definition */
    #include <stdbool.h>        /* For true/false definition */
    
    #define D_LED_1 TRISEbits.TRISE0
    #define P_LED_1 PORTEbits.RE0
    #define L_LED_1 LATEbits.LATE0
    
    #define D_LED_2 TRISEbits.TRISE1
    #define P_LED_2 PORTEbits.RE1
    #define L_LED_2 LATEbits.LATE1
    
    #define D_LED_3 TRISEbits.TRISE2
    #define P_LED_3 PORTEbits.RE2
    #define L_LED_3 LATEbits.LATE2
    
    #define INPUT 1
    #define OUTPUT 0
    #define ON 1
    #define OFF 0
    
    void InitApp(void);         /* I/O and Peripheral Initialization */
    
    #endif
    user.c
    Code:
    #include <xc.h>         /* XC8 General Include File */
    #include <stdint.h>         /* For uint8_t definition */
    #include <stdbool.h>        /* For true/false definition */
    #include "user.h"
    
    void InitApp(void)
    {
        ADCON1 = 0x00000110;
        D_LED_1 = OUTPUT;
        L_LED_1 = OFF;
        D_LED_2 = OUTPUT;
        L_LED_2 = ON;
        D_LED_3 = OUTPUT;
        L_LED_3 = ON;
    }
    Thanks !

    -----

  2. #2
    petitnul12

    Re : Problème d'interruption sur PIC18F458

    Impossible d'utiliser le port A en entrée... Pourtant je le configure bien en I/O dans ADCON1

    Le quartz peut t'il être HS ?

  3. #3
    petitnul12

    Re : Problème d'interruption sur PIC18F458

    Bon dans le doute je l'ai changer =)
    Et c'est toujours la même chose... A priori il rentre une fois dans la routine d’interruption, mais une seule fois =(

  4. #4
    jls28

    Re : Problème d'interruption sur PIC18F458

    Salut,

    Je peux me tromper mais
    quand y a un flag TMR1IF
    il existe généralement aussi un flag TMR1IE
    qui n'est pas activé au depart.

    Souvent il y a aussi un flag TMR1ON à activer.

    Bref faut lire les docs...

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

    Re : Problème d'interruption sur PIC18F458

    Le TMR1IE est mis à 1 dans le PIE1
    Le TMR1ON est mis à 1 dans le T1CON

    A trop lire les doc, on doit passer à coté de quelque chose..

  7. #6
    petitnul12

    Re : Problème d'interruption sur PIC18F458

    Certain registre peuvent bloquer ce genre d'action ? J'ai regarder dans la datasheet, tout ceux qui sont associés au Timer1, j'ai bien tout branché, mais rien...

    Le µC ne passe qu'une fois dans la routine d’interruption. =,(

  8. #7
    petitnul12

    Re : Problème d'interruption sur PIC18F458

    Soucis réglé.
    Il semblerait que se soit un problème de "rapidité" du PIC, et comme les deux étapes se passe en même temps ça coince, dans le jargon c'est le "RMW effect"
    Il suffit de faire l'étape de lecture et d'écriture séparément, avec un bête if =)

Discussions similaires

  1. Problème d'interruption sur 16f876
    Par jc_renaud dans le forum Électronique
    Réponses: 5
    Dernier message: 10/09/2012, 08h32
  2. Problème Timer0 PIC18f458 pour compte à rebours
    Par shindra dans le forum Électronique
    Réponses: 10
    Dernier message: 21/08/2012, 16h46
  3. Probleme d'interruption sur PIC 18F4420
    Par invite919cb150 dans le forum Électronique
    Réponses: 2
    Dernier message: 09/06/2008, 08h45
  4. Réponses: 2
    Dernier message: 23/04/2007, 12h32
  5. Probleme INT0 PIC18f458
    Par invite4109377f dans le forum Électronique
    Réponses: 1
    Dernier message: 11/05/2006, 14h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.