您好!
我将 FDC2212与外部开关配合使用、因为我必须测量多达16个传感器。 得益于 Arduino Micro、所有功能(FDC 和外部开关)都得到了推动。
我的系统有一些问题、我不知道问题是来自我的软件还是来自 FDC。
如果 FDC 有时没有响应、可能是由于我的软件、或者寄存器设置为 FDC (我在继续之前读回)、或者外部开关、则会出现问题...
因此、我需要确保我正确地为 FDC 设置正确的值、而且我处理外部开关的方式不会给 FDC 带来问题...
谢谢、
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与外部开关配合使用、因为我必须测量多达16个传感器。 得益于 Arduino Micro、所有功能(FDC 和外部开关)都得到了推动。
我的系统有一些问题、我不知道问题是来自我的软件还是来自 FDC。
如果 FDC 有时没有响应、可能是由于我的软件、或者寄存器设置为 FDC (我在继续之前读回)、或者外部开关、则会出现问题...
因此、我需要确保我正确地为 FDC 设置正确的值、而且我处理外部开关的方式不会给 FDC 带来问题...
谢谢、
Yibo、您好!
感谢您的回答、但我想您可以查看我们的寄存器集、以了解是否出现了问题。
下面是一些关于寄存器的附加数据以及在 FDC 上完成的测量:
- Arduino 和 FDC2212之间的 I2C 以100kbps 的速率波特率进行传输
-电路原理图:FDC2212侧
- 使用外部开关的测量程序:
- 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。
您好 Yibo、
我们在进行测量后进入睡眠模式、然后在进行新的测量之前唤醒并进行小延迟、从而解决我们的问题。
在两者之间、我们使用外部开关更改传感器。
我的系统现在可以正常工作数小时、没有任何问题(几分钟前就被阻止了)...
但是、正是由于 FDC、系统出现了问题、因为我们在外部进行了糟糕的开关。
感谢您的支持、我希望我的帖子能帮助其他设计人员。
此致、
Renaud。
您好 Yibo、
我已经检查了 I2C 链路、 而且、两侧都有一些永久的通信(我看到 SDA 信号上有 FDC 应答、SCL 信号上同步良好)、即使我的系统被阻止(没有来自 Arduino 微控制 FDC 和外部开关的数据)。
但我们看到了一些异常情况、即有时 FDC 的 INT OUT 引脚(指示有可用的测量)不会设置为高电平、但相应的 I2C 地址(寄存器 DRDY)显示有可用的测量...每20到30个测量值请求一次。
希望这仍能帮助...
此致、
Renaud。