|
用了cs5460A了个电源监测,读I ,V ,P ,E(7~12)数据变化很大,读IRMS ,VRMS(11,12)数据可以用。
初始化程序如下:
//*************CS5460初始化函数*********//
void Init5460a(void)
{
Rst_L();
_delay_ms(100);
Rst_H();
_delay_ms(50);
unsigned char buff1[4],read[4];
//写串口初始化//
buff1[0]=0xff;//SYNC1
buff1[1]=0xff;//SYNC1
buff1[2]=0xff;//SYNC1
buff1[3]=0xff;//SYNC0
Write_CS5460A(buff1,4);
//写串口初始化//
buff1[0]=0xff;//SYNC1
buff1[1]=0xff;//SYNC1
buff1[2]=0xff;//SYNC1
buff1[3]=0xfe;//SYNC0
Write_CS5460A(buff1,4);
//写配置寄存器
buff1[0]=WRITE|CONFIG;
buff1[1]=0x00;//GI=0 电流通道增益=10
buff1[2]=0x18;//中断形式:00-高电平 08-低电平 10-下降沿 18-上升沿
buff1[3]=0xe1;//DLCK=MCLK/1
Write_CS5460A(buff1,4);
_delay_ms(10);
//清状态寄存器
buff1[0]=WRITE|STATUS;
buff1[1]=0xff;
buff1[2]=0xff;
buff1[3]=0xff;
Write_CS5460A(buff1,4);
//写屏蔽中断寄存器
buff1[0]=WRITE|MASK;
buff1[1]=0x00;
buff1[2]=0x00;
buff1[3]=0x00;
Write_CS5460A(buff1,4);
//写控制寄存器
buff1[0]=WRITE|CTRL;
buff1[1]=0x00;
buff1[2]=0x00;
buff1[3]=0x00;
Write_CS5460A(buff1,4);
//写EOUT脉冲输出寄存器
/*buff1[0]=0x4c;
buff1[1]=0x00;
buff1[2]=0x34;
buff1[3]=0x9c;
Write_CS5460A(buff1,4);
_delay(50);
*/
//写CYCLE COUNT寄存器
buff1[0]=WRITE|CYCLE_COUNT;
buff1[1]=0x00;
buff1[2]=0x01;
buff1[3]=0x90; //每秒计算10次,N=400
Write_CS5460A(buff1,4);
//写电流增益寄存器
/*buff1[0]=0x44;
buff1[1]=0x40;//增益1
buff1[2]=0x00;
buff1[3]=0x00;
Write_CS5460A(buff1,4);
//写电压增益寄存器
buff1[0]=0x48;
buff1[1]=0x40;//增益1
buff1[2]=0x00;
buff1[3]=0x00;
Write_CS5460A(buff1,4);*/
//写AC current offset
/*buff1[0]=WRITE|VOLT_AC_OFFSET;
buff1[1]=0x00;
buff1[2]=0x12;
buff1[3]=0x5c;
Write_CS5460A(buff1,4);*/
//读状态寄存器
Read_CS5460A(0x1e,read);
buff1[0]=WRITE|STATUS;
buff1[1]=read[0];
buff1[2]=read[1];
buff1[3]=read[2];
Write_CS5460A(buff1,4);
//启动Cs5460,执行连续周期计算
buff1[0]=0xe8;
Write_CS5460A(buff1,1);
}
硬件没有问题,是在别的产品上移植的。
我怀疑读的是AC变化数据,
请问,它只有一个寄存器,怎么分AC与DC。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|