Besoin de corriger ce programme
mohamed88med
Messages postés
23
Statut
Membre
-
mohamed88med Messages postés 23 Statut Membre -
mohamed88med Messages postés 23 Statut Membre -
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
....................................................
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;
// }
}
}
A voir également:
- Besoin de corriger ce programme
- Programme demarrage windows - Guide
- Programme word gratuit - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide