Warning de compilation de PIC et erreur "failed in adress 0000H" ??
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Warning de compilation de PIC et erreur "failed in adress 0000H" ??



  1. #1
    invite86ffa844

    Unhappy Warning de compilation de PIC et erreur "failed in adress 0000H" ??


    ------

    Salut,

    lorseque j'ai compilé mon programme sur PCW, il m'a sorti 3 warning et 0 error:



    puis lorseque j'ai voulu le charger dans le PIC ( placé sur un programmateur) avec ICPROG, avant la fin du chargement , un message d'erreur est sortie m'indiquant que la programmation s'est interrompue à l'adresse 0000h ?? "failed in adress 0000h"


    qu'est ce que je dois faire, j'ai pas compris les 2 premiers warning ?

    seraient-t-ils la cause de l'erreur avec le ICPROG ?

    et merci d'avance pour votre aide !

    voici le code de mon programme :

    Code:
    #include <16F877a.h>
    //#device adc=8
    #use delay(clock=4000000)
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
    
    
    
    #define DEM1      PIN_A0
    #define DEM2      PIN_A1   // pin reliée au démultiplexeur
    #define DEM3      PIN_A2
    #define DEM4      PIN_A3
    #define A4        PIN_A4
    #define A5        PIN_A5
    
    #define TIS       PIN_E0  // pin relié au relais de choix Temp/Isol pour Simplexe
    #define TID       PIN_E1  // pin relié au relais de choix Temp/Isol pour Duplexe
    #define CTD       PIN_E2  // pin relié au relais de choix test de température C1/C2 pour Duplexe
    
    #define R1        PIN_C0  // pin reliée au  relais 1 via l'étage de puissance
    #define R2        PIN_C1  // pin reliée au  relais 2 via l'étage de puissance
    #define R3        PIN_C2  // pin reliée au  relais 3 via l'étage de puissance
    #define R4        PIN_C3  // pin reliée au  relais 4 via l'étage de puissance
    #define LED_isol  PIN_C4  // pin reliée a une LED qui indique que le test en cours est un test d'isolement
    #define LED_temp  PIN_C5
    #define C6        PIN_C6
    #define C7        PIN_C7
    
    
    #define D0        PIN_D0
    #define D1        PIN_D1
    #define D2        PIN_D2
    #define D3        PIN_D3
    #define D4        PIN_D4   //  pin du PIC relié au Décodeur (affichage)
    #define D5        PIN_D5
    #define SIM       PIN_D6
    #define DUP       PIN_D7
    
    #define B0        PIN_B0
    #define B1        PIN_B1
    #define B2        PIN_B2
    #define B3        PIN_B3
    #define B4        PIN_B4   //  pin du PIC relié au Décodeur (affichage)
    #define B5        PIN_B5
    #define B6        PIN_B6
    #define B7        PIN_B7
    
    
    int simpl, dupl, isol, temp ;
    
    
    void affichage_led(byte encodeur)
    
    {
    if (simpl=1)
     {
      switch (encodeur)
       {
    
    case (0x04) :   // test d'isolement C1m
    
         {
         output_d(0X41) ;  // 4---> LED simplxe , 1 --> LED C1m
    
         break;
         }
    
    case (0x05) :  // test d'isolement C1M
    
         {
         output_d(0X42) ;
    
         break;
         }
    
    case (0x06) :  // test d'isolement mM
    
          {
          output_d(0X43) ;
    
          break;
          }
    
    case (0x08) :  // test d'isolement C2m
    
          {
          output_d(0X44) ;
    
          break;
          }
    
    case (0x09) :  // test d'isolement C2M
    
          {
          output_d(0X45) ;
    
          break;
          }
    
       }
     }
    
      if (dupl=1)
     {
      switch (encodeur)
       {
    
    case (0x04) :   // test d'isolement C1m
    
         {
         output_d(0X81) ;  // 8---> LED Duplexe , 1 --> LED C1m
    
         break;
         }
    
    case (0x05) :  // test d'isolement C1M
    
         {
         output_d(0X82) ;
    
         break;
         }
    
    case (0x06) :  // test d'isolement mM
    
          {
          output_d(0X83) ;
    
          break;
          }
    
    case (0x08) :  // test d'isolement C2m
    
          {
          output_d(0X84) ;
    
          break;
          }
    
    case (0x09) :  // test d'isolement C2M
    
          {
          output_d(0X85) ;
    
          break;
          }
    
       }
      }
    }
    
    
    
    
    
    void choix_et_affich_isol(byte encodeur)  // cette fonction lorsequ'elle est exécuté fait éteindre la LED d'isolement, pkoi  ???!, port c ?
    
    {
    if (isol==1)
    
     {
    
    
      switch (encodeur)
       {
    
    case (0x04) :   // test d'isolement C1m
    
         {
         output_c(0X19) ;   // 1--> LED isolement, 9--> combinaison relais
         affichage_led(encodeur);
         break;
         }
    
    
    case (0x05) :  // test d'isolement C1M
    
         {
         output_c(0X11) ;
         affichage_led(encodeur);
         break;
         }
    
    
    
    case (0x06) :  // test d'isolement mM
    
          {
          output_c(0X18) ;
          affichage_led(encodeur);
          break;
          }
    
    
    case (0x08) :  // test d'isolement C2m
    
          {
          output_c(0X1A) ;
          affichage_led(encodeur);
          break;
          }
    
    case (0x09) :  // test d'isolement C2m
    
          {
          output_c(0X84) ;
          affichage_led(encodeur);
          break;
          }
    
    
    
       }
    
     }
    
    }
    
    
    
    
    
    void reset(byte encodeur)
    
    {
    
     if ( (encodeur==0x00) || (encodeur==0x01) )
      {
        simpl=0 ;
        dupl=0;
        isol=0;
        temp=0;
        output_low(LED_isol);
        output_low(LED_temp);
        output_low(TIS);
        output_low(TID);
        output_low(CTD);
        output_a(0x00);
        output_b(0x00);
        output_c(0x00);
        output_d(0x00);
        output_e(0x00);
      }
    
    }
    
    
    
    
    
    
    
    void choix_simplex_duplex(byte encodeur)  // cette fonction est rebouclé tout le temps , on peut passer entre les deux boutons en traversant le programme sans alterer le reste car le main est un ensemble de fonction avec des case et si aucune n'est validé , on retourne a la fonction du début qui est choix simplex/duplex
    {
    
    reset(encodeur);  // cette fonction n'est exécutée que si le dernier bouton appuyé est SIMPL ou DUPL --> il ya pas donc de risque d'une reset en boucle
               // même si on ne touche pas à un bouton (après avoir appuyé sur SIMPL ou DUPL ) la fonction reset() est exécutée ( car elle est à l'intérieur d'une boucle) .
    
      switch (encodeur) {
    
    
    
     case (0x00) :  // bouton simplexe
    {
    //reset(encodeur);
    
    output_high(SIM) ;  // c temporaire, juste pour visualiser
      simpl=1;
      dupl=0;
      break;
    }
    
     case  (0x01) : // bouton duplexe
    {
    //reset(encodeur);
    output_high(DUP) ;
      dupl=1;
      simpl=0;
      break;}
    
      }
    }
    
    
    void  choix_isol_temp(byte  encodeur)
    
    {
    
    switch (encodeur)
    
     {
    
    
     case (0X02) :  // bouton isolement appuyé
    
       {
       output_c(0x10) ;      // LED d'isolement allumée
          // output_high(LED_isol) ;
          // output_low(LED_temp) ;
    
      isol=1;
      temp=0;
    
       if (simpl==1)
           {
          // output_low(TIS) ;
          output_e(0x0) ;         // passer d'un eventuel test en Temp
           }
    
    
       if (dupl==1)
           { // output_low(TID) ;
             output_e(0x0) ;         // passer d'un eventuel test en Temp
           }
    
       break;
    
        }
    
     case (0X03) :    // bouton temperature appuyé
        {
    
        output_c(0x20) ;   // c bon, ca n'affecte pas la commande des 4 relais et la LED reste allumé pendant la sélection de voies.
           //output_low(LED_isol) ;
           //output_high(LED_temp) ;
    
      isol=0;
      temp=1;
    
    
      if (simpl==1)
         { // output_high(TIS) ;
            output_e(0x01) ;   // passer à un test en Temp
         }
    
      if (dupl==1)
         { // output_high(TID) ;
           output_e(0x02) ;     // passer à un test en Temp
         }
    
       break;
        }
     }
    
    }
    
    void select_voie(byte encodeur)
    
    {
     if (simpl==1) {
    
      switch (encodeur) {
     case (0x08)  :             {
    
    output_a(0x00) ;
    
    break; }
    
     case  (0x09)  :  //     0b00001101 : // voie 2, simplexe
    
        {
    output_a(0x01) ;
    
    break; }
    
     case (0x0a) : //   0b00001110 : // voie 3, simplexe
    
        {
        output_a(0x02) ;
        break;
        }
    
     case (0x0b) : // voie 4, simplexe
    
        {
         output_a(0x03) ;
         break;
         }
    
     case (0x0c) : // voie 5, simplexe
    
        {
        output_a(0x04) ;
        break;
        }
    
     case (0x0d) : // voie 6, simplexe
     
        {
    
    output_a(0x05) ;
    
    break; }
    
     case (0x0e) : // voie 7, simplexe
    
        {
    
    output_a(0x06) ;
    
    break; }
    
     case (0x0f) : // voie 8, simplexe
    
        {
    
    output_a(0x07) ;
    
    break; }
    
    } // fin pour switch
    
         } // pour if
    
    
         if (dupl==1) {
    
     switch (encodeur) {
    
     case (0x08) : // voie 1, duplexe
     
        {
    output_a(0x08) ;
    
    break; }
    
     case (0x09) : // voie 2, duplexe
    
        {
    
    output_a(0x09) ;
    
    break;  }
    
     case (0x0a) : // voie 3, duplexe
    
        {
    
    output_a(0x0a) ;
    
    break; }
    
     case (0x0b) : // voie 4, duplexe
    
        {
    
    output_a(0x0b) ;
    
    break; }
    
     case (0x0c) : // voie 5, duplexe
    
        {
    
    output_a(0x0c) ;
    
    break; }
    
     case (0x0d) : // voie 6, duplexe
     
        {
    
    output_a(0x0d) ;
    
    break; }
    
     case (0x0e) : // voie 7, duplexe
    
        {
    
    output_a(0x0e) ;
    
    break; }
    
     case (0x0f) : // voie 8, duplexe
    
        {
    
    output_a(0x0f) ;
    
    break; }
    
      }  // fin pour switch
    
     }  //fin pour if
    
    }
    
    
    
    byte  encodeur;
    
    void main()
    {
    
       setup_adc_ports(NO_ANALOGS);
       setup_adc(ADC_OFF);  // convertisseur ana/num désactivé !
       set_tris_a(0) ;
       set_tris_c(0) ;
       set_tris_d(0) ;
       set_tris_e(0) ;
       set_tris_b(0XFF) ;
    
     output_d(0)   ;
     output_c(0)   ;
    
    
    // encodeur=input_b() >> 4 ;  // même principe en input ??
    
    
    output_low(LED_isol) ; // LED éteinte
    output_low(LED_temp) ;
    
    
    while (1)
       {
    
    encodeur=input_b() >> 4 ;
    
    choix_simplex_duplex(encodeur) ;
    
    choix_isol_temp(encodeur) ;
    
    choix_et_affich_isol(encodeur) ;
    
    select_voie(encodeur);
    
    
       }
    
    }

    -----

  2. #2
    invite4ce7f495

    Re : Warning de compilation de PIC et erreur "failed in adress 0000H" ??

    salut
    L'erreur provient soit de la configuration de ICPROG (débit, délai, interface Direct I/O ou Windows API) soit de ton circuit de programmation (ce que je ne te souhaite pas).
    A tu déja réussi à programmer avec, ou c'est la première fois?
    Si tu a l'habitude de programmer ton pic sur un PC, il se peut que tu ai des difficultés lorsque tu changes de PC car il faut encore adapter les paramètres de ICPROG.

    le message "failed in adress 0000h" veut dire que le programmeur et le logiciel n'ont pas réussi à écrire dans la première case mémoire du pic.
    Donc mon conseil c'est de tatoner un peu en ajustant la configuration (le délai principalement) jusqu'à à ce que tu commence à avoir une erreur qui se passe dans une case mémoire un peu plus loin que la première "failed in adress 0010h" par exp. Là ca veut dire qu'il a réussi à programmer toutes les cases qui sont avant elle. Tu continue à règler le délai jusqu'à ce que tu obtient une erreur à une case superieure et ainsi de suite jusqu'à "programming Succesful".

    C'est tout le problème de ICPROG, il faut chercher la bonne configuration mais lorsqu'on l'a trouvé on n'y touche plus.

    Cordialement.

  3. #3
    behemerre

    Re : Warning de compilation de PIC et erreur "failed in adress 0000H" ??

    Salut,
    lorseque j'ai compilé mon programme sur PCW, il m'a sorti 3 warning et 0 error:
    J'ai pas de notions de C, je ne programme qu'en assembleur, mais les WARNINGS ne sont en général pas graves.

    puis lorseque j'ai voulu le charger dans le PIC ( placé sur un programmateur) avec ICPROG, avant la fin du chargement , un message d'erreur est sortie m'indiquant que la programmation s'est interrompue à l'adresse 0000h ?? "failed in adress 0000h"
    L'erreur la plus connue d'ICPROG, et qui veut dire qu'il n'arrvie pas à lire ce qu'il a écrit dans le PIC depuis l'adresse 0000h (ça veut dire : rien depuis le début de la mémoire)

    Car, en principe, le problème ne peut pas venir du programme, car même s'il est faux, et qu'il comporte des WARNINGS et même des ERRORS, le programmateur ne fait qu'écrire.

    Essayes de répondre à ces questions :

    -As tu deja programmé avec ce programmateur (quel type) ?
    -As-tu deja programmé ce PIC (ou est-il nouveau) ?
    -Le PIC est-il protégé ? (si oui, c'est normal qu'il n'arrive pas à lire !)
    -Essayes avec un autre logiciel (Voir WinPIC, et vérifier si le message "initialisation correcte du programmateur" est affichée)
    -As tu les bons niveaux de tensions sur les pattes du PIC ?
    -As-tu configuré ICPROG pour un 16F877A ?
    -Est-tu sur qu'il n'y a pas d'erreur de port série (COM1, COM2 ... si c'est un port série)
    -Ton programmateur est-il a alim externe ou interne ?
    -Sous quel OS travailles-tu ?

    Voila, ca peut etre un bon début, les questions sont un peu en vrac, mais moi aussi j'ai galéré avec cette erreur, et la cause était que le PIC que j'avais était défectueux, en essayant avec un autre, tout est rentré dans l'ordre.

    Si ça ne marche pas, il va falloir une étude plus approfondie !!

    a+

    EDIT : grillé en grande partie par electahar !!
    L'éxpérience de chacun est le trésor de tous

  4. #4
    invite86ffa844

    Re : Warning de compilation de PIC et erreur "failed in adress 0000H" ??

    salut electahar et behemerre !

    j'ai résolu le problème ,il s'agissait d'une alimentation mal réglé il fallait que je l'alimente à 18 V, alors que moi je l'ai mis à 10 V ,

    je suis désolé, l'erreur est vraiment bête !

    sinon , merci bcp pour vos participations ca m'a vraiment éclairé des choses !!

    au fait, c'est la 3ème fois que je l'utilise ce programmateur !

  5. A voir en vidéo sur Futura

Discussions similaires

  1. ic prog erreur lors de la programmation "0000h"
    Par invite0b8beced dans le forum Électronique
    Réponses: 8
    Dernier message: 14/12/2009, 13h06
  2. Fenêtres IE intempestives et message windows "Warning"
    Par invite26e03ecc dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 12
    Dernier message: 19/08/2007, 13h15
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...