Sie sind auf Seite 1von 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};

signiertes INT-Werk [16]={0,0,100,350,220,80,265,180,270,100,142,108,100,115,5000};


signierte INT-Einstellung [16];
char arr[4];

struct
{
unsigned int frstdisp:1;
unsigniertes INT-Setup:1;
unsigned int Schwerkraft: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;
unsigniert int kurztrip:1;
unsigniert int zincfail:1;
unsigniert int mainsok:1;
unsigniert int lbwarn:1;
unsigniert int olwarn:1;
unsigniert int olcut:1;
unsigniert int lbcut:1;
unsigniert int fehler:1;
unsigniert int hiload:1;
unsigniert int msgrtn:1;
unsigniert int chrmsgrtn:1;
unsigniert int firston:1;
}Flaggen;

int chshoot;
int chshootdly=0;
int flicker=0;
int *adjust;
int *ptr;
int adj;
int *value;
int chadj;
int champs1;
gez. int duty_cycle_1;
gez. int p=0,Flag=1,ansteigend=1;

gez. int pr=0,kflag=1,rising1=1;


int amplitude=0;

int pb,qb,cth,ctl;
////////////////////////////////
unsigniert int setdly;
unsigniert int menudelay;
unsigniert int lcdtmr;
unsigniert int zähler;
unsigniert int wiederaufnahmev
unsigniert int buzzcount;
unsigniert int buzzdelay;
unsigniert int buzzoftme;
unsigniert int buzzontme;
unsigniert int peakfail;
unsigniert int oldelay;
unsigniert int dreifach;
unsigniert int rund;
unsigniert int chrdly;
unsigniert int langsam;
unsigniert int fbdly;
unsigniert int ctfaildly;
unsigniert int deadshortdly;
unsigniert int lbdly;
unsigniert int acdly;
unsigniert int keydly;
unsigniert int msgrtndly;
unsigniert int schwerkraft;
unsigniert int fltdly;
unsigniert int blinkt;
unsigniert int startdly;
//////////////////////////////// unsignierter langer Endtimer;
unsigniert lang controlavg;
unsigniert lang mainsavg;
unsigniert lang outavg;
unsigniert lang wattsavg;
unsigniert lang batavg;
unsigniert lang keyavg;
unsigniert lang heatavg;
unsigniert int modeavg;
/////////////////////////////////
unsigniert int indummy;
unsigniert int outdummy;
unsigniert int ctdummy;
unsigniert int tasten;
unsigniert int ntcvalue;
unsigniert int matten;
unsigniert int batrecharge;
//////////////////////////////////
unsigniert int loaddisp;
unsigniert int acoutdisp;
unsigniert int mainsdisp;
unsigniert int battdisp;
unsigniert int battvolts;
unsigniert int batrestart;
unsigniert int loadpercent;
unsigniert int champions;
unsigniert int chdisp;
unsigniert int mainsvolt;
unsigniert int acout;
unsigniert int keyvalue;
unsigniert int key;
unsigniert int wärme;
unsigniert int posten;
unsigniert int irren;
unsigniert int cherr;
unsigniert int prect;

///////////////////////////////////
gez. int upspeak;
gez. int acpeak;
gez. int ctpeak;
gez. int batclb;
gez. int mainsclb;
unsigniert int chrclb;
unsigniert int loadclb;
unsigniert int pdctemp;
////////////////////////////////////
unsigniert int deadshort;
unsigniert int steuerspannung;
unsigniert int setvout;
unsigniert int setchramp;
unsigniert int set overload;
unsigniert int setupshi;
unsigniert int setupslo;
unsigniert int setinvhi;
unsigniert int setinvlo;
unsigniert int setbatful;
unsigniert int setbatwrn;
unsigniert int setbatlo;
unsigniert int setbatres;
unsignierte INT-Standardeinstellungen;
///////////////////////////////////// unsigned int x,y,u;
unsigned long Ax,bx;
unsigned int aclo;
unsigned int achi;
unsigniertes INT-Zink;
/////////////////////////////////////
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);

///////////////////////////////////////////////
const char str0[17]= "KALIBRIERUNGSMENÜ";
const char str20[17]= "BATTERIE V: V";
const char str21[17]= "WECHSELRICHTERMOD
const char str22[17]= " U.P.S-MODUS EIN ";
const char str23[17]= " SBY-SCHALTER AUS ";
const char str24[17]= " SBY-SCHALTER EIN ";
const char str25[17]= "NETZSPANNUNG: V";
const char str26[17]= "WECHSELRICHTER V:
const char str27[17]= "GESAMTLAST: %";
////////////////////////////////////////// //const char str28[17]="
AUSLÖSUNG: C-T-FEHLER ";
const char str29[17]= "TRIP:LOW-BATTERY";
const char str30[17]= " AUSLÖSUNG:ÜBERLAST
const char str31[17]= "KURZER CKT-FEHLER";
const char str32[17]= "WARN:LOW-BATTERY";
const char str33[17]= " WARN:OVERLOAD ";
const char str34[17]= " AUSLÖSUNG: F-B-
const char str35[17]= "TRIP:SYNC-FEHLER";
const char str36[17]= "AC CHARGR: A";
const char str38[17]= " DSP SINUSWELLE ";

#include "lcdsoft.h"
#include "functions.h" void clear_flag();
ungültige Fahrt(en);
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; //Interrupt-Flag löschen
wenn(PORTEbits.RE8==0)
{
fltdly++;
if(fltdly>3000)
{
flags.olcut=1;
__asm__ volatile ("zurücksetzen");
}
}
zähler++;
acpeak=getvalue(0); //4.4 us
indummy=acpeak;
acpeak=indummy-508;
if(acpeak<0)
{
acpeak=508-indummy;
if(!flags.onflag)
{
ansteigend=0;
flag=0;
}
}

mainsavg+=acpeak;

if(flags.setup)
{
OVDCON= 0X0000;
change=0;
summer=0;
}

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

if(flags.onflag)
{

Modulate(); //4.4 us
upspeak=getvalue(1); //4.4 us
outdummy=upspeak;
upspeak=outdummy-508;
if(upspeak<0)
upspeak=508-outdummy;
outavg+=upspeak;
if(upspeak<150)
{
fbdly++;
if(fbdly>30000)
{
flags.fault=1;
fahrt(5);
}
}
else
fbdly=0;
}
else
{
ansteigend=1;
flag=1;
loadpercent=0;
acout=0;
}

ctpeak=getvalue(2);

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

else
{

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

wenn(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;
heat=getvalue(3);
}

batavg+=getvalue(5);
lcdtmr++;
wenn(Zähler==359)////////////////////// 20 Millisekunden
{
mainsvolt=__builtin_divud(mainsavg,288)+mainsclb; //2,2 Mikrosekunden
mainsavg=0;
wenn(Netzspannung<90)
{
mainsvolt=0;
mainsdisp=0;
}
else
{
if((indummy>180)&&(indummy<900))
{
if(mainsdisp==0)
{
mainsdisp=mainsvolt-80;

}
if(mainsdisp<mainsvolt-2)
{
mainsdisp++;
}
wenn(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++;
wenn(acoutdisp>acout+2)
acoutdisp--;

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

if(buzzcount>0)
{
buzzdelay++;
if(buzzdelay<=buzzontme)
summer=1;
else
{
summer=0;
if(buzzdelay>=buzzoftme)
{
buzzdelay=0;
buzzcount--;
fltdly=0;
}
}
}
else
{
FLTACON=0x0001;
IEC2bits.FLTAIE = 1;
if(round>0)
{
if((!flags.onflag)&&(flags.swon)&&(round<4))
{
wenn(Netzspannung<110)
{
clear_flag();
invon(0);
}
}
}
if(round==4)
change=0;
}

if(!flags.setup)
{

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

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

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

}
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; //PWM-Interrupts deaktivieren

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

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

int x;
für(x=0;x<15;x++)
{
if(flags.setup==0)
Eeprom_WriteWord(x,Werk[x]);
else
Eeprom_WriteWord(x,Einstellung[x]);
}
}
//////////////////////////////////////////////
void modedisp()
{
if(flags.msgrtn)
rückgabe;
if((key==upsmode)||(key==stbyups))
{
printmes(str22,100); //"\ FU.P.S-MODUS ein";
if(key==upsmode)
{
aclo=setupslo;
achi=setupshi;
}
}

if((key==invmode)||(key==stbyinv))
printmes(str21,100); //"\ FINVERTER-MODUS ein";

}
////////////////////////////////////////////////////// void swdisp()
{
if(flags.msgrtn)
rückgabe;
if((key==stbyinv)||(key==stbyups)) { //"\ FSBY AUSSCHALTEN";
printmes(str23,100);
aclo=setinvlo;
achi=setinvhi;
} if((key==upsmode)||(key==invmode)) printmes(str24,100); //"\fSBY SCHALTER ein";
}

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

flags.frstdisp=0;

defaults=Eeprom_ReadWord(14);
if(default!=50)
{
memwrite();
}
memread();
batclb=Einstellung[0];
mainsclb=Einstellung[1];
chrclb=Einstellung[2];
loadclb=700-setting[3];
setvout=Einstellung[4];
setchramp=Einstellung[5];
chshoot=setchramp;
setchramp+=30;
setupshi=Einstellung[6];
setupslo=Einstellung[7];
setinvhi=Einstellung[8];
setinvlo=Einstellung[9];
setbatful=Einstellung[10];
setbatwrn=Einstellung[11];
setbatlo=Einstellung[12];
setbatres=Einstellung[13];
default=Einstellung[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); //"\fBATTERIE V:";
//

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

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


//
////printmes(str23,0);
////
//printmes(str24,100); //"\fSBY SCHALTER ein";
////
////
////
//printmes(str26,0); //"\fINVERTER V:";
////
////printmes(str27,4); //"\fTOTAL LOAD:";
//
//
//
//
//
//}
// while(PORTEbits.RE8==0)
{
flags.msgrtn=0;
printmes(str31,100); // KURZ CKT-FEHLER wenn(flags.swon==0)
__asm__ volatile ("reset"); } while(flags.nofeed==1)
{
flags.msgrtn=0;
printmes(str34,100); // keine RÜCKMELDUNG
if(flags.swon==0)
__asm__ volatile ("zurücksetzen");
}

//while(flags.ctfail==1)
//{
// flags.msgrtn=0;
//printmes(str28,100); // AUSLÖSUNG: C-T-FEHLER
//if(flags.swon==0)
//__asm__ flüchtig ("reset");
//}

while(flags.zincfail==1)
{
flags.msgrtn=0;
printmes(str35,100); // TRIP:SYNC-FEHLER!
if(flags.swon==0)
__asm__ volatile ("zurücksetzen");
flags.fault=1;
}

while(flags.lbcut==1)
{
flags.msgrtn=0;
printmes(str29,100); //" TRIP:LOW-BATTERY ";
if((flags.swon==0)||(resumedelay>175))
__asm__ volatile ("zurücksetzen");
} while(flags.olcut==1)
{
flags.msgrtn=0;
printmes(str30,100); //" AUSLÖSUNG: ÜBERLAST";
if((flags.swon==0)||(resumedelay>175))
__asm__ volatile ("zurücksetzen");
}

while(flags.olwarn)
{
flags.msgrtn=0;
printmes(str33,100); //" WARN:ÜBERLASTUNG ";
if(flags.swon==0)
__asm__ volatile ("zurücksetzen");
}

while(flags.lbwarn==1)
{
flags.msgrtn=0;
printmes(str32,100); //"WARN:LOW-BATTERY";
if(flags.swon==0)
__asm__ volatile ("zurücksetzen");

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

if(flags.chon==1)
{
if(champs==0)
goto 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:";
}

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

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


if(menudelay>=125)
{
flags.setup=1;
menudelay=0;
lcd_putc('\f');
printmes(str0,100); //"\ FKALIBRATIONSMENÜ";
while(key==Modustaste);
while(1)
{
if(key==modekey)
{
setchramp=Einstellung[5]/10;
loadclb=Einstellung[3];
functions();
memwrite();
flags.setup=0;
__asm__ volatile ("zurücksetzen");
}
}

} }//main

Das könnte Ihnen auch gefallen