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.

[参考译文] FDC2212:寄存器设置和对 I2C 通信的怀疑、可能会被随机阻止

Guru**** 2540720 points
Other Parts Discussed in Thread: FDC2212

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/623957/fdc2212-register-setting-and-doubt-about-i2c-communication-that-may-be-blocked-randomly

器件型号:FDC2212

您好!

我将 FDC2212与外部开关配合使用、因为我必须测量多达16个传感器。 得益于 Arduino Micro、所有功能(FDC 和外部开关)都得到了推动。

我的系统有一些问题、我不知道问题是来自我的软件还是来自 FDC。

如果 FDC 有时没有响应、可能是由于我的软件、或者寄存器设置为 FDC (我在继续之前读回)、或者外部开关、则会出现问题...

因此、我需要确保我正确地为 FDC 设置正确的值、而且我处理外部开关的方式不会给 FDC 带来问题...

谢谢、

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

    这似乎不是由 FDC 造成的。

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

    Yibo、您好!

    感谢您的回答、但我想您可以查看我们的寄存器集、以了解是否出现了问题。

    下面是一些关于寄存器的附加数据以及在 FDC 上完成的测量:

    -          Arduino 和 FDC2212之间的 I2C 以100kbps 的速率波特率进行传输

             -电路原理图:FDC2212侧

     

    -         使用外部开关的测量程序:

    • 切换到 FDC2212中的内部通道1:未连接任何设备(悬空)
    • 16个外部开关上的一个预期启用
    • 在 FDC2212中切换到内部通道0 (16个外部开关共用)
    • 进行测量
    • 也可以在16个外部开关中的每个开关上永久执行此周期。

     

    -         FDC 寄存器:我们读回写后存储的数据

    #define FDC_TBSIZE 7.

     

    // FDC2212配置表

    //                                        ADR          MSB  LSB

    //设置通道0

    const 字节 fdcConfigTab[FDC_TBSIZE * 3]={clock_dividers_CH0、0x20、0x01、

                                          Drive_Current_CH0、0x70、0x00、

                                          SETTLECOUNT_CH0  、0x04、0x00、

                                          RCOUNT_CH0      、0xFF、0xFF、

                                         STATUS_CONFIG    、0x00、0x01、

                                          MUX_CONFIG      、0x00、0x04、

                                          Config          、0x0A、0x01

                                        };

    //设置通道1

    const 字节 fdcConfigTabCh1[FDC_TBSIZE * 3]={clock_dividers_CH1、0x20、0x01、

                                            Drive_Current_CH1、0x73、0x81、

                                            SETTLECOUNT_CH1  、0x04、0x00、

                                           RCOUNT_CH1      、0xFF、0xFF、

                                            STATUS_CONFIG    、0x38、0x21、

                                            MUX_CONFIG      、0x00、0x0C、

                                            Config          、0x4A、0x81

                                          };

     

    const 字 fdcConfigTabMask[FDC_TBSIZE]={0x33FF、//clock_dividers_CH0

                                          0xF800、  //DRIVE_CURRENT_CH0

                                          0xFFFF、  //SETTLECOUNT_CH0

                                          0xFFFF、  //RCOUNT_CH0

                                          0x3821、  //STATUS_CONFIG

                                          0xE007、  //MUX_CONFIG

                                          0xEA00    //配置

                                        };   

     

    备注:根据数据表,常量 fdcConfigTabMask 不允许写入我们不必写入的保留区域。

     

    -         阅读测量值:

    unsigned long muxRdMesure()

    unsigned long rdValue;

    a、b;

     

    //结果讲座(优化可能的等效字 les 4个八位位组和1个 fois)

    A = fdcRdRegister (FDC_ADR、DATA_CH0);

    b = fdcRdRegister (FDC_ADR、DATA_LSB_CH0);

     

    rdValue = A & 0x0FFF;// les 4 bit de poids fort ne sont pas des datas

    rdValue <<= 16;

    rdValue += b;

     

    //演讲状态为入门修剪器提供支持

    a = fdcRdRegister (FDC_ADR、STATUS);

     

    返回读数值;

     -         这是上面使用的 fdcRegister 函数(调用 Arduino I2C 函数):

    字 fdcRdRegister (int FDC_Addr、byte 寄存器)

    字节 A = 0;

    字节 b = 0;

    字值= 0;

     

    Wire.beginTransmission(FDC_Addr);

    Wire.write (Register);

    wire.endTransmission ();

    Wire.requestFrom (FDC_Addr、2);

    while (Wire.Available ())

      a = Wire.read();

      b = Wire.read();

    值= A;

    值<<= 8;

    值+= b;

     

    返回值;

     

     

    因此,我希望我的数据不是太具体,但这些是用于与 FDC 通信的软件链接,我没有针对所有系统的特定代码。

     

    请随意告诉我数据是否足够。

    此致、

    Renaud。

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

    很遗憾、我们无法提供 Arduino 代码指导。

    我建议在没有开关的情况下测试 FDC、以确保其按预期工作。

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

    您好 Yibo、

    我们在进行测量后进入睡眠模式、然后在进行新的测量之前唤醒并进行小延迟、从而解决我们的问题。

    在两者之间、我们使用外部开关更改传感器。

    我的系统现在可以正常工作数小时、没有任何问题(几分钟前就被阻止了)...

    但是、正是由于 FDC、系统出现了问题、因为我们在外部进行了糟糕的开关。

    感谢您的支持、我希望我的帖子能帮助其他设计人员。

    此致、

    Renaud。

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

    很高兴知道它现在正在工作。 感谢您的分享。 社区可以从您的经验中受益。

    我刚刚和同事讨论过这一点、我们仍然不希望发生这种情况。 不确定它是否与 Arduino 上的 I2C 相关。 为了完全了解发生这种情况的原因、您可以探测传感器输入引脚、INTB 引脚和 I2C、以确保信号符合预期。

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

    您好 Yibo、

    我已经检查了 I2C 链路、 而且、两侧都有一些永久的通信(我看到 SDA 信号上有 FDC 应答、SCL 信号上同步良好)、即使我的系统被阻止(没有来自 Arduino 微控制 FDC 和外部开关的数据)。

    但我们看到了一些异常情况、即有时 FDC 的 INT OUT 引脚(指示有可用的测量)不会设置为高电平、但相应的 I2C 地址(寄存器 DRDY)显示有可用的测量...每20到30个测量值请求一次。

    希望这仍能帮助...

    此致、

    Renaud。