besoin de corriger ce programme svp

< Sujet précédent  Sujet suivant >
Index du Forum -> Forum des Logiciels -> PCWH Pic C Compiler
AuteurMessage
Algeria.png [email protected]€d
Newbie



Messages : 4
Inscrit(e) le: 18/11/2012
Posté le 01/05/2013 01:57  
besoin de corriger ce programme svp
slt
j'ai des erreurs dans ce programme de microcontroleur PIC18f1220
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
j'ai utilisé 2 cimbilateur Micro C et MPLAB
voila les erreurs de Micro C
******************************************************
0 304 C:/Users/DANGER/Desktop/PIC/suiver de tunis.c:1: error: Can't open include file "p18f1220.h"
0 304 #include <p18f1220.h>
0 304 C:/Users/DANGER/Desktop/PIC/suiver de tunis.c:2: error: Can't open include file "stdio.h"
0 304 #include <stdio.h>
0 304 C:/Users/DANGER/Desktop/PIC/suiver de tunis.c:3: error: Can't open include file "math.h"
0 304 #include <math.h>
0 304 3 errors in preprocessor.
0 102 Finished (with errors): 19 avr. 2013, 14:52:15 suiver de tunis.mcppi
********************************************************
l'organigrame de mon projet http://img03.arabsh.com/uploads/image/2013/04/17/0c37414d6cf406.png
le circuit http://arabsh.com/files/0d32404a6dfa/le-circuit-de-mppt-docx.html
et le diagramme de MPPT http://img07.arabsh.com/uploads/image/2013/04/17/0c37414d6cf403.png
voila le programme
....................................................

#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;

// }

}
}

Revenir en haut | Permalien

Haut de page

© 2018 Technologue pro, cours électricité électronique informatique · © 2007 - 2018 Technologue pro - Ressources pédagogiques pour l'enseignement technologique en Tunisie
Usage dans un cadre strictement académique

Technologue: cours en ligne gratuit en électricité, électronique, informatique industrielle et mécanique pour l'enseignement technologique en Tunisie et offre des cours en ligne en génie électrique, informatique, mécanique, une base de données de TP, projets fin d'études et un annuaire de ressources pédagogiques
Licence - Sitemap - Qui somme nous ? - confidentialité- Tunisie Index