Précédent   Forum FS Generation > Futura-Techno : les forums de l'informatique et des technologies > Électronique
Mot de passe oublié ? Inscrivez-vous !


Réponse
 
Outils de la discussion Modes d'affichage
Vieux 14/09/2007, 10h17   #1
 
Date d'inscription: mars 2007
Messages: 270
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);


   }

}
Voltron est déconnecté   Réponse avec citation
Alt Aujourd'hui
Publicité

Beitrag Liens sponsorisés

   
Vieux 14/09/2007, 11h22   #2
 
Date d'inscription: avril 2006
Messages: 110
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.
electahar est déconnecté   Réponse avec citation
Vieux 14/09/2007, 11h26   #3
 
Date d'inscription: septembre 2006
Localisation: FSG.com !
Âge: 17
Messages: 701
Re : Warning de compilation de PIC et erreur "failed in adress 0000H" ??

Salut,
Citation:
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.

Citation:
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
behemerre est déconnecté   Réponse avec citation
Vieux 14/09/2007, 20h51   #4
 
Date d'inscription: mars 2007
Messages: 270
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 !
Voltron est déconnecté   Réponse avec citation






Réponse

Tags
icprog, pic

Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
Fenêtres IE intempestives et message windows "Warning" bigjim795 Sécurité et malwares : désinfectez votre machine 12 19/08/2007 13h15
ic prog erreur lors de la programmation "0000h" tibo7 Électronique 5 26/02/2007 19h26


Les dernières actualités
14/10 09:31 - Le rover Mars Science Laboratory s'envolera bien en 2009
13/10 17:59 - En bref : les Garriott, astronautes de père en fils
13/10 17:31 - Le Soleil n'est pas rond, la faute à son champ magnétique
13/10 16:53 - En bref : Open Office 3.0 est sorti
13/10 15:36 - Climatiseur solaire : la plus grande installation européenne en Allemagne
13/10 13:33 - Le premier réseau informatique géant avec cryptage quantique
13/10 11:35 - Peut-on déceler en radio les immenses cordes cosmiques ?

Fuseau horaire GMT +2. Il est actuellement 10h55.


Édité par : vBulletin®
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. Tous droits réservés.