moh@m€d
Newbie
Messages : 4 Inscrit(e) le: 18/11/2012
|
Posté le 30/04/2013 23:58 | | 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;
// }
} }
|
|
|