You are on page 1of 5

void main()

{
char *ptr3;
SYSTEM_init();
UART_1_CPutString(" ADE 7758 Measurement\n\n\r");
ADE7758_init();

while(1)
{
//phaseA();
write_8bit(0x97,0x0D);// LCYMODE reg for Pahse A
delay(20);
write_16bit(0x9C,100); // No of Half Line cycles
delay(20);
read_24bit(0x1A);// Restting the Status Register
while( !((read_24bit(0x19)) & 0x1000)); // Checking the LENGRY bit ie energy accumulted
read_16value = read_16bit(0x01);
awatt = read_16value;
read_16value = read_16bit(0x07);
ava = read_16value;
UART_1_CPutString(" AWEnergy:");
UART_1_PutSHexInt(awatt);
UART_1_PutCRLF();
UART_1_PutSHexInt(ava);
UART_1_PutCRLF();

/*f1 = awatt;
f1 = ((f1/60192.00)*115600.00);
ptr1 = ftoa(f1,&sta1);
if(!sta1)
{
UART_1_PutString(ptr1);
UART_1_PutCRLF();
}*/
read_24bit(0x1A); //Restting the Status Register
UART_1_PutCRLF();
}
}

void SYSTEM_init(void)
{
M8C_EnableGInt;
I2C_CFG &= 0xFC;
UART_1_Start(UART_1_PARITY_EVEN);
SPIM_1_Start(SPIM_1_SPIM_MODE_0 | SPIM_1_SPIM_MSB_FIRST);

Timer16_1_EnableInt ();
Timer16_1_WritePeriod(2000);
Timer16_1_WriteCompareValue(0);
Timer16_1_Start();

}
void ADE7758_init(void)
{
PRT0DR &= (~4);// salve select P0.3

write_8bit(0xA3,0x00);// 00000000b - intergrator disable,0.5v ref // Gain Reg


delay(50);

write_8bit(0xC2,0x00);// Making The WDIV for ZERO for accumulation reg at .524 sec
delay(50);

write_16bit(0xAA,0x000);// writing the WGAN for 000


delay(50);

write_16bit(0xB9,0x00);// writing the AWATTOS for 000


delay(50);

write_8bit(0xC4,0x00);//Making The VADIV for ZERO for accumulation reg at 1.05 sec
delay(50);
write_16bit(0xB0,0x000);// writing the AVAG for 000
delay(50);

write_16bit(0xBC,0x00);// writing the AVASOS for 000


delay(50);

write_16bit(0xA7,0x00);// writing the VRMSOSfor 000


delay(50);

write_8bit(0x93,0x04);// 00000100b Enable HPF and LPF is selected


delay(50);

write_8bit(0x96,0x00);//COMPMODE Reg for AWATTHR FOR VA*IA..ABS disabled and No load Disabled
delay(50);

write_8bit(0xC5,0x00);// 00000100b Enable HPF and default LPF is selected


delay(50);

void phaseA(void)
{
write_8bit(0x94,0x04);
read_24bitvalue = read_24bit(0x0D); // To read the VRMS Reg
f1 = (((read_24bitvalue * 500.00)/0x193504)/1.4145);// for 50 Hz 193504 // 60Hz- 1902BD
ptr1 = ftoa(f1,&sta1);
if(!sta1)
{
UART_1_CPutString("\n\rVRMS A : ");
UART_1_PutString(ptr1);
UART_1_PutCRLF();
f1 =0.0;
}

write_8bit(0x93,0x04);// 00000100b Enable HPF and default LPF is selected .//OPMODE Reg
read_24bitvalue = read_24bit(0x0A); // to Read the IRMS reg
f1 = (((read_24bitvalue * 500.00)/0x1D51C1)/1.4145);// for 50 Hz 193504 // 60Hz- 1902BD
ptr1 = ftoa(f1,&sta1); // converting to floating string
if(!sta1)
{
UART_1_CPutString("\n\rIRMS A : ");
UART_1_PutString(ptr1);
UART_1_PutCRLF();
}
}

void phaseB(void)
{
write_8bit(0x94,0x04);
read_24bitvalue = read_24bit(0x0E); // To read the VRMS Reg
f1 = (((read_24bitvalue * 500.00)/0x193504)/1.4145);// for 50 Hz 193504 // 60Hz- 1902BD
ptr1 = ftoa(f1,&sta1);
if(!sta1)
{
UART_1_CPutString("\n\rVRMS B : ");
UART_1_PutString(ptr1);
UART_1_PutCRLF();
f1 =0.0;
}

write_8bit(0x93,0x04);// 00000100b Enable HPF and default LPF is selected .//OPMODE Reg
read_24bitvalue = read_24bit(0x0B); // to Read the IRMS reg
f1 = (((read_24bitvalue * 500.00)/0x1D51C1)/1.4145);// for 50 Hz 193504 // 60Hz- 1902BD
ptr1 = ftoa(f1,&sta1); // converting to floating string
if(!sta1)
{
UART_1_CPutString("\n\rIRMS B : ");
UART_1_PutString(ptr1);
UART_1_PutCRLF();
}
}

void intoa(unsigned char *p,int value,int base)


{
int i=0,j=0,t=0,bit=0;

if(value & 8000)


value = 0x10000 - value,bit=1;
while(value)
{
p[j++]=value%10+'0';
value /= 10;
}
if(bit)
p[j] = '-';
p[j+1] =0;

while(i<j)
t=p[i],p[i]=p[j],p[j]=t,++i,--j;

void transmit_read(unsigned char cmd)


{
while( ! (SPIM_1_bReadStatus() & SPIM_1_SPIM_TX_BUFFER_EMPTY ) );
SPIM_1_SendTxData(cmd);
}

void transmit_write(unsigned char cmd)


{
while( ! (SPIM_1_bReadStatus() & SPIM_1_SPIM_TX_BUFFER_EMPTY ) );
SPIM_1_SendTxData(0);
SPIM_1_SendTxData(cmd);
}

unsigned char receive ()


{
while( ! (SPIM_1_bReadStatus() & SPIM_1_SPIM_RX_BUFFER_FULL ) );
rxvalue = SPIM_1_bReadRxData();
return rxvalue;
}

void write_8bit(unsigned char reg,unsigned char value)


{
unsigned char rv=0;
timeoutcnt=0;
while(1)
{
write_8bit1(reg,value);
delay(100);
rv = read_8bit(reg);
if( (rv == value) || (timeoutcnt > 50))
break;
}
}

void write_8bit1(unsigned char reg1,unsigned char value1)


{
transmit_write(reg1);
delay(20);
receive();
transmit_write(value1);
delay(20);
receive();
delay(10);
}
unsigned char read_8bit(unsigned char reg)
{

unsigned char regvalue0=0;


transmit_read(reg);
delay(10);
receive();
transmit_read(0x00);
delay(10);
regvalue0 = receive();
return(regvalue0);
}

void write_16bit(unsigned char reg,unsigned int value1)


{
unsigned int read_16value = 0;
timeoutcnt=0;
while(1)
{
write_16bit1(reg,value1);
delay(100);
read_16value = read_16bit(reg);
if((read_16value == value1) || (timeoutcnt > 50))
break;
}
}

void write_16bit1(unsigned char reg,unsigned int value1)


{
unsigned int read_16value;
unsigned char a1,a2;
a1 = value1 >> 8;
a2 = (unsigned char)value1;

transmit_write(reg);
delay(10);
transmit_read(a1);
delay(10);
transmit_read(a2);
delay(10);
receive();
delay(10);
}

void write_24bit(unsigned char reg,long value1)


{
unsigned int read_16value;
unsigned char a1,a2,a3;
a1 = value1 >> 16;
a2 = value1 >> 8;
a2 = (unsigned char)value1;

transmit_write(reg);
delay(10);
transmit_read(a1);
delay(10);
transmit_read(a2);
delay(10);
transmit_read(a3);
delay(10);
receive();
delay(10);
}

unsigned int read_16bit(unsigned char reg)


{
unsigned int read_16value=0;
unsigned char read_value,regvalue1,regvalue2;
transmit_read(reg);
delay(10);
receive();
transmit_read(0x00);
delay(10);
regvalue1 = receive();
delay(10);
transmit_read(0x00);
delay(10);
regvalue2 = receive();
read_16value = regvalue1;
read_16value <<= 8;
read_16value |= regvalue2;
regvalue1 = 0;
regvalue2 = 0;
return(read_16value);
}

unsigned long read_24bit(unsigned char reg)


{
unsigned char regvalue0,regvalue1,regvalue2;
long read_24bitvalue = 0;

transmit_write(reg);
delay(10);
receive();
transmit_read(0x00);
delay(10);
regvalue0 = receive();
delay(10);
transmit_read(0x00);
delay(10);
regvalue1 = receive();
delay(10);
transmit_read(0x00);
delay(10);
regvalue2 = receive();

read_24bitvalue = regvalue0 ;
read_24bitvalue <<= 16;
read_24bitvalue |= (((unsigned int)regvalue1) << 8);
read_24bitvalue |= regvalue2;

regvalue0 = 0;
regvalue1 = 0;
regvalue2 = 0;
return (read_24bitvalue);
}

void delay(long wait)


{
while(wait--);
}

You might also like