Problème d'interruption compilateur C18
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Problème d'interruption compilateur C18



  1. #1
    invite4e24a71d

    Problème d'interruption compilateur C18


    ------

    Bonjour,

    J'ai écrit un début de code utilisant le Timer1 sur un PIC18F458 cadencé à 40 MHz, mais je n'arrive pas à déclencher l'interruption du timer...
    Mon timer déborde au bout de 10000 impulsions d'horloge, donc ma Led devrait changer d'état tout les 500 ms... Mais rien ne se passe, j'ai pourtant suivi les divers exemples trouver sur internet, et dans le mode d'emploi du compilateur.

    Code:
    #include <p18f458.h>
    #include <p18cxxx.h>
    #include "config_PIC.h"
    #include "config_PORT.h"
    
    double counttmp;
    
    void timer1_init(void){
        T1CON = 0x05;
        TMR1H = 0xD8;
        TMR1L = 0xF0;
        PIR1bits.TMR1IF = 0;
    }
    
    //________________________________________________________________
    void timer1_isr (void);
    #pragma code address_it=0x18
    void low_interrupt (void){
        _asm GOTO timer1_isr _endasm
    }
    #pragma code
    
    
    #pragma interrupt timer1_isr
    void timer1_isr(){
        counttmp++;
        if(counttmp==10000){
            counttmp=0;
            L_LED_C0=!P_LED_C0;
            PIR1bits.TMR1IF = 0;   
        }
    }
    
    void main (){
    
    counttmp = 0;
    timer1_init();
    initPORT();
       while (1){
            L_LED_CPU = 1;
        }
    }

    -----

  2. #2
    invite4e24a71d

    Re : Problème d'interruption compilateur C18

    Je tient à préciser que mes IO fonctionne parfaitement.

  3. #3
    invite830075ec

    Re : Problème d'interruption compilateur C18

    salut, regarde du côté du registre INTCON

  4. #4
    invite4e24a71d

    Re : Problème d'interruption compilateur C18

    Hello,

    Depuis j'ai essayer quelque truc, et j'ai donc trouver les INTCON(X)
    Je les ai configurer comme ci dessous, mais cela ne fonctionne tjs pas...

    Code:
    INTCON = 0xE4;
        INTCON2 = 0x84;
        INTCON3 = 0x00;

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

    Re : Problème d'interruption compilateur C18

    C'est pas INTCON (réservé au timer 0), c'est PIE1 qu'est interessant ....

  7. #6
    invite4e24a71d

    Re : Problème d'interruption compilateur C18

    J'ai tout configuré dans la foulée ^^

    PIE1 = 0x03;

    Mais rien ne clignote encore...

  8. #7
    invite830075ec

    Re : Problème d'interruption compilateur C18

    Il faut déclarer la variable counter en volatile, et prends un int plutôt qu'un double.
    Pourquoi remettre à zéro le flag PIR1bits.TMR1IF 1 fois sur 10000 ?
    Il faut le faire à chaque passage dans la routine d'interruption

  9. #8
    invite4e24a71d

    Re : Problème d'interruption compilateur C18

    En fait c'est 500 et non 10000, mais cela ne tient pas sur un int ?

    Oui c'est vrai que le reset du flag n'est pas au bon endroit, mais cela ne marche tjs pas... Je ne voit plus rien d'incohérent moi...

    Code:
    #include <p18f458.h>
    #include <p18cxxx.h>
    #include "config_PIC.h"
    #include "config_PORT.h"
    
    double counttmp;
    
    void timer1_init(void){
        INTCON = 0xE4;
        INTCON2 = 0x84;
        INTCON3 = 0x00;
    
        PIE1 = 0x03;
        PIE2 = 0x02;
        PIE3 = 0x00;
        IPR1 = 0x03;
        IPR2 = 0x02;
        IPR3 = 0x00;
        RCON = 0x8F;
    
    
        T1CON = 0x05;
        TMR1H = 0xD8;
        TMR1L = 0xF0;
        PIR1bits.TMR1IF = 0;
    }
    
    //________________________________________________________________
    void timer1_isr (void);
    #pragma code address_it=0x18
    void low_interrupt (void){
        _asm GOTO timer1_isr _endasm
    }
    #pragma code
    
    
    #pragma interrupt timer1_isr
    void timer1_isr(){
        PIR1bits.TMR1IF = 0;
        counttmp++;
        if(counttmp==500){
            counttmp=0;
            L_LED_C0=!P_LED_C0;   
        }
    }
    
    void main (){
    
    counttmp = 0;
    timer1_init();
    initPORT();
       while (1){
            L_LED_CPU = 1;
        }
    }

  10. #9
    invite830075ec

    Re : Problème d'interruption compilateur C18

    Commence simplement sans toucher à IPEN et RCON

    pour le compteur -> volatile unsigned int counttmp; // 0 à 65535
    La routine d'interruption doit être implantée en 0x08
    Ensuite INTCON à 0xc0, PIE1 à 0x01, réglage du timer1, c'est tout

  11. #10
    invite4e24a71d

    Re : Problème d'interruption compilateur C18

    Ca marche =)
    Pas la bonne fréquence de clignotement, mais je vais revoir ça...

    Que se soit en 0x08 ou 0x18 ça change quoi ?

  12. #11
    invite830075ec

    Re : Problème d'interruption compilateur C18

    When the IPEN bit is cleared (default state), the
    interrupt priority feature is disabled and interrupts are
    compatible with PICmicro® mid-range devices. In
    Compatibility mode, the interrupt priority bits for each
    source have no effect. The PEIE bit (INTCON register)
    enables/disables all peripheral interrupt sources. The
    GIE bit (INTCON register) enables/disables all interrupt
    sources. All interrupts branch to address 000008h in
    Compatibility mode

  13. #12
    invite4e24a71d

    Re : Problème d'interruption compilateur C18

    Et si je veut mettre deux timers, un qui flag toute le ms et l'autre tout les 50 ns, je doit gérer les priorités par contre ?

  14. #13
    invite830075ec

    Re : Problème d'interruption compilateur C18

    oui, lis le cours Bigonoff sur les 18F

Discussions similaires

  1. MPLABX et Compilateur C18 sur Mac
    Par invite00e5225f dans le forum Électronique
    Réponses: 3
    Dernier message: 15/06/2011, 10h37
  2. Compilateur C18 sprintf
    Par invitef4b539ee dans le forum Électronique
    Réponses: 6
    Dernier message: 11/06/2011, 15h02
  3. Compilateur C18 et lib LCD !!
    Par invite25df009a dans le forum Électronique
    Réponses: 24
    Dernier message: 22/05/2010, 16h17
  4. Problème Librairie XLCD - compilateur C18
    Par invite3c35244f dans le forum Électronique
    Réponses: 27
    Dernier message: 08/06/2009, 08h00
  5. PIC 18 : 2 niveaux d'interruption en C18
    Par invite4b9b54af dans le forum Électronique
    Réponses: 0
    Dernier message: 09/04/2009, 09h16
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...