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.

[参考译文] ADS124S08:未返回数据

Guru**** 2589280 points
Other Parts Discussed in Thread: ADS124S08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/970004/ads124s08-data-not-being-returned

器件型号:ADS124S08

您好!
我正在尝试从 ADS124S08获取读数。 使用 ANCOM (引脚1)作为负输入选择(ANCOM 接地)、在单端模式下对器件进行初始化。 我正在使用 Raspberry PI 4和 SPIDEV 库向芯片发送命令。

我随附了我的 python 代码以及在 Eagle 中设计的电路板布局。 我仅通过命令和读取寄存器与芯片进行通信。 我计划使用 AIN0-AIN11、但为了进行测试、我现在尝试使 AIN0正常工作。


---- 声明的寄存器--

输入多路复用器寄存器(0x0C)
增益设置寄存器(0xE0)
数据速率寄存器(0x74)
REF (0x19)
IDACMAG (0x00)
IDACMUX (0xFF)
VBIAS (0x00)
SYS (0X11)
OFCAL0 (0x00)
OFCAL1 (0x00)
OFCAL2 (0x00)
FSCAL0 (0x00)
FSCAL1 (0x00)
FSCAL2 (0x40)
GPIODAT (0x00)
GPIOCON (0x00)

从
时间导入 sleep
导入操作系统
导入 sys#clear

terminal
os.system ("clear")
sys.tracebacklimit = 0 #suppress traceback errors

#--- 初始化变量/命令--- #
SPI_BUS = 0 # spidev0
SPI_device = 0 # spidev0.0
SPI_clock = 125000 # 125kHz limit

# setup SPI
= spidev.SpiDev()
SPI.open (SPI_bus、SPI_device)
SPI.max_speed_Hz = SPI_clock
SPI.mode = 1

NOP = 0x00 #NO OPERATION 命令
WAKEUP = 0x02 #WAKEUP 命令
PWRDWN = 0x05 #POWERown 命令
复位= 0x06 #RESET 命令
START = 0x08 #START 命令
STOP = 0x0A #STOP 命令
RDATA = 0x13 #read data 命令

#function、用于处理 SPI 通信并将命令打印到终端
def 输出(varName、cmd):
打印(varName)
Print ("已发送到 ADC)------ >"、cmd)
DATA_IN =[]
DATA_IN = SPI.xfer (cmd、100000)
打印(f'从 ADC 接收-->{DATA_IN}')
打印("---------------------------------------------------------- ")
睡眠(0.3)

尝试:
编号-------------------------------------------------------- 初始化 ADC 发送--- 编号
输出("WAKEUP - 0x02"、[NOP、WAKEUP]) 唤醒 ADC
输出("reset- 0x06"、[NOP、reset]) 复位 ADC

输出("声明 PGA、数据速率、基准、计算寄存器"、[0x43、0x02、 0xE0、0x74、0x19])#从第3个寄存器开始并声明寄存器3、4、5
Output ("声明系统控制寄存器"、[0x49、0x00、0x11])#声明寄存器9

输出("到0x1C 的输入多路复用器"、[0x42、0x00、0x0C])

输出("START - 0x08"、[START]) #START ADC
N = 0

当为真时:
输出(f"[{n}]状态"、[0x21、0x00、0x00])
输出(f"[{n}] RDATA 命令"、[0x12、0x00、0x00、0x00、0x00])
N = n + 1
睡眠(3)

最后:
打印("正在停止...\n")
输出("stop"、[stop])
输出("PWRDWN"、[PWRDWN、NOP、NOP])
SPI.Close() 

发送到 ADC 的读取状态位0x21 (十进制33)。 返回0x80 (十进制128或二进制0b10000000)。 这是因为未清除状态寄存器中用于测试的 FL_POR 标志。 寄存器中的 SENDSTAT 位已经被打开。 发送 RDATA 命令后、我应该会收到128个字节的信息、后跟3个字节的信息。 每次发出 RDATA 命令时、我都只收到0。

请提供任何帮助。 如果需要更多信息、请告诉我。

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

    尊敬的 Alex:

    欢迎来到 E2E 论坛! 我不确定您的延迟函数的时序、但您需要确保在发送 RESET 命令和 WRITE 寄存器命令之间存在足够的延迟。

    此外、我建议使用示波器或逻辑分析仪监控您的通信、以确保通信正确。  CS 引脚必须在整个通信事务期间保持低电平。  这意味着、对于写入寄存器等多字节命令、CS 引脚无法在字节之间切换、否则通信将在 CS 的上升沿取消。  请向我发送任何示波器或逻辑分析仪快照以进行评估。

    我会尽量简化操作、以帮助排除故障。  例如、即使在断电模式下也要让内部基准保持受电状态、并使用内部振荡器代替外部时钟。  确保 RESET 被拉至高电平、并且存在所有必需的电源电压。

    您正在单次转换模式下运行。  使用示波器监控 DRDY 输出、以查看 DRDY 是否在 START 命令之后从高电平转换为低电平。  20sps 时、DRDY 应从高电平转换为低电平、信号转换结束、结果准备从器件中读取。  在发出 START 命令后尝试读取数据之前、请确保至少等待50ms (20sps 周期)以完成转换。

    此致、

    Bob B

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

    尊敬的 Bob:

    感谢您的快速回复! 我将尽力回答您之前的问题、然后提供一些示波器快照。

    1. 我不确定您的延迟函数的时序、但您需要确保在发送 RESET 命令和 WRITE 寄存器命令之间存在足够的延迟。
      1. 我的每个命令之间的当前延迟为1秒。 我在每条命令之间已达到3秒、但结果始终相同。

    2. CS 引脚必须在整个通信事务期间保持低电平。  这意味着、对于写入寄存器等多字节命令、CS 引脚无法在字节之间切换、否则通信将在 CS 的上升沿取消。  请向我发送任何示波器或逻辑分析仪快照以进行评估。
      1. 通道1是时钟。 通道2是 MISO。 通道3是 MOSI。 通道4为 CS。 在下图中、我正在读取寄存器1 (0x21)、仅读取1寄存器(0x00)、并为来自 ADC 的返回字节(0x00)计时。 有一个返回值(0x80)。 由于我不会清除状态寄存器中的 FL_POR 位、因此预计会返回该值。 CS 引脚在命令执行期间保持低电平。 这是使用 Raspberry PI 上的外部时钟。



    3. 我会尽量简化操作、以帮助排除故障。  例如、即使在断电模式下也要让内部基准保持受电状态、并使用内部振荡器代替外部时钟。  确保 RESET 被拉至高电平、并且存在所有必需的电源电压。
      1. 即使在断电模式下、我也已将内部基准更改为通电、但这对输出没有不同的影响。 复位引脚始终被拉高。 我尝试改用内部振荡器、但这似乎会破坏 Raspberry PI 和 ADC 之间的通信、因为时钟不再同步。 我确信我没有正确使用内部振荡器、也不确定如何继续使用。 目前、我已切换回使用来自 Raspberry PI 的125kHz 时钟。


    4. 您正在单次转换模式下运行。  使用示波器监控 DRDY 输出、以查看 DRDY 是否在 START 命令之后从高电平转换为低电平。  20sps 时、DRDY 应从高电平转换为低电平、信号转换结束、结果准备从器件中读取。  在发出 START 命令后尝试读取数据之前、请确保至少等待50ms (20sps 周期)以完成转换。
      1. 通道1是时钟。 通道2是 MISO。 通道3是 MOSI。 通道4是 DRDY。 命令之间的延迟时间为1秒。 发出 START 命令后、DRDY 绝不会变为低电平。

    再次感谢您的帮助。 希望尽快收到您的回复!

    -Alex

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

    尊敬的 Alex:

    我认为可能会对我所说的时钟有误解。  ADC 主时钟的器件时钟之间没有同步。  我不是说 SCLK、而是说 ADS124S08的主时钟。  内部振荡器以4.096MHz 的标称外部时钟频率运行。  要使用内部振荡器、您需要将 CLK 引脚(17)设置为低电平、否则您必须在 CLK 引脚上提供至少2MHz、最高4.5MHz 的时钟。  此外、您还需要为使用外部时钟设置适当的寄存器设置。

    外部时钟将决定 ADC 的转换速率。  例如、如果您在 CLK 引脚上应用了2.048MHz 的外部时钟、则完成转换所需的时间将是4.096MHz 的两倍。  转换结果时序将随输入时钟频率而变化。

    为了简化操作、我要在加电时将引脚17上的分线板连接设置为逻辑低电平。  对于寄存器0x04设置、请确保位6 (CLK)为低电平、这是使用内部振荡器的默认设置。

    此致、

    Bob B

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

    尊敬的 Bob:

    就是这样! 我不了解 SPI 时钟与内部时钟的关系。 内部时钟已重新打开、我现在正在接收数据。 感谢您的所有帮助!

    -Alex