主题中讨论的其他器件:ADS1018
你(们)好
我在 mpc5777xc 控制器上使用 ADS 1018 ADC,无法获取 ADC 数据,只能获得255个值,请告诉我 DRDY 引脚是否需要监控,以及需要多少次将数据发送到 config reg
谢谢
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.
你(们)好
我在 mpc5777xc 控制器上使用 ADS 1018 ADC,无法获取 ADC 数据,只能获得255个值,请告诉我 DRDY 引脚是否需要监控,以及需要多少次将数据发送到 config reg
谢谢
Avanti、
可能会发生一些事情、但我将首先绘制一个示波器或逻辑分析仪的 SPI 通信图。 了解器件如何响应/CS 线路非常重要。
当为 VDD 供电时、器件的默认设置是处于断电/单冲转换模式。 之后、您需要将器件设置为连续转换模式以启动 ADC、或通过将1写入配置寄存器的位15来启动转换。 之后、您应该能够在 ADC 完成首次转换后从器件中读取数据。
您是否能够使用32位数据传输周期读取转换寄存器? 您的输入电压是多少?您得到了哪些数据? 我会注意到255是 FF、而该器件是12位器件。 它输出12位右对齐、并填充 LSB 零。
在下一篇文章中、概述了要发送到 ADC 的命令、然后显示了通信的波形图。
吴约瑟
您好、Joseph、
首先感谢您的回复。
我已启动 SPI 通信、检查示波器上的所有信号、
我的配置是这样的
SPI 初始化
将2.sending 数据发送到 ADS、这意味着设置配置寄存器、像发送58EB 一样发送数据
在 while 循环中写入(0x58EB)。
SS=0
MUX=100
PGA 001表示 UTP 4 V
mode=continuous
数据速率-3330sps
TS= ADC 模式
上拉使能= 1
NOP 01
0
在 while 1中发送此数据
经过微小的延迟...读取 SPI 的数据、然后得到255
如果数据就绪=0
然后读取数据函数,如数据表中所述,如果数据就绪引脚为低电平,则数据就绪。
请告诉我在这里需要做哪些更改。 我使用1MHz SPI 时钟频率。
提前感谢。
Avanti、
如前所述、我想查看 SPI 通信的示波器截图。 您需要查看/CS、DIN、DOUT 和 SCLK 的图、以确保器件正常通信。 在您获取示波器快照后、将其发布回这里。
此外、我建议使用数据表图13中所示的32位数据传输周期。 通过使用此通信、您将能够看到输出数据和配置寄存器。 您的图应与图类似。
只需检查一下、如果您处于连续转换模式、即使您未读回器件、您也应该能够以数据速率在 DOUT/DRDY 线路上看到周期性脉冲。 您需要在整个时间内保持/CS 为低电平。
吴约瑟
Avanti、
您应该能够根据数据表第16页的数据格式部分来转换输出数字代码。
ADC 将提供一个2字节的输出代码、以对应于一个16位数字。 但是、最后四位应该为0并被截断。 这将产生一个采用二进制补码表示法的12位数字。 以下是获取转换数据的方式:
获取16位数据。
2.删除最后4位0以获取12位数据
3.将此十六进制结果转换为十进制。
4A。 如果十进制数< 2048、那么这就是结果、
4B。 如果十进制数> 2047、则结果=(十进制数- 2^12)
5.测量电压=(结果/2^11)*(正 FSR)。 这意味着、如果 FSR=±2.048、则正向 FSR=2.048。
在 Excel 电子表格中通常很容易将其组合在一起、您可以使用多个测试值尝试此操作。
如果由于 SPI 通信而导致读取数据时遇到问题、您能否布置您在示波器上看到的 SPI 通信?
吴约瑟
Avanti、
如果您使用的是16位传输格式、则无需监控/CS 线路。 /CS 线路仅用作芯片选择、以确定主器件要与哪个 SPI 器件通信。 如果您仅使用一个 SPI 器件、则可能甚至不需要使用/CS、并且可能会将该值绑定到低电平。
您需要监控的线路是 DOUT/ DRDY 线路。 该线路为低电平的转换表示器件已完成转换并且数据可被读出。 通常、最好将该器件用作中断。 如果您在转换完成后等待太长的时间来读取数据。 在下一次转换完成时、数据读取可能会被新数据中断。 如果新转换准备就绪、ADC 不会停止新数据的输出。
如果您在32位数据传输周期中遇到问题、那么读取时会遇到什么错误? 您能否在示波器快照中展示这一点? 我会注意到、我可以想到两个可能的错误。
首先、如果您正在读取32位数据并完成新的转换、DOUT/DRDY 寄存器将立即更新新的 ADC 数据。 这会中断原始读取。 其次、配置寄存器可能不会立即更新。 当您设置配置寄存器时、我相信器件会完成进行中的转换并在转换后更新配置寄存器。 如果您写入配置寄存器、并立即读取寄存器、则可能会读取先前的配置寄存器设置。
吴约瑟
Avanti、
第17页的数据格式部分的数据表中描述了 ADC 数据的转换。 数据采用二进制补码格式、在16位数据字内左对齐。 正满量程(+FS)输入可产生7FF0h 的输出代码、负满量程(–FS)输入可产生8000h 的输出代码。 数据在 SCLK 的下降沿从 SPI 传入。 当我询问原始数据时、我想知道该16位数字是什么、以及您使用的 FSR 是什么。
正如我在前一篇文章中提到的、我想看到 ADC 通过示波器进行的通信。 我已经简要介绍了如何进行转换。 但是、如果您使用 SCLK、DIN、DOUT 和/DRDY 显示示波器激发图、可能会更容易。 接下来、我们可以查看生成的数据并显示转换。
吴约瑟
您好、Joseph、
我正在发送0x421B,这个16位值到 ADC,它们立即读取数据,
以下是我的代码
我的 FSR 为4.096
DSPI_B.PUSHR.PUSHR.R =(uint32_t)((uint32_t)(cmd<<16)+数据);
DSPI_B.SR.B.TXRXS = 1;
响应= DSPI_B.popr.R;
我正在从 PoP 寄存器读取数据、
我要将 DSO 数据连接到 ADC、第一个是 CS、时钟和数据、 最后一个是 ADC 数据。
由于探头尖状凸起、因此体积小、
我不会获得任何常压数据值、但它不断变化、
请告诉我什么时候读取数据?
Avanti、
这里可能会发生一些事情。
发送0x421B 意味着您在温度传感器模式下使用器件。 这可能是一个很好的查看模式、因为如果器件接近室温、您可能需要一个接近0x0C80的值。 您可以将该值与您正在读取的值进行比较。
查看示波器屏幕截图、并根据您的评论:
红色=/CS
绿色= SCLK
黄色= DIN
蓝色= DOUT
现在、这里是我在示波器屏幕截图中看到的问题。 首先、有很多噪声。 由于这种情况、您可能会获得一些错误值、并且 SCLK 上的噪声可能会导致器件在不应该时钟输出数据。 我一定会把它清理干净。 其次、时钟线有一些圆角边线。 我不确定这必然是一个问题、但我希望看到更干净的方波。 第三、/CS 有问题。 与其他数字线路一样、CS 线路的电压范围应为0V 至5V。 但是、根据示波器、/CS 看起来会高于或低于接地±2V。 但是、看起来器件在正确的时间做出响应。 DOUT 在/CS 开始变为低电平时大约达到我预期的时间。 它也会在正确的时间升高。
如果黄线为 DIN、则不发送0x421B。 对我来说、这看起来像0x42EB。 这意味着您将以不同的数据速率读取其中一个输入。 我不确定、因为不应使用寄存器 DR[2:0]=111。
我会检查您的所有连接。 如果您对此有任何问题、请发送原理图以及设置照片。
在读取数据时、不应完全异步读取器件。 如果器件在连续转换模式下使用、器件将以数据速率提供新数据。 您将等待 DOUT/DRDY 变为低电平、然后发送 SCLK 以读取数据。 但是、如果等待时间过长、则新数据可能会中断正在进行的读取。 DOUT 寄存器将更新 MID 读取并损坏输出数据。
如果要对器件进行编程、则需要等待器件设置配置、然后等待数据周期完成转换。 如果您将器件设置为128SPS、则需要等待1/128秒(振荡器时钟变化为+10%)。 如果您在进行中的转换即将完成时设置转换、则该时间大约为8.6ms。
请注意、如果您处于连续转换模式、则该时间将延长2倍。 如果您对配置寄存器进行编程、则在进行中的转换完成后才会设置配置寄存器。 如果将配置寄存器设置为启动新转换、则新配置中的数据将在两个转换周期内无法就绪。
吴约瑟
Avanti、
首先、您是否能够清除使用示波器看到的数字信号? 我担心您的通信中可能会出现数字错误。 第二、您能否发送原理图? 这将有助于调试您正在测量的内容。 如果您从电位计和电阻器获得某种分压器、那么也最好具有这些值。
查看您的结果、可能是正确的、但您可能处于错误的范围内。 例如、如果您处于±6.144V FSR、并且测量的电压为3.5V。 那么您可能会得到:
(3.5V/6.144V)*2^11 = 1167 (这将是48Fh)
此代码接近您看到的1160代码。 请注意、如果在±4.096V FSR 上、则该值会有所不同。 您会看到:
(3.5V/4.096V)*2^11 = 1750 (这将是6D6h)
由于二进制补码表示法、最高正值将为7FFh 或2047的代码。
吴约瑟
您好、Joseph、
今天我有多个问题。 我有以下疑问。
我的 FSR 为6.144
POT 最大电压为3.5
首先,请告诉我,我们将获得16位值,因此最后四位应该为0,否则它将读取。
对于 3.008 v
当我读取 POP 寄存器时、十六进制值为 A90、十进制值为2704
如果我删除最后四位、则 A9表示169个值。该值在任何时候都是恒定值、但如果 POT 电压从3.008降至3.004、则由于波动小、我将得到589个值。 数量差异很大
1.FSR =6.144输入电压3.008,十进制数据=169 (12位)
2、FSR =6.144输入电压=3.004数据=585 (十进制12位)
请向我解释一下它是如何诞生的
2。 另一个是数据表中的数据、数据将采用二进制补码形式。
以上数据是二进制补码或最终数据。
我不知道我获取的数据是正常数据还是二进制补码、因此需要对其进行转换?? 或不是
为此、请帮助我、
非常感谢您的参与。