您好!
我正在使用 ADS7142、并将其置于手动模式、希望读取两个通道。 我的初始化代码如下:
int Init_ADS7142 (module_number mod)
{
//选择模块连接到的端口。
PCA9547_SelectPort (unsigned char) mod;
ADS7142_WriteReg (mod、REG_ABORT_SEQUENCE、1);
//ADS7142_WriteReg (mod、REG_OFFSET_CAL、1);
ADS7142_WriteReg (mod、REG_CH_INPUT_CFG、0x03);//双通道、单端
ADS7142_WriteReg (mod、REG_OPMODE_SEL、4);//具有自动定序的手动模式
ADS7142_WriteReg (mod、REG_AUTO_SEQUENCE、3);//读取两个寄存器
退货(1);
}
我几乎从您的源代码中获得了代码。 我能够在示波器上查看数据、并验证我是否向芯片发送了正确的数据、即 I2C 地址(ADDR 是浮动的、因此地址为"0011000x"、器件 ACK 是正确的)、 然后是"单个寄存器写入"命令(0x08)、再是寄存器值、再是数据。 我已经检查并验证了所有数据是否正确。
为了读取数据、我发送 I2C 地址并设置读取位、然后根据数据表中的以下状态计时数据输出:

我首先设置寄存器0x1E 中的开始位、然后读取数据。
当我读取数据时、它如下所示:

第一个八位位组是 I2C 地址、读取位被置位、而 ADS7142 ACK。 然后、我将接下来的8位时钟输出、这8位应该是通道1的最高有效字节、但器件不会返回、然后所有后续位都是1、我认为这是不正确的、因为我的输入都在0V 左右、所以我可能会期望这一点 2个最低有效位在周围切换、但大部分在0。
当我希望 SCL 或 SDA 为低电平并具有三态时、我会将该总线位拆裂并将输出驱动为低电平、因此当我希望信号为1时、我的上拉电阻器会将信号拉高。 我的总线上还有其他设备工作正常、所以我相信总线可以正常工作、但我注意到您可能会延长时钟、所以我不知道这是否是问题。 总线的运行频率约为152Khz。
我很确定我已正确初始化了所有内容、但我无法弄清为什么我不读取正确的数据。
谢谢!
John