本帖最后由 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相关的函数,加在while循环里,最后读的数就出错。