You are on page 1of 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 campainha LATEbits.LATE4
#define mudança 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 assinado 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};

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


configuração assinada[16];
Char ARR[4];

Struct
{
não assinado int frstdisp:1;
configuração int não assinada:1;
gravidade int não assinada:1;
int onflag não assinado:1;
não assinado int vcorrect:1;
não assinado int chrcorrect:1;
não assinado int chon:1;
não assinado int swon:1;
não assinado int nofeed:1;
Unsigned int viagem curta:1;
Unsigned int zinco:1;
Unsigned int principal:1;
Unsigned int lbwarn:1;
Unsigned int olwarn:1;
Unsigned int olcut:1;
Unsigned int lbcut:1;
Unsigned int Falha:1;
Unsigned int hiload: 1;
Unsigned int msgrtn:1;
Unsigned int CHRMSGRTN:1
Unsigned int em primeiro
}bandeiras; lugar:1;

int chshoot;
int chshootdly=0;
int cintilação=0;
int *ajustar;
int *ptr;
Adj Int;
int *valor;
Int Chadj;
int campeões1;
Assinad int duty_cycle_1;
o
Assinad int p=0,bandeira=1,subindo=1;
o
Assinad
int pr=0,kflag=1,subindo1=1;
o
int amplitude=0;

int pb, qb, cth, ctl;


////////////////////////////////
Unsigned int setdly;
Unsigned int menu delay;
Unsigned int LCDTMR;
Unsigned int balcão;
Unsigned int adiamento de
Unsigned int contagem de
Unsigned int zumbido;
Unsigned int Buzzoftme;
Unsigned int Buzzontme;
Unsigned int picofalha;
Unsigned int oldelay;
Unsigned int triplicado;
Unsigned int redondo;
Unsigned int CHRDLY;
Unsigned int lentamente;
Unsigned int FBDLY;
Unsigned int ctfaildly;
Unsigned int sem saída;
Unsigned int LBDLY;
Unsigned int ACDLY;
Unsigned int chave;
Unsigned int msgrtndly;
Unsigned int gravidade;
Unsigned int FLTDLY;
Unsigned int piscou;
Unsigned int de início;
longtimer não assinado;
Unsigned Longa controleavg;
Unsigned Longa s mainsavg;
Unsigned Longa outavg;
Unsigned Longa Wattsavg;
Unsigned Longa Batavg;
Unsigned Longa chaveavg;
Unsigned Longa Heatavg;
Unsigned int moderador;
/////////////////////////////////
Unsigned int Indummy;
Unsigned int manequim;
Unsigned int CTDUMMY;
Unsigned int Chaves;
Unsigned int NTCvalor;
Unsigned int Batts;
Unsigned int recarga;
//////////////////////////////////
Unsigned int loaddisp;
Unsigned int ACOUTDISP;
Unsigned int mainsdisp;
Unsigned int Battdisp;
Unsigned int Battvolts;
Unsigned int reinício;
Unsigned int porcentagem de carga;
Unsigned int Champs;
Unsigned int chdisp;
Unsigned int rede elétrica;
Unsigned int bico;
Unsigned int valor-chave;
Unsigned int .key;
Unsigned int calor;
Unsigned int Postar;
Unsigned int errar;
Unsigned int Cherr;
Unsigned int prect;

///////////////////////////////////
assinado int falar alto;
assinado int pico;
assinado int CTPEAK;
assinado int Batclb;
assinado int mainsclb;
Unsigned int CHRCLB;
Unsigned int Carga clb;
Unsigned int PDCtemp;
////////////////////////////////////
Unsigned int Deadshort;
Unsigned int controlevolt;
Unsigned int setvout;
Unsigned int setchramp;
Unsigned int sobrecarga;
Unsigned int Setupshi;
Unsigned int Setupslo;
Unsigned int Setinvhi;
Unsigned int Setinvlo;
Unsigned int Golpes;
Unsigned int Setbatwrn;
Unsigned int Setbatlo;
Unsigned int setbatres;
inadimplência int não assinada;
não assinado int x,y,u;
machado longo não assinado, bx;
não assinado int aclo;
não assinado int achi;
zinco não assinado;
/////////////////////////////////////
void InitADC1();
extern void Eeprom_WriteWord(short pushAddressOffset não assinado, valor curto não assinado);
Eeprom_ReadWord curto externo não assinado(pushAddressOffset curto não assinado);
void delay_ms(não assinado int gs);
void delay_us(não assinado int gs);

///////////////////////////////////////////////
Const queim str0[17]= "MENU DE CALIBRAÇÃO";
Const queim Str20[17]= "BATERIA V: V";
Const queim str21[17]= "MODO INVERSOR
Const queim str22[17]= " U.P.S MODE ON ";
Const queim str23[17]= " SBY DESLIGAR ";
Const queim str24[17]= " SBY SWITCH ON ";
Const queim str25[17]= "VOLTS DA REDE: V";
Const queim str26[17]= "INVERSOR V: V";
Const queim str27[17]= "CARGA TOTAL: %";

//const char str28[17]=" TRIP:C-T FAULT ";


Const queim str29[17]= "VIAGEM: BATERIA
Const queim str30[17]= " TRIP:SOBRECARGA ";
Const queim str31[17]= "FALHA CKT CURTA";
Const queim str32[17]= "AVISO: BATERIA FRACA";
Const queim str33[17]= " AVISO:SOBRECARGA ";
Const queim str34[17]= " TRIP:F-B FALHA ";
Const queim str35[17]= "TRIP:FALHA DE
Const queim str36[17]= "AC CHARGR: A";
Const queim str38[17]= " DSP SINEWAVE ";
ar
#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();
estabilização do vazio();
void Modulate();
nulo find_key();
int findpeak(int ct);
void mains_stat_check();
nulo find_mainsvolt();
nulo find_batvolt();
nulo find_champs();
void find_upsvolt();
void find_load();
nulo overload_check();
nulo lobat_check();

nulo chr_stabilize();
////////////////////////////////////
void feed_buzz(int a,int b,int c)
{
buzzdelay=0;
zumbido=b;
BuzzonTME=A;
zumbido=c;
}
//////////////////////////////////////////////////////
void __attribute__((__interrupt__,no_auto_psv)) _FLTAInterrupt(void) {

_FLTAIF = 0;
}
//////////////////////////////////////////////////////////
void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void) {
_T1IF = 0; Limpar sinalizador de interrupção
if(PORTEbits.RE8==0)
{
fltdly++;
IF(FLTDLY>3000)
{
bandeiras.olcut=1;
__asm__ volátil ("reset");
}
}
contador++;
acpeak=getvalue(0); 4.4 EUA
indummy=acpico;
acpeak=indummy-508;
if(acpeak<0)
{
acpico=508-indummy;
if(!flags.onflag)
{
subindo=0;
bandeira=0;
}
}

mainsavg+=acpeak;

if(flags.setup)
{
OVDCON= 0X0000;
mudança=0;
campainha=0;
}

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

if(flags.onflag)
{

Modular(); 4.4 EUA


upspeak=getvalue(1); 4.4 EUA
outdummy=falar;
upspeak=outdummy-508;
if(upspeak<0)
upspeak=508-outdummy;
outavg+=upspeak;
if(upspeak<150)
{
FBDLY++;
SE(FBDLY>30000)
{
bandeiras.fault=1;
viagem(5);
}
}
mais
fbdly=0;
}
mais
{
subindo=1;
bandeira=1;
loadpercent=0;
ACOUT=0;
}

ctpeak=getvalue(2);

if(flags.onflag)
{
SE((CTPEAK>750)||(CTPEAK<250))
{
deadshortdly++;
se(deadshortdly>1500)
{
deadshort=1;
OVDCON= 0X0000;
viagem(1);
}
}
}

mais
{

if(flags.chon==1)
{
SE((CTPEAK<508)||(CTPEAK>512))
ctfaildly=0;
mais
{
ctfaildly++;
se(ctfaildly>10000)
{
Chroff();
}
}
}

IF(CTPEAK>506)
{
pb=ctpeak-506;
se(cth<pb) cth=pb;
}
IF(CTPEAK<506)
{
qb=506-ctpico;
IF(CTL<QB)
CTL=QB;
}
wattsavg+=cth+ctl;
ctl=cth=0;
calor=getvalue(3);
}

batavg+=getvalue(5);
LCTTMR++;
if(contador==359)//// 20 mili seg
{
mainsvolt=__builtin_divud(mainsavg,288)+mainsclb; 2,2 microssegundos
mainsavg=0;
if (mainsvolt<90)
{
mainsvolt=0;
mainsdisp=0;
}
mais
{
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;
se(acoutdisp<acout-2)
ACOUTDISP++;
se(acoutdisp>acout+2)
Acoutdisp--;

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

if(buzzcount>0)
{
buzzdelay++;
if(buzzdelay<=buzzontme)
campainha=1;
mais
{
campainha=0;
if(buzzdelay>=buzzoftme)
{
buzzdelay=0;
buzzcount--;
fltdly=0;
}
}
}
mais
{
FLTACON=0x0001;
IEC2bits.FLTAIE = 1;
se(rodada>0)
{
if((!flags.onflag)&&(flags.swon)&&(round<4))
{
if (mainsvolt<110)
{
clear_flag();
INVON(0);
}
}
}
if(rodada==4)
mudança=0;
}

if(!flags.setup)
{

if((ResumeDelay==200)||(bandeiras.mainsok==1))
{
LCD_DB6=1;
if(flags.swon==1)
{
pisca-pisca++;
se(piscando<30)
LCD_DB7=1;
mais
LCD_DB7=0;
se(piscando>60)
piscar=0;
}
mais
LCD_DB7=0;
}
mais
{
LCD_DB6=0;
if(flags.onflag==1)
LCD_DB7=1;
mais
LCD_DB7=0;
}
}

contador=0;
if((key==modekey)&&(flags.setup==0)) {
menudelay++;
if(menudelay>124)
bandeiras.setup=1;
}
mais
menudelay=0;

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

}
cherr=Mainsvolt;
}

//////////////////////////////////////
void init_PWM()
{
PTCON= 0XE003;
TMPT = 0x0000;
PTPER = PDC1=PDC2= 1230;
SEVTCMP = 0x0000;
PWMCON1 = 0x0033;
PWMCON2 = 0x0000;
DTCON1= 0X0059;
FLTACON = 0x0000;
OVDCON= 0X0000;
PTCONbits.PTEN = 1;
IEC2bits.PWMIE = 0; desativar interrupções do PWM

T1CON = 0XE000;
TMR1 = 0;
RP1 = 1355;
_T1IF = 0;
_T1IE = 1;
}
/////////////////////////////////////////////////
void memread()
{
Int X;
para(x=0;x<15;x++)
{

configuração[x]=Eeprom_ReadWord(x);
}
}
void memwrite()
{

Int X;
para(x=0;x<15;x++)
{
if(flags.setup==0)
Eeprom_WriteWord(x,fábrica[x]);
mais
Eeprom_WriteWord(x,configuração[x]);
}
}
//////////////////////////////////////////////
void modedisp()
{
if(bandeiras.msgrtn)
retornar;
if((chave==upsmode)||(chave==stbyups))
{
gravuras (str22.100); "\fU.P.S MODE ON";
if(chave==upsmode)
{
aclo=setupslo;
achi=setupshi;
}
}

if((chave==invmode)||(chave==stbyinv))
gravuras (str21.100); "\fMODO INVERSOR LIGADO";

}
swdisp vazio()
{
if(bandeiras.msgrtn)
retornar;
if((chave==stbyinv)||(chave==stbyups)) { "\fSBY DESLIGAR";
gravuras (str23.100);
aclo=setinvlo;
achi=setinvhi;
} if((chave==upsmode)||(chave==invmode)) gravuras (str24.100);"\fSBY LIGAR LIGADO";
}

// ROTINA PRINCIPAL
/ int principal()
{
TRISF=0X0000;
TRIPE=0X010F;
TRISD=0X0000;
TRISC=0X0000;
TRISB=0XFFFF;
OVDCON=0X0000;
PWMCON1 = 0x0000;
PTCONbits.PTEN = 0;
campainha=0;
lcd_init();
InitADC1();
init_PWM();
keyvalue=getvalue(4);
if(((valor-chave>660)&&(valor-chave<680))||((valor-chave>560)&&(valor-chave<575)))
{
bandeiras.swon=1;
bandeiras.firston=1;
} prect=getvalue(2);

bandeiras.frstdisp=0;

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

lcd_init();
//
enquanto(1)
//{

lcd_init();
gravuras(str36,3); "AC CHARGR:";

bandeiras.msgrtn=0;
gravuras(str20,1); "\fBATERIA V:";
//

gravuras(str25,2); "\fMAINS VOLT:";

gravuras(str27,4); "\fCARGA TOTAL:";


//
gravuras(str23,0);
////
gravuras (str24.100); "\fSBY LIGAR LIGADO";
////
////
////
gravuras(str26,0); "\fINVERTER V:";
////
gravuras(str27,4); "\fCARGA TOTAL:";
//
//
//
//
//
//}
enquanto(PORTEbits.RE8==0)
{
bandeiras.msgrtn=0;
gravuras (str31.100); SHORT CKT FAULT if(flags.swon==0)
__asm__ volátil ("reset"); } while(flags.nofeed==1)
{
bandeiras.msgrtn=0;
gravuras (str34.100); SEM FEED BACK
if(flags.swon==0)
__asm__ volátil ("reset");
}

while(flags.ctfail==1)
//{
bandeiras.msgrtn=0;
gravuras (str28.100); TRIP:FALHA C-T
if(flags.swon==0)
__asm__ volátil ("reset");
//}

while(flags.zincfail==1)
{
bandeiras.msgrtn=0;
gravuras (str35.100); TRIP:FALHA DE SINCRONIZAÇÃO!
if(flags.swon==0)
__asm__ volátil ("reset");
bandeiras.fault=1;
}

enquanto(flags.lbcut==1)
{
bandeiras.msgrtn=0;
gravuras (str29.100); " TRIP: BATERIA FRACA ";
if((flags.swon==0)||(Atraso da Viagem>175))
__asm__ volátil ("reset");
} while(flags.olcut==1)
{
bandeiras.msgrtn=0;
gravuras (str30.100); " TRIP:OVER-LOAD ";
if((flags.swon==0)||(Atraso da Viagem>175))
__asm__ volátil ("reset");
}

enquanto(flags.olwarn)
{
bandeiras.msgrtn=0;
gravuras (str33.100); " AVISO:SOBRECARGA ";
if(flags.swon==0)
__asm__ volátil ("reset");
}

enquanto(flags.lbwarn==1)
{
bandeiras.msgrtn=0;
gravuras (str32.100); "AVISO: BATERIA FRACA";
if(flags.swon==0)
__asm__ volátil ("reset");

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

if(flags.chon==1)
{
if(campeões==0)
Goto Outmes;

gravuras(str36,3); "AC CHARGR:";


}
Outmes: if((chave==upsmode)||(chave==invmode))
{
if(flags.onflag==1)
{
gravuras(str27,4); "\fCARGA TOTAL:";
}
modedisp();

swdisp();

gravuras(str25,2); "\fMAINS VOLT:";

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

mais
{
modedisp();
swdisp();
gravuras(str25,2); "\fMAINS VOLT:";
}

gravuras (str38.100); "\fNOME DO


TÍTULO
if(menudelay>=125)
{
bandeiras.setup=1;
menudelay=0;
lcd_putc('\f');
gravuras (str0,100); "\fMENU DE CALIBRAÇÃO";
while(chave==modekey);
enquanto(1)
{
if(key==modekey)
{
setchramp=configuração[5]/10;
loadclb=configuração[3];
funções();
memwrite();
bandeiras.setup=0;
__asm__ volátil ("reset");
}
}

} }//principal

You might also like