I have interfaced Ade7754.
For voltage measurement, i have divided voltage by divider 1k/1.5M.
So voltage gets divided by 1500.
I have shorted Va,Vb & Vc of Ade5574.
I am using Spi freq 0.5 mhz & mode 1.
I am polling interrupt register.
On reading voltage I am getting wrong values. It varies from 270 ac - 290 ac.
Sometimes ic reads 6806 which is equivalent to 0xffffff of Vrms register. Can someone check my code:
For voltage measurement, i have divided voltage by divider 1k/1.5M.
So voltage gets divided by 1500.
I have shorted Va,Vb & Vc of Ade5574.
I am using Spi freq 0.5 mhz & mode 1.
I am polling interrupt register.
On reading voltage I am getting wrong values. It varies from 270 ac - 290 ac.
Sometimes ic reads 6806 which is equivalent to 0xffffff of Vrms register. Can someone check my code:
Rich (BB code):
main()
{
RT=0;
delay_us(20000);
RT=1;
delay_us(2000); //10usec
Spi_init( 500000 , mode_1 );
CS = 0;
delay_us(100);
spi_wrt(0x80 | 0x0B); //MMODE
spi_wrt(0x70);
delay_us(200);
spi_wrt(0x80 | 0x0F); //IRQEN
spi_wrt(0x03);
spi_wrt(0x80);
delay_us(200);
spi_wrt(0x11); //RSTATUS
temp = spi_rd();
temp = spi_rd();
while(1)
{
flag = 0;
while(0 == flag)
{
spi_wrt(0x10); //STATUS
val1 = spi_rd();;
val2 = spi_rd();
if(val2 & 0x80) // if Va Zc interrupt
{
flag = 1;
}
}
spi_wrt(0x2C); //current read
val1 = spi_rd();;
val2 = spi_rd();
val3 = spi_rd();
spi_wrt(0x11); //RSTATUS
temp = spi_rd();
temp = spi_rd();
vrms=((unsigned long)val1<<16)|((unsigned long)val2<<8)|((unsigned long)val3);
vrms = ( (0.5f * vrms) / 1848772 ) * 1500; //0.5V/ 1848772counts is fullscale volage reading
}
Last edited by a moderator: