Vous êtes sur la page 1sur 16

#include

#include
#include "DataEEPROM.h" _FOSC(CSW_ON_FSCM_OFF & XT_PLL16) ;
_FWDT(WDT_OFF) ;
_FBORPOR(MCLR_EN & PBOR_ON & BORV_42 & RST_PWMPIN & PWMxH_ACT_HI & PWMxL_ACT_HI) ;
_FGS (CODE_PROT_ON) ;

#define faultin LATEbits.LATE8


#define buzzer LATEbits.LATE4
#define change LATDbits.LATD1

#define stbyinv 1
#define upsmode 2
#define invmode 3
#define modekey 4
#define upkey 5
#define downkey 6
#define stbyups 7
#define fanheat 640

/////////////////////////////////////////////////////////////////////////////////// ////////
const signed int
sine_table[91]={0,174,348,523,697,871,1045,1218,1391,1564,1736,1908,2079,2249,2419,
2588,2756,2923,3090,

3255,3420,3583,3746,3907,4067,4226,4383,4539,4694,4848,5000,5150,5299,5446,

5591,5735,5877,6018,6156,6293,6427,6560,6691,6819,6946,7071,7193,7313,7431,7547,766 0,7771,

7880,7986,8090,8191,8290,8386,8480,8571,8660,8746,8829,8910,8987,9063,9135,9205,927 1,9335,

9396,9455,9510,9563,9612,9659,9702,9743,9781,9616,9848,9876,9902,9925,9945,9961,997 5,9986,
9993,10000,10000};

signed int factory[16]={0,0,100,350,220,80,265,180,270,100,142,108,100,115,5000};


signed int setting[16] ;
char arr[4] ;

struct
{
unsigned int frstdisp:1 ;
unsigned int setup:1 ;
unsigned int gravity:1 ;
unsigned int onflag:1 ;
unsigned int vcorrect:1 ;
unsigned int chrcorrect:1 ;
unsigned int chon:1 ;
unsigned int swon:1 ;
unsigned int nofeed:1 ;
non signé int court voyage:1 ;
non signé int zincfail:1 ;
non signé int mainsok:1 ;
non signé int lbwarn:1 ;
non signé int olwarn:1 ;
non signé int olcut:1 ;
non signé int lbcut:1 ;
non signé int faute:1 ;
non signé int hiload:1 ;
non signé int msgrtn:1 ;
non signé int chrmsgrtn:1 ;
non signé int premièreon:1 ;
}flags ;

int chshoot ;
int chshootdly=0 ;
int flicker=0 ;
int *adjust ;
int *ptr ;
int adj ;
int *valeur ;
int chadj ;
int champs1 ;
signé int cycle_de_fonctionnement_1 ;
signé int p=0, flag=1, rising=1 ;

signé int pr=0,kflag=1,rising1=1;


int amplitude=0 ;

int pb,qb,cth,ctl ;
////////////////////////////////
non signé int setdly ;
non signé int menudelay ;
non signé int lcdtmr ;
non signé int compteur ;
non signé int reprise du délai ;
non signé int buzzcount ;
non signé int buzzdelay ;
non signé int buzzoftme ;
non signé int buzzontme ;
non signé int peakfail ;
non signé int le délai d'attente ;
non signé int triplement ;
non signé int ronde ;
non signé int chrdly ;
non signé int lentement ;
non signé int fbdly ;
non signé int ctfaildly ;
non signé int de la mort ;
non signé int lbdly ;
non signé int acdly ;
non signé int keydly ;
non signé int msgrtndly ;
non signé int par gravité ;
non signé int fltdly ;
non signé int blinkdly ;
non signé int startdly ;
//////////////////////////////// unsigned long endtimer ;
non signé long controlavg ;
non signé long mainsavg ;
non signé long outavg ;
non signé long wattsavg ;
non signé long batavg ;
non signé long keyavg ;
non signé long heatavg ;
non signé int modeavg ;
/////////////////////////////////
non signé int indummy ;
non signé int outdummy ;
non signé int ctdummy ;
non signé int clés ;
non signé int ntcvalue ;
non signé int des battes ;
non signé int batrecharge ;
//////////////////////////////////
non signé int loaddisp ;
non signé int acoutdisp ;
non signé int maindisp ;
non signé int battdisp ;
non signé int volts ;
non signé int batrestart ;
non signé int loadpercent ;
non signé int champions ;
non signé int chdisp ;
non signé int mainsvolt ;
non signé int acout ;
non signé int valeur clé ;
non signé int clé ;
non signé int chaleur ;
non signé int poste ;
non signé int err ;
non signé int cherr ;
non signé int préct ;

///////////////////////////////////
int signé la langue de Shakespeare ;
int signé acpeak ;
int signé ctpeak ;
int signé batclb ;
int signé mainsclb ;
non signé int chrclb ;
non signé int loadclb ;
non signé int pdctemp ;
////////////////////////////////////
non signé int court-circuit ;
non signé int contrôlevolt ;
non signé int setvout ;
non signé int setchramp ;
non signé int setoverload ;
non signé int setupshi ;
non signé int setupslo ;
non signé int setinvhi ;
non signé int setinvlo ;
non signé int setbatful ;
non signé int setbatwrn ;
non signé int setbatlo ;
non signé int setbatres ;
unsigned int defaults ;
///////////////////////////////////// unsigned int x,y,u ;
unsigned long Ax,bx ;
unsigned int aclo ;
unsigned int achi ;
unsigned int zinc ;
/////////////////////////////////////
void InitADC1() ;
extern void Eeprom_WriteWord(unsigned short pushAddressOffset, unsigned short value) ;
extern unsigned short Eeprom_ReadWord(unsigned short pushAddressOffset) ;
void delay_ms(unsigned int gs) ;
void delay_us(unsigned int gs) ;

///////////////////////////////////////////////
consta char str0[17]= "MENU D'ÉTALONNAGE" ;
consta char str20[17]= "BATTERIE V : V" ;
consta char str21[17]= "MODE ONDULEUR
consta char str22[17]= " U.P.S MODE ON " ;
consta char str23[17]= "SBY SWITCH OFF " ;
consta char str24[17]= " SBY SWITCH ON " ;
consta char str25[17]= "MAINS VOLT : V" ;
consta char str26[17]= "INVERTER V : V" ;
consta char str27[17]= "CHARGE TOTALE : %";
////////////////////////////////////////// //const char str28[17]="
TRIP:C-T FAULT " ;
consta char str29[17]= "TRIP:LOW-BATTERY" ;
consta char str30[17]= "TRIP:OVERLOAD " ;
consta char str31[17]= "SHORT CKT FAULT" ;
consta char str32[17]= "WARN:LOW-BATTERY" ;
consta char str33[17]= "WARN:OVERLOAD " ;
consta char str34[17]= "TRIP:F-B FAULT " ;
consta char str35[17]= "TRIP:SYNC FAULT " ;
consta char str36[17]= "AC CHARGR : A" ;
consta char str38[17]= "ONDE SINUSOÏDALE DSP
nte ";
#include "lcdsoft.h"
#include "functions.h" void clear_flag() ;
void trip(int s) ;
int getvalue(int ch) ;
void chargeron() ;
void chroff() ;
void invon() ;
void invoff() ;
void stabilise() ;
void Modulate() ;
void find_key() ;
int findpeak(int ct) ;
void mains_stat_check() ;
void find_mainsvolt() ;
void find_batvolt() ;
void find_champs() ;
void find_upsvolt() ;
void find_load() ;
void overload_check() ;
void lobat_check() ;

void chr_stabilize() ;
////////////////////////////////////
void feed_buzz(int a,int b,int c)
{
buzzdelay=0 ;
buzzoftme=b ;
buzzontme=a ;
buzzcount=c ;
}
//////////////////////////////////////////////////////
void __attribute__((__interrupt__,no_auto_psv)) _FLTAInterrupt(void) {

_FLTAIF = 0 ;
}
//////////////////////////////////////////////////////////
void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void) {
_T1IF = 0 ; // Effacer le drapeau d'interruption
si(PORTEbits.RE8==0)
{
fltdly++ ;
if(fltdly>3000)
{
flags.olcut=1 ;
__asm__ volatile ("remise à zéro") ;
}
}
contre++ ;
acpeak=getvalue(0) ; //4.4 us
indummy=acpeak ;
acpeak=indummy-508 ;
if(acpeak<0)
{
acpeak=508-indummy ;
if(!flags.onflag)
{
en hausse=0 ;
drapeau=0 ;
}
}

mainsavg+=acpeak ;

if(flags.setup)
{
OVDCON= 0X0000 ;
changer=0 ;
buzzer=0 ;
}

if(!flags.setup)
{
if((indummy<600)&&(indummy>400)&&(flags.swon))
{
if(peakfail<150)
{
peakfail++ ;
}
if(peakfail==149)
{
if(flags.vcorrect)
{
invon(150) ;
}
}
}
autre
{
peakfail=0 ;
}

if(flags.onflag)
{

Modulate() ; //4.4 us
upspeak=getvalue(1) ; //4.4 us
outdummy = langue de bois ;
upspeak=outdummy-508 ;
if(upspeak<0)
upspeak=508-outdummy ;
outavg+=upspeak ;
if(upspeak<150)
{
fbdly++ ;
if(fbdly>30000)
{
flags.fault=1 ;
voyage(5) ;
}
}
autre
fbdly=0 ;
}
autre
{
s'élevant=1 ;
flag=1 ;
loadpercent=0 ;
acout=0 ;
}

ctpeak=getvalue(2) ;

if(flags.onflag)
{
if((ctpeak>750)||(ctpeak<250))
{
deadshortdly++ ;
if(deadshortdly>1500)
{
deadshort=1 ;
OVDCON= 0X0000 ;
voyage(1) ;
}
}
}

autre
{

if(flags.chon==1)
{
if((ctpeak<508)||(ctpeak>512))
ctfaildly=0 ;
autre
{
ctfaildly++ ;
if(ctfaildly>10000)
{
chroff() ;
}
}
}

si(ctpeak>506)
{
pb=ctpeak-506 ;
si(cth<pb) cth=pb ;
}
if(ctpeak<506)
{
qb=506-ctpeak ;
if(ctl<qb)
ctl=qb ;
}
wattsavg+=cth+ctl ;
ctl=cth=0 ;
heat=getvalue(3) ;
}

batavg+=getvalue(5) ;
lcdtmr++ ;
if(counter==359)////////////////////// 20 milli sec
{
mainsvolt=__builtin_divud(mainsavg,288)+mainsclb ; /2,2 microsecondes
mainavg=0 ;
if(mainsvolt<90)
{
mainsvolt=0 ;
mainsdisp=0 ;
}
autre
{
if((indummy>180)&&(indummy<900))
{
if(mainsdisp==0)
{
mainsdisp=mainsvolt-80 ;

}
if(mainsdisp<mainsvolt-2)
{
mainsdisp++ ;
}
if(mainsdisp>mainsvolt+2)
{
mainsdisp-- ;
}
}
}

find_batvolt() ;

keyavg+=getvalue(4) ;
keydly++ ;
if(keydly==10)
find_key() ;

if(!flags.setup)
{
mains_stat_check() ;
if(flags.onflag==1)
{
acout=__builtin_divud(outavg,285) ;
outavg=0 ;
if(acoutdisp<acout-2)
acoutdisp++ ;
if(acoutdisp>acout+2)
acoutdisp-- ;

find_load() ;
overload_check() ;
lobat_check() ;
}
}
wattsavg=0 ;

if(buzzcount>0)
{
buzzdelay++ ;
if(buzzdelay<=buzzontme)
buzzer=1 ;
autre
{
buzzer=0 ;
if(buzzdelay>=buzzoftme)
{
buzzdelay=0 ;
buzzcount-- ;
fltdly=0 ;
}
}
}
autre
{
FLTACON=0x0001 ;
IEC2bits.FLTAIE = 1 ;
if(round>0)
{
if(!flags.onflag)&&(flags.swon)&&(round<4))
{
if(mainsvolt<110)
{
clear_flag() ;
invon(0) ;
}
}
}
if(round==4)
changer=0 ;
}

if(!flags.setup)
{

if((resumedelay==200)||(flags.mainsok==1))
{
LCD_DB6=1 ;
if(flags.swon==1)
{
blinkdly++ ;
if(blinkdly<30)
LCD_DB7=1 ;
autre
LCD_DB7=0 ;
if(blinkdly>60)
blinkdly=0 ;
}
autre
LCD_DB7=0 ;
}
autre
{
LCD_DB6=0 ;
if(flags.onflag==1)
LCD_DB7=1 ;
autre
LCD_DB7=0 ;
}
}

compteur=0 ;
if((key==modekey)&&(flags.setup==0)) {
menudelay++ ;
if(menudelay>124)
flags.setup=1 ;
}
autre
menudelay=0 ;

if(flags.setup==1)
{
setdly++ ;
if(setdly>3000)
__asm__ volatile ("reset") ; }

}
cherr=mainsvolt ;
}

//////////////////////////////////////
void init_PWM()
{
PTCON= 0XE003 ;
PTMR = 0x0000 ;
PTPER = PDC1=PDC2= 1230 ;
SEVTCMP = 0x0000 ;
PWMCON1 = 0x0033 ;
PWMCON2 = 0x0000 ;
DTCON1= 0X0059 ;
FLTACON = 0x0000 ;
OVDCON= 0X0000 ;
PTCONbits.PTEN = 1 ;
IEC2bits.PWMIE = 0 ; // désactive les interruptions PWM

T1CON = 0XE000 ;
TMR1 = 0 ;
PR1 = 1355 ;
_T1IF = 0 ;
_T1IE = 1 ;
}
/////////////////////////////////////////////////
void memread()
{
int x ;
for(x=0;x<15;x++)
{

setting[x]=Eeprom_ReadWord(x) ;
}
}
////////////////////////////////////////////////////////// void memwrite()
{

int x ;
for(x=0;x<15;x++)
{
if(flags.setup==0)
Eeprom_WriteWord(x,factory[x]) ;
autre
Eeprom_WriteWord(x,setting[x]) ;
}
}
//////////////////////////////////////////////
void modedisp()
{
if(flags.msgrtn)
retour ;
if((key==upsmode)||(key==stbyups))
{
printmes(str22,100) ; //"\fU.P.S MODE ON" ;
if(key==upsmode)
{
aclo=setupslo ;
achi=setupshi ;
}
}

if((key==invmode)||(key==stbyinv))
printmes(str21,100) ; //"\fINVERTER MODE ON" ;

}
////////////////////////////////////////////////////// void swdisp()
{
if(flags.msgrtn)
retour ;
if((key==stbyinv)||(key==stbyups)) { //"\fSBY SWITCH OFF" ;
printmes(str23,100) ;
aclo=setinvlo ;
achi=setinvhi ;
} if((key==upsmode)||(key==invmode)) printmes(str24,100) ; //"\fSBY SWITCH ON" ;
}

// ROUTINE PRINCIPALE
//*****************************************************************************/ int main()
{
TRISF=0X0000 ;
TRISE=0X010F ;
TRISD=0X0000 ;
TRISC=0X0000 ;
TRISB=0XFFFF ;
OVDCON=0X0000 ;
PWMCON1 = 0x0000 ;
PTCONbits.PTEN = 0 ;
buzzer=0 ;
lcd_init() ;
InitADC1() ;
init_PWM() ;
keyvalue=getvalue(4) ;
if((keyvalue>660)&&(keyvalue<680))||((keyvalue>560)&&(keyvalue<575)))
{
drapeaux.swon=1 ;
drapeaux.firston=1 ;
} prect=getvalue(2) ;

drapeaux.frstdisp=0 ;

defaults=Eeprom_ReadWord(14) ;
if(defaults!=50)
{
memwrite() ;
}
memread() ;
batclb=setting[0] ;
mainsclb=setting[1] ;
chrclb=réglage[2] ;
loadclb=700-setting[3];
setvout=réglage[4] ;
setchramp=réglage[5] ;
chshoot=setchramp ;
setchramp+=30 ;
setupshi=setting[6] ;
setupslo=setting[7] ;
setinvhi=setting[8] ;
setinvlo=setting[9] ;
setbatful=setting[10] ;
setbatwrn=setting[11] ;
setbatlo=setting[12] ;
setbatres=setting[13] ;
defaults=setting[14] ;
battdisp=90 ;
aclo=setinvlo ;
achi=setinvhi ;
batrestart=setbatful-13 ;
menudelay=0 ;
while(1)
{

//lcd_init() ;
//
//while(1)
//{

//lcd_init() ;
//printmes(str36,3) ; //"AC CHARGR :";

//flags.msgrtn=0 ;
////printmes(str20,1) ; //"\fBATTERY V :";
//

//printmes(str25,2) ; //"\fMAINS VOLT :";

//printmes(str27,4) ; //"\fTOTAL LOAD :";


//
////printmes(str23,0) ;
////
//printmes(str24,100) ; //"\fSBY SWITCH ON" ;
////
////
////
//printmes(str26,0) ; //"\fINVERTER V :";
////
////printmes(str27,4) ; //"\fTOTAL LOAD :";
//
//
//
//
//
//}
// while(PORTEbits.RE8==0)
{
flags.msgrtn=0 ;
printmes(str31,100) ; // SHORT CKT FAULT if(flags.swon==0)
__asm__ volatile ("reset") ; } while(flags.nofeed==1)
{
flags.msgrtn=0 ;
printmes(str34,100) ; // PAS DE RETOUR D'INFORMATION
if(flags.swon==0)
__asm__ volatile ("remise à zéro") ;
}

//while(flags.ctfail==1)
//{
// flags.msgrtn=0 ;
//printmes(str28,100) ; // TRIP:C-T FAULT
//si(flags.swon==0)
//__asm__ volatile ("reset") ;
//}

while(flags.zincfail==1)
{
flags.msgrtn=0 ;
printmes(str35,100) ; // TRIP:SYNC FAULT !
if(flags.swon==0)
__asm__ volatile ("remise à zéro") ;
flags.fault=1 ;
}

while(flags.lbcut==1)
{
flags.msgrtn=0 ;
printmes(str29,100) ; //" TRIP:LOW-BATTERY " ;
if((flags.swon==0)||(resumedelay>175))
__asm__ volatile ("remise à zéro") ;
} while(flags.olcut==1)
{
flags.msgrtn=0 ;
printmes(str30,100) ; //" TRIP:OVER-LOAD " ;
if((flags.swon==0)||(resumedelay>175))
__asm__ volatile ("remise à zéro") ;
}

while(flags.olwarn)
{
flags.msgrtn=0 ;
printmes(str33,100) ; //" WARN:OVER-LOAD " ;
if(flags.swon==0)
__asm__ volatile ("remise à zéro") ;
}

while(flags.lbwarn==1)
{
flags.msgrtn=0 ;
printmes(str32,100) ; //"WARN:LOW-BATTERY" ;
if(flags.swon==0)
__asm__ volatile ("remise à zéro") ;

printmes(str20,1) ; // 0/0/"\fBATTERY V :";

if(flags.chon==1)
{
if(champs==0)
geto outmes ;

printmes(str36,3) ; //"AC CHARGR :";


}
outmes : if((key==upsmode)||(key==invmode))
{
if(flags.onflag==1)
{
printmes(str27,4) ; //"\fTOTAL LOAD :";
}
modedisp() ;

swdisp() ;

printmes(str25,2) ; //"\fMAINS VOLT :";

if(flags.onflag==1)
{
printmes(str26,0) ; //"\fINVERTER V :";
}

autre
{
modedisp() ;
swdisp() ;
printmes(str25,2) ; //"\fMAINS VOLT :";
}

//printmes(str38,100) ; //"\fTITLE NOM


if(menudelay>=125)
{
flags.setup=1 ;
menudelay=0 ;
lcd_putc('\f') ;
printmes(str0,100) ; //"MENU DE CALIBRAGE" ;
while(key==modekey) ;
while(1)
{
if(key==modekey)
{
setchramp=réglage[5]/10 ;
loadclb=setting[3] ;
fonctions() ;
memwrite() ;
flags.setup=0 ;
__asm__ volatile ("remise à zéro") ;
}
}

} }//main

Vous aimerez peut-être aussi