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:使用基于8MHz 时钟 SMCLK 时钟的 I2C 将 ADS122C04 (ADC 24位)与 MSP430FR2633连接

Guru**** 2390755 points
Other Parts Discussed in Thread: MSP430FR2633, ADS122C04

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/751082/ads122c04-interfacing-ads122c04-adc-24---bit-with-msp430fr2633-using-i2c-on-8-mhz-clock-smclk-clock

器件型号:ADS122C04
主题中讨论的其他器件:MSP430FR2633

大家好、

我从下图中执行的引脚连接。
我使用10k 电阻器值作为上拉电阻器、并从8MHz SMCLK 时钟为 I2C 选择了100kbps 的速度。

我正在尝试将 ADS122C04 24位 ADC 与 MSP430FR2633连接

我编写了以下算法:

1.发送复位命令(0x06)

2.写入配置寄存器

a.寄存器0 (0x40)= 0x81;

b.寄存器1 (0x44)= 0x04;

C.寄存器2 (0x48)= 0x00;

d.寄存器3 (0x4C)= 0x00;

//这里我使用的是单次短对话模式和单通道读取模式

3.发送启动命令(0x08);

4.循环

等待 DRDY 引脚转换为低电平;

发送读取命令(0x10);

发送 START 命令后、DRDY 引脚变为低电平。

上述算法我已经实现、每次只能从 ADC 读取数据=[0xFF、0xFF、0xFF]。
我还在 AIN0通道上使用电位计提供不同的电压、范围为0至3.3V、但在 不同的电压下接收相同的数据(数据=[0xFF、0xFF、0xFF])。

以下是我的8MHz 时钟配置:
{
_bis_SR_register (SCG0); //禁用 FLL
CSCTL3 |= SELREF_REFOCLK; //将 REFO 设置为 FLL 基准源
CSCTL0 = 0; //清除 DCO 和 MOD 寄存器
CSCTL1 &=~(DCORSEL_7); //首先清除 DCO 频率选择位
CSCTL1 |= DCORSEL_3; //设置 DCO = 8MHz
CSCTL2 = FLLD_0 + 243; // DCODIV = 8MHz
_DELAY_CYCLES (3);
_BIC_SR_register (SCG0); //启用 FLL
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));//轮询直到 FLL 被锁定

CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;//将默认 REFO (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz
//将 DCODIV 默认为 MCLK 和 SMCLK 源
}

下面是我的 I2C 配置
:{
UCB0CTLW0 |= UCSWRST; //将 eUSCI_B 置于复位状态
UCB0CTLW0 |= UCMODE_3 | UCSSEL_3 | UCMST | UCSYNC;// I2C 主模式、SMCLK
UCB0BRW = 0x33; //将比特率设置为100kHz
UCB0I2CSA = 0x40; // ADC122C04从器件地址
UCB0CTLW0 &=~UCSWRST; //软件复位禁用

}

请勿庸置疑。

此致、

开尔文

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

    我会尽可能简单地开始、并使用示波器或逻辑分析仪来验证您的通信。 如果您有通信照片、请附上、以便我进行验证。

    最初发送重置命令。 请确保在尝试写入寄存器之前等待足够长的时间以完成复位。 尝试在寄存器被写入后读回、以验证寄存器写入是否成功完成。

    如果在发出 START 命令后 DRDY 变为低电平、则通信的一部分似乎至少可用于单字节写入。 如果寄存器被正确写入、您应该会看到 DRDY 以指定的数据速率切换(每50ms 一次)。 如果您看不到 DRDY 切换、则寄存器未正确写入、并且您可能会遇到多字节写入(和读取)问题。 确保从微控制器传输的每个字节都有一个 ACK。 寄存器写入序列应与 ADS122C04数据表第39页的图59相似。 如果在传输的字节之间发出 STOP、则该命令将取消。

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

    要想获得更多帮助、我需要查看通信的范围或逻辑分析仪快照以及用于写入寄存器和读取数据的特定代码。

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

    感谢您的快速回复和宝贵建议。
    我已经尝试了你的所有建议。 此外、使用寄存器读取命令验证我写入寄存器和回读的内容。
    看起来很好。 此迭代中没有错误。

    我的代码在 I2C 配置中几乎没有变化。
    下面是我的 I2C 配置:

    UCB0CTLW0 |= UCSWRST; //将 eUSCI_B 置于复位状态
    UCB0CTLW0 |= UCMODE_3 | UCSSEL_3 | UCMST | UCSYNC;// I2C 主模式、SMCLK
    UCB0BRW = 0x8; //将比特率设置为100kHz
    UCB0I2CSA = 0x40; // ADC122C04从器件地址
    UCB0CTLW0 &=~UCSWRST; //软件复位禁用



    我只更改了 UCB0BRW 寄存器设置。
    将 UCB0BRW = 0x33更改为了 UCB0BRW = 0x8

    更改此设置后、我还会在 ANI0通道上获得准确计数。

    此致、
    Kelvin Kalariya