你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

读AD7193数据遇到的问题。

[复制链接]
any_014 提问时间:2016-2-22 11:25 /
悬赏3ST金币未解决
本帖最后由 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的操作,然后再读取寄存器值,读出来的都是实际值的一半。
  1. int main(void)
  2. {
  3.         u32 value_temp;
  4.         u8 send_value1, send_value2, send_value3, send_value4;

  5.         GPIO_Config();                                                            
  6.         SPI3_Init();                                                              
  7.         USART1_Config();                                                   
  8.         TIM3_Config(9999, 7199);                                      
  9.         WriteToADT7310ViaSPI(0x01,0x00);                       
  10.         AD7193_GPIO23_ENABLE(1);                                      
  11.         
  12.         ADG702_Set(1);                                                               
  13.         AD5160_Set(100);                                                        
  14.         ADG738_Set(0x02);                                                      
  15.         AD7193_RangeSetup(1, AD7193_CONF_GAIN_8);      
  16.         AD7193_ConfigSetup(1, 0);                                       
  17.         AD7193_ChannelSelect(AD7193_CH_0);                       

  18.         while(1)
  19.         {
  20.                 if(flag_1ms == 1)
  21.                 {
  22.                         flag_1ms = 0;
  23.                         
  24.                         AD7193_ChannelSelect(AD7193_CH_0);        
  25.                         value_temp = AD7193_SingleConversion();                       
  26.                         send_value1 = (value_temp * 502)/(0x1000000);                       
  27.                                             
  28.                         usart1_send(0xDD);
  29.                         usart1_send(send_value1);
  30.                 }
  31.         }
  32. }
复制代码

收藏 评论1 发布时间:2016-2-22 11:25

举报

1个回答
any_014 回答时间:2016-2-22 11:53:55
在while循环外有AD7193_ChannelSelect(AD7193_CH_0);这句没事;
加在while循环里就不行。
不过是这句,只要是ad7193相关的函数,加在while循环里,最后读的数就出错。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版