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

Problème ICD3 / MPLabX / XC8



  1. #1
    petitnul12

    Problème ICD3 / MPLabX / XC8


    ------

    Bonsoir,


    Voila, j'ai un problème avec je ne sais pas qu'elle maillon de ma chaîne de programmation...

    J'ai fait un programme, XC8 arrive bien à compiler... Quand je lance la programmation avec l'ICD3, les leds de ce dernier clignote tout comme il faut... Mais sur la carte, rien ne se passe, pas même le moindre scintillement de led qui indiquerait un Reset, et l'ancien programme, est tjs présent..

    Je ne comprend pas pourquoi cela ne veut pas marcher... La carte à déja été programmer plusieurs fois, sans aucun soucis (avec MPLab8 et CCS)
    Dans mon précédent poste, il manquait plein de truc, il était tard =)

    Voyez vous un truc manquant ? Je ne voit plus quoi.. J'ai lu la notice du compilateur dans tout les sens =(


    Mon main:

    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;
    
    
    void interrupt isr(void) //Page 190 ou 90
    {
        if(TMR1IF=1)
        {
            TMR1H = 0xD8;
            TMR1L = 0xF0;
            TMR1IF = 0;
            count++;
            if(count==500)
            {
                L_LED_CPU = !P_LED_CPU;
            }
        }
    
    }
    
    void InitTimer1(void)
    {
        INTCON = 0xC0;
        T1CON = 0x01;
        PIE1 = 0x01;
        TMR1H = 0xD8;
        TMR1L = 0xF0;
        TMR1IF = 0;
    }
    
    
    
    
    
    
    void main(void)
    {
        InitApp();
        InitTimer1();
        L_LED_CPU = ON;
    
        while(1)
        {
            
        }
    
    }

    Mon system.h :

    Code:
    #include <xc.h>
    
    #pragma config OSC = HSPLL      // Oscillator Selection bits (HS oscillator with PLL enabled/Clock frequency = (4 x FOSC))
    #pragma config OSCS = OFF       // Oscillator System Clock Switch Enable bit (Oscillator system clock switch option is disabled (main oscillator is source))
    
    // CONFIG2L
    #pragma config PWRT = OFF       // Power-up Timer Enable bit (PWRT disabled)
    #pragma config BOR = ON         // Brown-out Reset Enable bit (Brown-out Reset enabled)
    #pragma config BORV = 25        // Brown-out Reset Voltage bits (VBOR set to 2.5V)
    
    // CONFIG2H
    #pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
    #pragma config WDTPS = 128      // Watchdog Timer Postscale Select bits (1:128)
    
    // CONFIG4L
    #pragma config STVR = ON        // Stack Full/Underflow Reset Enable bit (Stack Full/Underflow will cause Reset)
    #pragma config LVP = OFF        // Low-Voltage ICSP Enable bit (Low-Voltage ICSP disabled)
    
    // CONFIG5L
    #pragma config CP0 = OFF        // Code Protection bit (Block 0 (000200-001FFFh) not code protected)
    #pragma config CP1 = OFF        // Code Protection bit (Block 1 (002000-003FFFh) not code protected)
    #pragma config CP2 = OFF        // Code Protection bit (Block 2 (004000-005FFFh) not code protected)
    #pragma config CP3 = OFF        // Code Protection bit (Block 3 (006000-007FFFh) not code protected)
    
    // CONFIG5H
    #pragma config CPB = OFF        // Boot Block Code Protection bit (Boot Block (000000-0001FFh) not code protected)
    #pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code protected)
    
    // CONFIG6L
    #pragma config WRT0 = OFF       // Write Protection bit (Block 0 (000200-001FFFh) not write protected)
    #pragma config WRT1 = OFF       // Write Protection bit (Block 1 (002000-003FFFh) not write protected)
    #pragma config WRT2 = OFF       // Write Protection bit (Block 2 (004000-005FFFh) not write protected)
    #pragma config WRT3 = OFF       // Write Protection bit (Block 3 (006000-007FFFh) not write protected)
    
    // CONFIG6H
    #pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write protected)
    #pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0001FFh) not write protected)
    #pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write protected)
    
    // CONFIG7L
    #pragma config EBTR0 = OFF      // Table Read Protection bit (Block 0 (000200-001FFFh) not protected from Table Reads executed in other blocks)
    #pragma config EBTR1 = OFF      // Table Read Protection bit (Block 1 (002000-003FFFh) not protected from Table Reads executed in other blocks)
    #pragma config EBTR2 = OFF      // Table Read Protection bit (Block 2 (004000-005FFFh) not protected from Table Reads executed in other blocks)
    #pragma config EBTR3 = OFF      // Table Read Protection bit (Block 3 (006000-007FFFh) not protected from Table Reads executed in other blocks)
    
    // CONFIG7H
    #pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0001FFh) not protected from Table Reads executed in other blocks)

    Mon 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_CPU TRISBbits.TRISB0
    #define P_LED_CPU PORTBbits.RB0
    #define L_LED_CPU LATBbits.LATB0
    
    #define INPUT 1
    #define OUTPUT 0
    
    #define ON 1
    #define OFF 0
    
    void InitApp(void);         /* I/O and Peripheral Initialization */
    
    #endif

    Mon 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)
    {
        D_LED_CPU = OUTPUT;
    }

    -----

  2. Publicité
  3. #2
    Aurélien

    Re : Problème ICD3 / MPLabX / XC8

    Quand on debugge un code, on le simplifie au maximum. Cela veut dire supprimer les IT par exemple.
    Dans ton cas je pense que l'erreur vient simplement du fait que tu n'effaces pas le flag timer en sortant de l'IT. Ce qui fait que l'IT est toujours déclenchée. Ta LED doit clignoter, mais bien plus vite que prévu. Un scope te permettra de voir ça normallement.

    Aurélien

  4. #3
    cedric300

    Re : Problème ICD3 / MPLabX / XC8

    Bonjour,

    void interrupt isr(void) //Page 190 ou 90
    {
    if(TMR1IF=1)
    {
    TMR1H = 0xD8;
    TMR1L = 0xF0;
    TMR1IF = 0;
    count++;
    if(count==500)
    {
    L_LED_CPU = !P_LED_CPU;
    }
    }

    }
    if(TMR1IF=1)
    Essaye
    if(TMR1IF == 1)

    Je pense que ton interruption est mal déclaré
    fait clignoter la led dans ton main sans interruption

    Code:
       if (ledCnt >= 40000) {
          LED = 1 - LED;
          ledCnt = 0;
       }
       ledCnt++;

    A++

  5. #4
    Aurélien

    Re : Problème ICD3 / MPLabX / XC8

    Bien vu cedric, j'avais pas vu que le flag était bien effacé, par contre j'avais pas vu la faute de test

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

    Re : Problème ICD3 / MPLabX / XC8

    L'association de deux logiciels nouvelles moutures tels que MPLABX et XC8 semble poser des soucis à en croire le flot de demandes sur le forum Microchip, les versions de maj sont trop fréquentes pour qu'un débutant s'y plonge... s'en se noyer.

  8. #6
    RISC

    Re : Problème ICD3 / MPLabX / XC8

    Salut petitnul,

    Après 8 posts on sait même pas de quel PIC il s'agit ;=)

    Comme l'a dit Cédric, quand on a des PB il faut faire simple :

    Code:
    while(1)
    {
     LED ON
     DELAI
     LED OFF
     DELAI
    }
    Avant de mettre en cause les outils il faut être sûr de son logiciel...
    Le même projet sous MPLAB 8.xx , C18 et ICD3 n'aurait pas non plus fonctionné ;=)

    a+

    PS pour tester les flags d'interruption : (TMR1IF & TMR1IE) conseillé ...quand tu auras plusieurs interruptions cela deviendra vital
    Dernière modification par gienas ; 11/02/2013 à 23h47. Motif: Réparé balise code incomplète

  9. Publicité
  10. #7
    petitnul12

    Re : Problème ICD3 / MPLabX / XC8

    Bonsoir,

    Alors vous allez me croire si vous voulez, mais sans rien changer à part la RAZ du count quand je fait clignoter ma led, il a fini par fonctionner... J'ai vraiment rien compris. C'est un PIC 18F458
    J'effacais bien le flag du timer, juste avant le clignotement de ma Led ? Ou j'ai encore zapper un truc..

    MPLabX et XC8 sont loin d'être stable.. Elle est belle l'époque de CCS =)

    Hummm je ne comprend pas trop la subtilité du TMR1IE... C'est un bit qui autorise l’interruption ?

  11. #8
    spown

    Re : Problème ICD3 / MPLabX / XC8

    TMR1IE= 1; ( le E pour enable ) activer l'interruption du timer 1

  12. #9
    petitnul12

    Re : Problème ICD3 / MPLabX / XC8

    Oui mais si on c'est un bit d'autorisation, pourquoi le tester ? On doit connaitre son été en toute logique..

  13. #10
    spown

    Re : Problème ICD3 / MPLabX / XC8

    On le teste pas , c'est un genre d'interrupteur logique pour activer l'interruption ( timer dans ton cas). C'est la méthode qui permettre au pic de savoir qu'il a reçu des "données" ou un changement d'état. ( un Timer dans ton exemple ). Par la suite l'interruption génère un drapeau "flag". Pour ceci faut activer le flag et le remettre à zéro à la fin de la routine d'interruption.

  14. #11
    invite03481543

    Re : Problème ICD3 / MPLabX / XC8

    Non c'est une bonne habitude à prendre de tester le bit activation en même temps que le flag de débordement, ainsi en le désactivant temporairement , par exemple dans le programme principal tu agit aussi dans l'interruption où il est testé.
    Exemple: tu dois éxecuter une tâche particulière dans le main, le flag de débordement est mis à 1 mais TMR1IE est mis à 0 donc l'interruption est masquée MAIS pas perdue!
    Une fois ta tâche réalisée tu remetS à 1 TMR1IE.
    Du coup une fois TMR1IE remis à 1 ton interruption peut être exécutée quand TU l'as décidé.

    spown dit la même chose en fait mais avant moi
    Dernière modification par HULK28 ; 13/02/2013 à 18h48.

Discussions similaires

  1. Problème programme sur PIC18, compilateur XC8
    Par petitnul12 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/02/2013, 10h33
  2. MPLAB v8.60 PIC24FJ256GB106 ICD3 - Problème debug
    Par mahady dans le forum Électronique
    Réponses: 0
    Dernier message: 26/04/2012, 15h14
  3. Problème pickit2 et MPLABX.
    Par waghh dans le forum Électronique
    Réponses: 12
    Dernier message: 03/02/2012, 18h12
  4. Probleme avec ICD3
    Par amgab2003 dans le forum Électronique
    Réponses: 12
    Dernier message: 19/01/2011, 22h34
  5. PIC18 + ICD3 ... Problème de liaison
    Par jorg1n dans le forum Électronique
    Réponses: 6
    Dernier message: 03/08/2010, 15h05
Découvrez nos comparatifs produits sur l'informatique et les technologies.