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
    petitnul12

    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
    petitnul12

    Re : Problème d'interruption compilateur C18

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

  3. #3
    satinas

    Re : Problème d'interruption compilateur C18

    salut, regarde du côté du registre INTCON

  4. #4
    petitnul12

    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
    satinas

    Re : Problème d'interruption compilateur C18

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

  7. #6
    petitnul12

    Re : Problème d'interruption compilateur C18

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

    PIE1 = 0x03;

    Mais rien ne clignote encore...

  8. #7
    satinas

    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
    petitnul12

    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
    satinas

    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
    petitnul12

    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
    satinas

    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
    petitnul12

    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
    satinas

    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 peter pan666 dans le forum Électronique
    Réponses: 3
    Dernier message: 15/06/2011, 09h37
  2. Compilateur C18 sprintf
    Par invitef4b539ee dans le forum Électronique
    Réponses: 6
    Dernier message: 11/06/2011, 14h02
  3. Compilateur C18 et lib LCD !!
    Par kronanberg dans le forum Électronique
    Réponses: 24
    Dernier message: 22/05/2010, 15h17
  4. Problème Librairie XLCD - compilateur C18
    Par jorg1n dans le forum Électronique
    Réponses: 27
    Dernier message: 08/06/2009, 07h00
  5. PIC 18 : 2 niveaux d'interruption en C18
    Par vadom35 dans le forum Électronique
    Réponses: 0
    Dernier message: 09/04/2009, 08h16
Découvrez nos comparatifs produits sur l'informatique et les technologies.