This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS122C04:在 Arduino IDE 中配置 ADS122C04时出现问题

Guru**** 2390735 points
Other Parts Discussed in Thread: ADS122C04
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/903993/ads122c04-problems-in-configuring-ads122c04-in-arduino-ide

器件型号:ADS122C04

尊敬的所有人:

我无法通过 I2C 使用 Arduino 设置转换器芯片 ADS122C04的配置寄存器。

Arduino 具有用于 i2c 通信的线库。 代码包含以下内容

1重置芯片(一个字节)

2写入所有四个寄存器的寄存器命令(WREG)和寄存器数据(数据表的图59)

3-开始转换(一个字节)

总之、在一个 i2c 帧中使用一个字节数组发送十(10)个字节、如下所示:

 ///----------------------------------------------------------

int ADR_THeiz_Aitt = 0x40;                                                //器件的十六进制地址  

字节 InitArray[10]={6、64、54、68、10、 72、5、76、112、8};    //配置数组

 

     Wire.beginTransmission(ADR_THeiz_Austritt);          // 与从属设备通信

    Wire.write (InitArray、10);                                                 //字节数组在 ACK 握手时发送到从设备            

      Status = Wire.endTransmission ();                                 //status 请参阅 https://www.arduino.cc/en/Reference/WireEndTransmission

      serial.print ("状态初始化=");

      serial.println (status);

  ///----------------------------------------------------------

STATUS 是一个字节、表示传输的状态:

0:成功

1:数据太长、无法放入发送缓冲区

2:地址发送时接收到 NACK

3:发送数据时接收到 NACK

4:其他错误

 配置后,当读取寄存器0等值时,结果为0!!

对 for 循环执行了第二次尝试

 ///----------------------------------------------------------

 对于(int i=0;i<10;i++)

 {

   Wire.beginTransmission(ADR_THeiz_Austritt);

    Wire.write (InitArray[i]);                                                      

    //延迟(10);

 状态= Wire.endTransmission ();                                       

  serial.print ("状态初始化");

 serial.print(i);            //打印数组元素号

     serial.println (status);   //打印 transmersion 的状态

      }

 ///----------------------------------------------------------

打印功能结果如下:00、10、23、30、43、50、63、70、83、90、这意味着:

i=0、InitArray[i]=6、status =0 ->芯片复位成功

i=1、InitArray[i]=64、status =0 ->调整寄存器0成功

i=2、InitArray[i]=54、status =3 --> 寄存器0的值未传输!! (同样适用于所有寄存器)

i=9、InitArray[i]=8、status =0 ->启动芯片成功

我的问题:您知道我为什么不能在寄存器中输入值吗?

非常感谢!

是的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    伊利斯、您好!

    欢迎来到 E2E 论坛!  检查通信问题的最佳方法是使用示波器或逻辑分析仪确保您认为代码中发生的情况实际上正在传输。

    在第二次代码迭代中、您一次寻址和写入一个字节、WREG 命令实际上是一个2字节事务。  RESET 命令是一个单字节命令、因此器件通信将起作用。  然而、在写入寄存器时、您发出 WRITE 命令、然后在数据被发送前发出 STOP。  在下一次传输中发送数据时、操作未知、将被拒绝。

    此致、

    Bob B