Sunteți pe pagina 1din 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 defect LATEbits.LATE8


#define sonerie LATEbits.LATE4
#define schimbare LATDbits.LATD1

#define stbyinv 1
#define upsmode 2
#define invmode 3
#define tastei modeste 4
#define upkey 5
#define downkey 6
#define stbyups 7
#define Fanheat 640

/////////////////////////////////////////////////////////////////////////////////// ////////
const semnat 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};

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


setare int semnată[16];
arr de caractere[4];

Struct
{
nesemnat int frstdisp:1;
configurare int nesemnat:1;
nesemnat int gravity:1;
nesemnat int onflag:1;
nesemnat int vcorrect:1;
nesemnat int chrcorrect:1;
nesemnat int chon:1;
nesemnat int swon:1;
nesemnat int nofeed:1;
Nesemnat Int călătorie
e
Nesemnat Int scurtă:1;
zincfail:1;
Nesemnat Int mainsok:1;
Nesemnat Int LBWARN:1;
Nesemnat Int Olwarn:1;
Nesemnat Int olcut:1;
Nesemnat Int lbcut:1;
Nesemnat Int eroare:1;
Nesemnat Int Hiload:1;
Nesemnat Int msgrtn:1;
Nesemnat Int chrmsgrtn:1;
Nesemnat Int Primul:1;
e
}steaguri;

int chshoot;
int chshootdly=0;
int pâlpâire=0;
int *ajusta;
int *ptr;
int adj;
int *valoare;
int chadj;
Int Champs1;
Semnat Int duty_cycle_1;
Semnat Int p=0,steag=1,ridicare=1;

Semnat Int pr=0,kflag=1,ridicare1=1;


amplitudine int=0;

int pb,qb,cth,ctl;
////////////////////////////////
Nesemnat Int setdly;
e
Nesemnat Int întârzierea
Nesemnat Int LCDTMR;
Nesemnat Int contor;
Nesemnat Int reluareîntârziere;
Nesemnat Int buzzcount;
Nesemnat Int buzzdelay;
Nesemnat Int buzzoftme;
Nesemnat Int buzzontme;
Nesemnat Int vârf de vârf;
e
Nesemnat Int olîntârziere;
Nesemnat Int triplu;
Nesemnat Int rotund;
Nesemnat Int chrdly;
Nesemnat Int încet;
Nesemnat Int fbdly;
Nesemnat Int ctfaild;
Nesemnat Int fără întârziere;
Nesemnat Int lbdly;
Nesemnat Int acdly;
Nesemnat Int cu cheie;
Nesemnat Int msgrtndly;
Nesemnat Int gravitațional;
Nesemnat Int fltdly;
Nesemnat Int clipește;
Nesemnat Int la început;
e
temporizator lung nesemnat;
Nesemnat lung controlmediu
e
Nesemnat de control;
lung mainsavg;
Nesemnat lung outavg;
Nesemnat lung Wattsavg;
Nesemnat lung batavg;
Nesemnat lung cheieavg;
Nesemnat lung căldură;
Nesemnat Int modeavg;
e
/////////////////////////////////
Nesemnat Int Industrie;
e
Nesemnat Int manechin;
Nesemnat Int ctdummy;
Nesemnat Int chei;
Nesemnat Int NTCVALUE;
Nesemnat Int batts;
Nesemnat Int batrecharge;
//////////////////////////////////
Nesemnat Int loaddisp;
e
Nesemnat Int acoutdisp;
Nesemnat Int mainsdisp;
Nesemnat Int battdisp;
Nesemnat Int battvolturi;
Nesemnat Int batrestart;
Nesemnat Int procentul de încărcare;
Nesemnat Int Champs;
Nesemnat Int chdisp;
Nesemnat Int mainsvolt;
Nesemnat Int acout;
Nesemnat Int valoare cheie;
Nesemnat Int .key;
Nesemnat Int căldură;
Nesemnat Int post;
Nesemnat Int Err;
Nesemnat Int Cireș;
Nesemnat Int prect;
e
///////////////////////////////////
Semnat int vorbiți în sus;
Semnat int acvârf;
Semnat int CTPEAK;
Semnat int Batclb;
Semnat int mainsclb;
Nesemnat Int CHRCLB;
e
Nesemnat Int loadclb;
Nesemnat Int pdctemp;
////////////////////////////////////
Nesemnat Int mort;
e
Nesemnat Int controlvolt;
Nesemnat Int setvout;
Nesemnat Int setchramp;
Nesemnat Int supraîncărcare;
Nesemnat Int setupshi;
e
Nesemnat Int setupslo;
Nesemnat Int setinvhi;
Nesemnat Int setinvlo;
Nesemnat Int setbatful;
Nesemnat Int setbatwrn;
Nesemnat Int setbatlo;
Nesemnat Int setbatres;
e
valori implicite int nesemnate;
nesemnat int x,y,u;
nesemnat lung Ax,bx;
nesemnat int aclo;
nesemnat int achi;
zinc int nesemnat;
/////////////////////////////////////
nul InitADC1();
extern void Eeprom_WriteWord(împingere scurtă nesemnatăAddressOffset, valoare scurtă nesemnată);
extern nesemnat short Eeprom_ReadWord(unsigned short pushAddressOffset);
nul delay_ms(nesemnat int gs);
nul delay_us(nesemnat int gs);

///////////////////////////////////////////////
Const Char str0[17]= "MENIU DE CALIBRARE";
Const Char str20[17]= "BATERIA V: V";
Const Char str21[17]= "MOD INVERTOR
Const Char str22[17]= " MODUL U.P.S PORNIT ";
Const Char str23[17]= " SBY OPRIȚI ";
Const Char str24[17]= " SBY COMUTATOR
Const Char str25[17]= "VOLT DE REȚEA: V";
Const Char str26[17]= "INVERTORUL V: V";
Const Char str27[17]= "SARCINA TOTALĂ: %";

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


Const Char str29[17]= "TRIP: BATERIE
Const Char str30[17]= " TRIP: SUPRASARCINĂ ";
Const Char str31[17]= "DEFECȚIUNE SCURTĂ
Const Char str32[17]= "AVERTIZARE: BATERIE
Const Char str33[17]= " ARN: SUPRASARCINĂ ";
Const Char str34[17]= " TRIP:F-B FAULT ";
Const Char str35[17]= "TRIP: EROARE DE
Const Char str36[17]= "AC CHARGR: A";
Const Char str38[17]= " UNDA SINUSOIDALĂ
DSP ";
#include "lcdsoft.h"
#include "functions.h" vid clear_flag();
călătorie în vid(int s);
int getvalue(int ch);
încărcător nul();
chroff vid();
vid invon();
invoff nul();
stabilizarea vidului();
vid modulat();
nul find_key();
int findpeak(int ct);
nul mains_stat_check();
nul find_mainsvolt();
nul find_batvolt();
nul find_champs();
nul find_upsvolt();
nul find_load();
nulă overload_check();
nul lobat_check();

nul chr_stabilize();
////////////////////////////////////
nul 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; Ștergeți semnalizatorul de întrerupere
if(PORTEbits.RE8==0)
{
fltdly++;
if(fltdly>3000)
{
steaguri.olcut=1;
__asm__ volatile ("resetare");
}
}
contra++;
acpeak=getvalue(0); 4.4 SUA
indummy=acpeak;
acpeak=indummy-508;
if(acpeak<0)
{
acpeak=508-indummy;
if(!flags.onflag)
{
în creștere = 0;
steag = 0;
}
}

mainsavg+=acpeak;

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

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

if(flags.onflag)
{

modulează(); 4.4 SUA


upspeak=getvalue(1); 4.4 SUA
outdummy=upspeak;
upspeak=outdummy-508;
if(upspeak<0)
upspeak=508-outdummy;
outavg+=vorbire în sus;
if(upspeak<150)
{
fbdly++;
IF(FBDLY>30000)
{
steaguri.fault=1;
excursie(5);
}
}
altfel
fbdly=0;
}
altfel
{
ridicare=1;
steag=1;
loadpercent=0;
acout=0;
}

ctpeak=getvalue(2);

if(flags.onflag)
{
IF((CTPEAK>750)||(CTpeak<250)]
{
deadshortdly++;
if(deadshortdly>1500)
{
mort = 1;
OVDCON= 0X0000;
excursie(1);
}
}
}

altfel
{

if(flags.chon==1)
{
IF((CTPEAK<508)||(CTpeak>512)]
ctfaildly=0;
altfel
{
ctfaildly++;
if(ctfaildly>10000)
{
Chroff();
}
}
}

IF(CTpeak>506)
{
pb=ctpeak-506;
if(cth<pb) cth=pb;
}
if(CTpeak<506)
{
qb=506-ctpeak;
if(CTL<QB)
CTL=QB;
}
wattsavg+=cth+ctl;
ctl=cth=0;
căldură=getvalue(3);
}

batavg+=getvalue(5);
LCDTMR++;
dacă(contra==359)//// 20 mili sec
{
mainsvolt=__builtin_divud(mainsavg,288)+mainsclb; 2,2 microsecunde
mainsavg=0;
if(mainsvolt<90)
{
mainsvolt=0;
mainsdisp=0;
}
altfel
{
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);
tastat++;
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;
altfel
{
buzzer=0;
if(buzzdelay>=buzzoftme)
{
buzzdelay=0;
buzzcount--;
fltdly=0;
}
}
}
altfel
{
FLTACON=0x0001;
IEC2bits.FLTAIE = 1;
if(runda>0)
{
if((!flags.onflag)&&(flags.swon)&&(round<4))
{
if(mainsvolt<110)
{
clear_flag();
invon(0);
}
}
}
if(runda==4)
schimbare=0;
}

if(!flags.setup)
{

if((resumedelay==200)||(steaguri.mainsok==1))
{
LCD_DB6=1;
if(steaguri.swon==1)
{
clipește ++;
dacă(clipește<30)
LCD_DB7=1;
altfel
LCD_DB7=0;
dacă(clipește>60)
clipește = 0;
}
altfel
LCD_DB7=0;
}
altfel
{
LCD_DB6=0;
if(flags.onflag==1)
LCD_DB7=1;
altfel
LCD_DB7=0;
}
}

contor = 0;
if((key==modekey)&&(flags.setup==0)) {
menudelay++;
if(MenuDelay>124)
steaguri.setup=1;
}
altfel
menudelay=0;

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

}
cherr=mainsvolt;
}

//////////////////////////////////////
nul 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; dezactivați întreruperile PWM

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

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

int x;
pentru(x=0;x<15;x++)
{
if(flags.setup==0)
Eeprom_WriteWord(x,fabrică[x]);
altfel
Eeprom_WriteWord(x,setare[x]);
}
}
//////////////////////////////////////////////
Void Modedisp()
{
if(steaguri.msgrtn)
restitui;
if((cheie==upsmode)||(cheie==stbyups))
{
printmes(str22,100); "\FU.P.S MODE ON";
if(cheie==upsmode)
{
aclo=setupslo;
achi=setupshi;
}
}

if((cheie==invmode)||(cheie==stbyinv))
printmes(str21,100); "\fMODUL INVERTOR ACTIVAT";

}
swdisp vid()
{
if(steaguri.msgrtn)
restitui;
if((cheie==stbyinv)||(cheie==stbyups)) { "\fSBY OPRIȚI";
printmes(str23,100);
aclo=setinvlo;
achi=setinvhi;
} if((cheie==upsmode)||(cheie==invmode)) printmes(str24,100); "\FSBY PORNIȚI PORNIT";
}

// RUTINA PRINCIPALĂ
/ 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(((valoare-cheie>660)&&(valoare-cheie<680))||[(valoare cheie>560)&&(valoare-cheie<575))]
{
steaguri.swon=1;
steaguri.firston=1;
} prect=getvalue(2);

steaguri.frstdisp=0;

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

lcd_init();
//
în timp ce(1)
//{

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

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

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

printmes(str27,4); "\fSARCINA TOTALĂ:";


//
printmes(str23,0);
////
printmes(str24,100); "\FSBY PORNIȚI PORNIT";
////
////
////
printmes(str26,0); "\fINVERTER V:";
////
printmes(str27,4); "\fSARCINA TOTALĂ:";
//
//
//
//
//
//}
în timp ce(PORTEbits.RE8==0)
{
steaguri.msgrtn=0;
printmes(str31,100); SCURT CKT FAULT if(flags.swon==0)
__asm__ volatile ("resetare"); } în timp ce(flags.nofeed==1)
{
steaguri.msgrtn=0;
printmes(str34,100); FĂRĂ FEEDBACK
if(steaguri.swon==0)
__asm__ volatile ("resetare");
}

în timp ce(steaguri.ctfail==1)
//{
steaguri.msgrtn=0;
printmes(str28,100); TRIP: DEFECT C-T
if(steaguri.swon==0)
__asm__ volatile ("resetare");
//}

în timp ce(steaguri.zincfail==1)
{
steaguri.msgrtn=0;
printmes(str35,100); TRIP: SINCRONIZARE DEFECȚIUNE!
if(steaguri.swon==0)
__asm__ volatile ("resetare");
steaguri.fault=1;
}

în timp ce(steaguri.lbcut==1)
{
steaguri.msgrtn=0;
printmes(str29,100); " TRIP: BATERIE REDUSĂ ";
if((steaguri.swon==0)||(reluareîntârziere>175)]
__asm__ volatile ("resetare");
} în timp ce(steaguri.olcut==1)
{
steaguri.msgrtn=0;
printmes(str30,100); " CĂLĂTORIE: SUPRAÎNCĂRCARE ";
if((steaguri.swon==0)||(reluareîntârziere>175)]
__asm__ volatile ("resetare");
}

în timp ce(flags.olwarn)
{
steaguri.msgrtn=0;
printmes(str33,100); " AVERTIZARE: SUPRAÎNCĂRCARE ";
if(steaguri.swon==0)
__asm__ volatile ("resetare");
}

în timp ce(steaguri.lbwarn==1)
{
steaguri.msgrtn=0;
printmes(str32,100); "AVERTIZARE: BATERIE DESCĂRCATĂ";
if(steaguri.swon==0)
__asm__ volatile ("resetare");

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

if(flags.chon==1)
{
if(campioni==0)
du-te la outmes;

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


}
outmes: if((cheie==upsmode)||(cheie==invmode))
{
if(flags.onflag==1)
{
printmes(str27,4); "\fSARCINA TOTALĂ:";
}
modedisp();

swdisp();

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

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

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

printmes(str38,100); "\fTITLE NAME


if(menudelay>=125)
{
steaguri.setup=1;
menudelay=0;
lcd_putc("\f");
printmes(str0,100); "\fMENIU CALIBRARE";
în timp ce(cheie==ModeKey);
în timp ce(1)
{
if(cheie==ModeKey)
{
setchramp=setare[5]/10;
loadclb=setare[3];
funcții();
memwrite();
steaguri.setup=0;
__asm__ volatile ("resetare");
}
}

} }//principal

S-ar putea să vă placă și