本帖最后由 any012 于 2016-2-23 10:01 编辑
while(1)
{
if(flag_1ms == 1)
{
flag_1ms = 0;
// AD7193_ChannelSelect(AD7193_CH_0);
AD7193_SetRegisterValue(AD7193_REG_CONF, 0x10010B, 3, 1);
value_temp = AD7193_SingleConversion();
send_value1 = (value_temp * 502)/(0x1000000);
usart1_send(0xDD);
usart1_send(send_value1 >> 16);
usart1_send(send_value1 >> 8);
usart1_send(send_value1);
}
原来是调用的设置通道函数,把设置通道发送的SPI数据通过串口发上来一看,是10011A,按前边设置,应该是10010B。
这样,AD7193内部放大器的增益就不对了,故数值变为理论值的一半。
直接用调用AD7193配置函数发送0x10010B,得到的结果是正确的。
----------------------------------------------------------------
AD7193_SetRegisterValue(AD7193_REG_CONF, 0x10010B, 3, 1);
AD7193_ChannelSelect(AD7193_CH_0);
value_temp = AD7193_SingleConversion();
又测试了下,先调用AD7193的配置函数设置相应配置,此时放大器增益应已设为8了。
然后再调用下通道切换函数,该函数是先读取原来的配置寄存器数据,修改通道相关位后,再写入。
结果测量的数还是为理论值一半,应该是AD7193_ChannelSelect(AD7193_CH_0); 这个函数出了问题。
|