STM32/STM8技术论坛
直播中

王军

8年用户 1858经验值
私信 关注
[问答]

请问如何用stm32获取AD7746数据

AD7746 芯片是测微小电容的,接口为I2C。
求做过该方面类似问题的大神指点一二,例如寄存器

回帖(15)

王利祥

2018-11-20 15:42:46
先去官网下载AD7746的驱动代码,然后把代码一直到你的STM32上 前期如果对STM32不了解 建议使用I/O模拟I2C
举报

申换换

2018-11-20 15:48:03
器件手册是要看的。官网的代码是最好的参考,
举报

王伟

2018-11-20 15:48:16
对的,参考3楼给出的官网的例子,然后用IO模拟iic的这种方式来,写成32的就可以了。
举报

王军

2018-11-20 15:48:50
我现在用的模拟I2C 但是JLINK调试的时候,查看result  一直是4 (也就是超了量程),怎么办
举报

王伟

2018-11-20 15:49:44
我不知道你的result指的是你设置的变量还是?回答帖子麻烦你能说清楚一些。
但是既然模拟iic,那么首先用最简单的办法来操作不就行了,用来验证iic读写是否OK么。对吧。我就用最简单的办法来实现,不知道你是怎么来验证的。
另外说个题外话,如果模拟iic建议你看看原子的例程,如果用硬件iic建议你看看野火例程。
我举个我验证iic是否读写OK的例子你来看,当然可能您会有更好的方法。
  1.     I2C_EEPROM_BufferRead(read_table,0x0000,1024);//先读一次数据,read_table[1024] eeprom的大小设置为1024

  2.     memset(write_table,0,1024);//清空write_talbe这个数组,write_table[1024] eeprom的大小设置为1024
  3.    
  4.     I2C_EEPROM_BufferWrite(write_table,0x0000,1024);
  5.     I2C_EEPROM_BufferRead(read_table,0x0000,1024);

  6.     for(i2c_cnt =0;i2c_cnt<10;i2c_cnt++)

  7.        {            write_table[i2c_cnt] = (u8) i2c_cnt;
  8.        }
  9.    
  10.     I2C_EEPROM_BufferWrite(write_table,0x0000,10);
  11.     I2C_EEPROM_BufferRead(read_table,0x0000,10);

  12.     if(memcmp(read_table,write_table,10)==0 )
  13.         {
  14.             LED1_ON;
  15.                         //可以利用memset来清空write_table
  16.         }
  17.     else
  18.         {
  19.             LED1_OFF;
  20.             delay_ms(300);
  21.         }
举报

王军

2018-11-20 15:50:03
是用I2C方式,然后RESULT是过去电容的值。现在单步调试就是发送了地址之后没有ACK应答。
举报

王军

2018-11-20 15:50:48
现在检查出错误之后,可以通过I2C通信,但是读出来的值一直是FFFFFF
举报

王伟

2018-11-20 15:51:11
所以啊,证明的你模拟的iic是有问题的哦,所以你把注意力还是集中在模拟iic的代码上哦。
举报

王伟

2018-11-20 15:51:24
那我就不知道了,你这个片子我也没有用过,前面只是大概的跟你探讨下思路
举报

王军

2018-11-20 15:52:45
好吧,最后发现还是以前的问题,没有ACK返回。但是在这之前的CLK,SDA都是按照说明写的,现在很茫然
举报

王伟

2018-11-20 15:53:06
从官网的例程中,没有启发?还是没有下载官网的例程?
举报

王军

2018-11-20 15:53:18
已经能通过i2c,但是获取的数据感觉有问题。
举报

王伟

2018-11-20 15:53:32

楼主啊,这个不能靠感觉啊。你计算一定要有肯定的数据的。你这个不是计算电容的吗,那你就拿几个小电容(规格一定的)来用这个芯片来计算。这样更有理由说明你的算法等等的是否正确呢。
以上,我只是举个例子,实际是不是这样做,还是要看你的电路跟程序适用的环境等等的呢。
举报

王军

2018-11-20 15:53:48
因为之前我用的评估板,ADI公司有软件,上位机,采用cypress的芯片什么的。然后我接入可变电容之后,差不多在0上下浮动,但是我这次是自己用ADI的芯片,接入同样的传感器,连接stm32.读出来的数接近于-4pf(AD7746量程约为-4.096——4.096)。
举报

王伟

2018-11-20 15:54:24
想必你提到的cypress的芯片和ADI的这个芯片还是有些差异的。因为我没有用过,所以过多的建议不能深入的给你,抱歉哦。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分