Besoin de corriger ce programme

Fermé
mohamed88med Messages postés 19 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 20 mai 2014 - Modifié par Chris 94 le 17/04/2013 à 15:17
mohamed88med Messages postés 19 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 20 mai 2014 - 18 avril 2013 à 00:08
Bonjour,
j'ai des erreurs dans ce programme de PIC
ce programme ile me permet de de suivi la point de puissance maximal de système photovoltaïque
il y a des jeunes qui me dit ce programme CSS et l'autre c'est un C
svp m'aider
....................................................
#include <p18f1220.h>  
#include <stdio.h>  
#include <math.h>  
#pragma config WDT = OFF // page 182  

// Variables globales  
int i,H;  
unsigned int tension_conv,tension_conv1,tension_conv2,tension_conv1_totale;  
unsigned char derive_puiss;  
unsigned int intensite_conv1,intensite_conv2,intensite_conv,intensite_conv1_totale;  
unsigned int tension_panneau;  
unsigned long puissance,puissance_ancienne=1,puissance_totale;  
unsigned int m;  

//Fonction de conversion de l'intensite  

unsigned int intensite (void)  
{  
intensite_conv1=0;  
intensite_conv1_totale=0;  
intensite_conv2=0;  
for (i=0;i<1;i++)  
{  
}  
ADCON0=0x05;  
for (i=0;i<10;i++) // petit retard pour mieux acquérir le courant du module PV et effectuer la conversion A/N.  
{  
}  
ADCON0=0x07;  
while (ADCON0!=0x05)  
{  
}  
intensite_conv1=ADRESH; // 8 bits du registre ADRESH  

intensite_conv1_totale=intensite_conv1<<8;    
intensite_conv2=ADRESL; // 2 bits du registre ADRESL  

intensite_conv=intensite_conv1_totale+intensite_conv2; // 10 bits de la conversion   
return(intensite_conv);  
}  

//Fonction de conversion de tension  
unsigned int tension (void)  
{  
tension_conv1=0;  
tension_conv1_totale=0;  
tension_conv2=0;  
for (i=0;i<1;i++)   
{  
}  
ADCON0=0x01;  
for (i=0;i<10;i++)  
{   
}  
ADCON0=0x03;  
while (ADCON0!=0x01)   
{  
}  
tension_conv1=ADRESH;   

tension_conv1_totale=tension_conv1<<8;  
tension_conv2=ADRESL;// 2 bits du registre ADRESL  
tension_conv=tension_conv1_totale+tension_conv2;   

return (tension_conv);  
}  

//Fonction calcule de la puissance  
unsigned long calcule_puissance (void)  
{  
unsigned int x,y;  
y=intensite();  // Conversion courant  
x=tension(); // Conversion tension  
puissance_totale= x * y;   
return (puissance_totale);  
}  

//Fonction de configuretion des registres  

void config_registre (void)  
{  
i=0;  
m=0;  
H=1;  
puissance=0;  
puissance_ancienne=0;  
ADRESH=0x00; // initialisation du registre de conversion  
ADRESL=0x00;  
   
//TIMER 0  

INTCONbits.TMR0IE=1; // autorisation de l'interruption du timer 0  
INTCONbits.GIEH=1;   

INTCONbits.TMR0IF=0; //Desactivation le flag du timer0  
INTCON2=0x00; //interruptions par front descendant   

INTCON3=0x00; //désactivations des interruptions externes (registre INTCON3)  
PIR1=0x00; //désactivations des timers 2 et 3 (registre PIE1 et PIR1)  
PIE1=0x00;   

IPR1=0x00; //configuration du niveau de priorité des interruptions (convertisseur, comparateur,  
     //timer 1 et 2) (registre IPR1)  

PIR2=0x00; //désactivations du flag de timer 3 (registre PIR2)  
PIE2=0x00; //Interdiction d'interruption du timer 3 (registre PIE2)  
IPR2=0x00; // configuration de la priorité des interruptions au niveau bas (erreur de l'oscillateur,  
           //mémoire EEPROM, détecteur niveau bas, timer 3) (registre IPR2)  

RCON=0x00; //désactivations de la priorité de niveau des interruptions (registre RCON)  

//T0CON=0x46; //Configuration du timer 0 avec une valeur de 6.5ms .  
T0CON=0x46;  
ADCON1=0x7C; // AN0 et AN1 comme des entrées analogiques qui seront  
    //la tension et le courant  

ADCON2=0x92; // Configuration du PIC pour obtenir le résultat de la conversion   
             //justifié à gauche (ADCON2=0x92)  

//Periferiques  

PORTA=0x00;  
TRISA=0x03; //AN0,AN1 et AN2 configuree comme entre  
PORTB=0x00;  
TRISB=0x04; // B comme sortie  
}  


// Fonction qui genere d'interruption avec retard 6,5 ms du Timer0   

void traiteIT(void);  
#pragma code it=0x08 // High Priority Interrupt Vector  (Page 41)  
void saut_sur_spIT(void)  
{  
_asm  
goto traiteIT  
_endasm  
}  
#pragma code  
#pragma interrupt traiteIT  
void traiteIT(void)  
{  
if (INTCONbits.TMR0IF)  
 {  
  INTCONbits.TMR0IF=0; // Flag de l'interruption du Timer0  
  H=1; // indique que le timer est termine  
  T0CONbits.TMR0ON=0;// reinitialisation du timer 0  
 }  
}  


unsigned long puissance_moy (void)  
{  
unsigned long puissance_moy_totale,mesure_puissance,conv_puissance;  
puissance_moy_totale=0;  
mesure_puissance=0;  
conv_puissance=0;  

for (m=0;m<8;m++) // puissance sur 8 echantillon  
{  
conv_puissance=calcule_puissance();   

mesure_puissance=mesure_puissance+conv_puissance;  
}  
puissance_moy_totale=mesure_puissance>>3; //Division par 8 en decalant 3 bits a droite  
return (puissance_moy_totale);  
}  


// fonction calcule derivee  

unsigned char derive_puissance (void)  
{  
unsigned char derive;  
puissance = puissance_moy();   
if (puissance>puissance_ancienne)   
{  
derive=1;    // le derivee est positive  
PORTBbits.RB0=1;    
}  
else   
{  
derive=0;  // le derivee est negative  
PORTBbits.RB0=0;   
}  

puissance_ancienne = puissance;  

return (derive);  
}  






//PROGRAMA PRINCIPAL  
int al;  
void main()  
{  
short i;  
short l;  
short j;  

config_registre();  

al=50;  
while(0){  


 l=al;  
 for(i=0;i<l;i++);  
 PORTBbits.RB1=0;  
   
 l=100-al;  
 for(i=0;i<l;i++);  
 PORTBbits.RB1=1;  
    
}  



while(1)  
{  

// test sur le Bouton rouge sur la carte afin de mise hors tension le systeme   
// if(PORTBbits.RB2==0)  
   
// {  
   
   //continue;  

   derive_puiss = derive_puissance();   


   if ((derive_puiss==1)&&(PORTBbits.RB1==1))  
   {  

    PORTBbits.RB1=1;  
    H=0;  
    T0CONbits.TMR0ON=1; // Strat Time  

   }  
   else if ((derive_puiss==0)&&(PORTBbits.RB1==1))  
   {  
    if (H==0)  
     {  
     PORTBbits.RB1=1;  

     }  
    else  
     {  
     PORTBbits.RB1=0;  
     H=0;  
     T0CONbits.TMR0ON=1; // Strat Timer0  

     }  
   }  
   else if ((derive_puiss==1)&&(PORTBbits.RB1==0))  
   {  

    PORTBbits.RB1=0;  
    H=0;  
    T0CONbits.TMR0ON=1; // Strat Time  

   }  
   else if ((derive_puiss==0)&&(PORTBbits.RB1==0))  
   {  
    if (H==0)  
     {  
     PORTBbits.RB1=0;  

     }  
    else  
     {  
     PORTBbits.RB1=1;  

     H=0;  

     T0CONbits.TMR0ON=1;  

       
     }  
   }  
   else  
   {  
   }  

 //  }  
// else  
// {  
//  PORTBbits.RB1=0;  
//  PORTBbits.RB0=0;  

// }  
     
 }  
}

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
17 avril 2013 à 19:20
j'ai des erreurs dans ce programme de PIC
Et serait-il possible de connaître ces erreurs ? Se trouvent-elles à la compilation ? A l'exécution ? Merci de nous donner plus de détails.
0
mohamed88med Messages postés 19 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 20 mai 2014 1
17 avril 2013 à 21:12
mais j'ai l'organigramme de ce programme tu peux me aidé svp
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
17 avril 2013 à 23:55
Réponds à mes questions, sinon on ne va pas s'en sortir...
0
mohamed88med Messages postés 19 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 20 mai 2014 1
17 avril 2013 à 23:56
dsl mais j'ai pas que ce que tu veux pcq mon projet ces sur le proteus ok
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
18 avril 2013 à 00:06
Si tu réponds pas aux questions, je doute que tu trouves quelqu'un pour t'aider.
0
mohamed88med Messages postés 19 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 20 mai 2014 1
18 avril 2013 à 00:08
mem moi j'ai des problème avec mon travaille
0