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.

[参考译文] ADS1298:无法读取寄存器内容

Guru**** 2618835 points

Other Parts Discussed in Thread: ADS1298

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/690489/ads1298-cannot-read-the-registers-content

器件型号:ADS1298

您好!

在我们的项目中、我们将通过 AT91SAM7S 微控制器试用采用 ADS1298 (共4个 ADC)的有效负载板。 为了确保 ADC 在开发阶段遵循指令、我们尝试通过 SPI 总线检索所有26个寄存器内容、但仅获取0。 以下是用于读取寄存器的代码:

uint8_t adcRegisterContent[26]={0};  //用于存储寄存器的数组

SPI_Transfer (ADS1298_1.SPI.cs、SDATAC、SPI_Last); //连续发送停止读取数据指令
      
SPI_Transfer (ADS1298_1.SPI.cs、RREG | 0x00、SPI_CONTINUE);  //发送读取寄存器指令、首先读取寄存器0
SPI_Transfer (ADS1298_1.SPI.cs、25、SPI_CONTINUE);//要求读取25 + 1寄存器
for (uint8_t I = 0;I < 26;I++)
       adcRegisterContent[i]=(uint8_t) SPI_Transfer (ADS1298_1.SPI.cs、0x00、i==25? SPI_LAAST:SPI_CONTINUE); //尝试检索每个寄存器的内容
      
SPI_Transfer (ADS1298_1.SPI.cs、RDATAC、SPI_LAST); //连续发送读取数据指令

函数
uint16_t SPI_Transfer (uint8_t componentChipSelect、uint16_t dataToSend、uint8_t spiMode)
返回 SPI 总线接收的数据、spiMode 决定片选是否保持活动(SPI_CONTINUE)(SPI_LAST_LAST])。

AT91SAM7S 和 ADS1298之间通过 SPI 进行通信的速度为2MHz、并根据数据表(SCLK、MISO 和 MOSI 相位)进行相应配置、ADS1298使用2.048MHz 的外部时钟、并配置为以24位分辨率每秒500次采样。 我们能够在连续模式下读取数据并运行 GPIO (GPIO 读数与状态字中的某些不一致)、但我们无法检索寄存器的内容。

SPI clk、cs、MISO 和 MOSI 上的示波器读数告诉我们、AT91SAM7S 发送的指令是它们预期的样子、并且 MISO (DOUT)在它应该是什么时保持为0。

我们用于 ADS1298的启动顺序如下:
它们由两人一组安装在独立供电的有效负载板上、并通过三态门进行隔离。
-为电路板加电、只要电路板打开、三态栅极就会打开、并且我们接收来自主电源和有效载荷电路板电源的电源正常信号、
 此时、精密时钟馈送到 ADS1298;
等待300ms;
在 ADS1298的 RESET 引脚上发送2ms 脉冲;
通过 SPI 发送 SDATAC 指令
通过 SPI 发送寄存器 CONFIG1-4、GPIO 和 CH1-8SET 的配置;
-将 Start Measure (开始测量)引脚设置为 High (高)、这样我们就不会在不需要时接收到数据就绪信号。

RDATAC (通过 SPI)和 START (通过引脚 Start Measure (开始测量)设置为 Low (低电平)指令将在稍后需要测量时设置

您是否能看到有什么原因可以解释为什么我们无法读取 ADS1298寄存器的内容?
我很乐意提供所需的更多信息。

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

    Julien、您好!

    感谢您的发帖、欢迎来到我们的论坛!

    [引用用户="Julien Amand"]

    -将 Start Measure (开始测量)引脚设置为 High (高)、这样我们就不会在不需要时接收到数据就绪信号。

    RDATAC (通过 SPI)和 START (通过引脚 Start Measure (开始测量)设置为 Low (低电平)指令将在稍后需要测量时设置

    [/报价]

    请您澄清一下您的意思吗? START 不是低电平有效信号。 因此、当您希望 ADC 进行转换时、应将 START 设置为高电平;当您想停止转换时、应将 START 设置为低电平。 但是、这对读取寄存器没有影响。 只要您处于 SDATAC 模式、就可以读取寄存器内容。

    4个 ADS1298器件是采用菊花链还是级联配置? 或者、您是否仅与其中一个通信以读取寄存器内容?

    请在 配置器件之前尝试读回寄存器内容。 只需发送 SDATAC 后接0x20 0x19、并读取所有26个寄存器的默认内容。 或者、通过发送0x2n 0x00尝试一次读取一个寄存器、并在接收到每个寄存器设置后递增"n"。

    此致、

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

    [引用用户="Ryan Andrews"]

    -将 Start Measure (开始测量)引脚设置为 High (高)、这样我们就不会在不需要时接收到数据就绪信号。

    [/报价]
    我的 µC、我们在 START 引脚上使用硬件逆变器、我从 T Ü V 侧读取代码、这是我的 lapus。 因此、为了明确说明、我将 ADC 输入引脚 START 设置为低电平以禁用 DRDY 信号、然后在需要测量时将其设置为高电平。

    4个 ADC 采用级联配置、在此处提供的示例代码中、我只尝试读取一个 ADS1298、但使用相同的代码来读取每个单独的 ADC。

    我将实施您建议的内容、稍后再讨论结果

    此致、