interfacing energy meter ic

Thread Starter

embedded.world

Joined Feb 27, 2014
38
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:

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:
Top