读AD7193数据遇到的问题。
本帖最后由 any_014 于 2016-2-22 11:49 编辑AD7193相关的设置、读写函数,都是找的AD官网上的函数,然后把SPI通讯部分用IO口模拟SPI实现。
现在读取AD7193内部温度没问题,控制AD7193的GPIO也没问题。
读AD7193内部差分通道的数据,出错了。
主程序初始化部分,设置了AD7193配置,然后while循环里,每1s读取一次。
因为ad7193内部有8个通道或者是4个差分通道(此时用的是差分通道),应该先设置打开通道1,然后读取,分两个命令操作。
现在是如果打开通道1,再读取内部数据寄存器,读取的值是实际值的一半;
如果屏蔽掉打开通道1这个操作,直接读取内部数据寄存器,读取的值是正确的;
后来发现,不光是打开通道1,只要是涉及ad7193的操作,然后再读取寄存器值,读出来的都是实际值的一半。
、int main(void)
{
u32 value_temp;
u8 send_value1, send_value2, send_value3, send_value4;
GPIO_Config();
SPI3_Init();
USART1_Config();
TIM3_Config(9999, 7199);
WriteToADT7310ViaSPI(0x01,0x00);
AD7193_GPIO23_ENABLE(1);
ADG702_Set(1);
AD5160_Set(100);
ADG738_Set(0x02);
AD7193_RangeSetup(1, AD7193_CONF_GAIN_8);
AD7193_ConfigSetup(1, 0);
AD7193_ChannelSelect(AD7193_CH_0);
while(1)
{
if(flag_1ms == 1)
{
flag_1ms = 0;
AD7193_ChannelSelect(AD7193_CH_0);
value_temp = AD7193_SingleConversion();
send_value1 = (value_temp * 502)/(0x1000000);
usart1_send(0xDD);
usart1_send(send_value1);
}
}
}
在while循环外有AD7193_ChannelSelect(AD7193_CH_0);这句没事;
加在while循环里就不行。
不过是这句,只要是ad7193相关的函数,加在while循环里,最后读的数就出错。
页:
[1]