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.

[参考译文] CCS/ADS114S08EVM:如何通过外部处理器(Tiva TM4C129NCPD)与 ADS114S08EVM 进行通信

Guru**** 2387080 points
Other Parts Discussed in Thread: ADS114S08, ADS114S08B, ADS124S08
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/715645/ccs-ads114s08evm-how-to-communicate-with-ads114s08evm-with-external-processor-tiva-tm4c129ncpd

器件型号:ADS114S08EVM
主题中讨论的其他器件:ADS114S08ADS114S08BADS124S08

工具/软件:Code Composer Studio

我使用板载 J3通过 SPI 与 ADS114S08进行通信。 我使用的外部处理器是 Tiva TM4C129NCPD。 我使用电路板的 RTD (3线制一)通道,并在 AN1-AN2之间连接了一个电阻器。

首先、我初始化了 SSI0模块执行 InitSSI 函数、如下所示:   

空 InitSSI (空)

uint32_t extra;

SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_main | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、SYS_CLK_FREQ);

SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

GPIOPinConfigure (GPIO_PA2_SSI0CLK);// SSI 模块0时钟
GPIOPinConfigure (GPIO_PA3_SSI0FSS);// SSI 模块0帧信号
GPIOPinConfigure (GPIO_PA4_SSI0XDAT0);// SSI 模块0双向数据管脚0 (传统 SSI 模式下的 SSI0TX)。
GPIOPinConfigure (GPIO_PA5_SSI0XDAT1);// SSI 模块0双向数据管脚1 (传统 SSI 模式下的 SSI0RX)。

GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2);

SSIConfigSetExpClk (SSI0_BASE、SYS_CLK_FREQ、SSI_FRF_MOTO_MOTO_1、SSI_MODE_MASTER、10000000、 8);

SSIEnable (SSI0_BASE);

while (SSIDataGetNonBlocking (SSI0_BASE、&extra)){}

使用上述设置、我  成功地将数据发送到 ADS114S08。 为了初始化 ADS114S08、我执行了 Init_ADS114S08_RTD 函数、如下所示:

//*********
// ADS114S08B 定义
//*********
#define RTD_START_COMMAND 0x08    // SPI 数据以在 ADS114S08中启动新转换
#define RTD_CH1_INPUTMUX 0x12       // SPI 数据、分别将 AIN1和 AIN2设置为正输入和负输入选择。
#define RTD_CH1_IDACMUX 0x35        // SPI 数据、分别将 AIN5和 AIN3设置为 IDAC1和 IDAC2的激励电流。

#define RTD_IDACMAG 0x07            // SPI 数据将 IDAC 幅度设置为1mA。
#define RTD_PGA 0x0A                // SPI 数据将 PGA 设置为4。
//#define RTD_datarate 0x3B          // SPI 数据将时钟源设置为内部(4.096MHz)、转换更多设置为单次触发、数据速率设置为1000SPS
#define RTD_datarate 0x14           // SPI 数据将时钟源设置为内部(4.096MHz)、转换更多设置为单次触发、数据速率设置为1000SPS
#define RTD_REF 0x06                // SPI 数据、用于启用正缓冲器和禁用负缓冲器、以及将 REFP1-REFN1设置为基准输入。

#define RTD_RDATA_COMMAND 0x12   // RDATA 命令可读取转换数据
#define RTD_WREG_COMMAND1 0x42  // WREG 命令、以从 INPMUX 开始写入6个器件寄存器数据
#define RTD_WREG_COMMAND2 0x05

空 Init_ADS114S08_RTD (空)

//
//局部变量
//
uint32_t dataRx;

//
//使用"阻塞" Put 函数发送 N 位数据(N = 16位、SSI 配置为 SSIConfigSetExpClk 函数)。
//此函数将等到发送 FIFO 中有空间后再返回。
//这使您可以确保发送的所有数据都将其放入发送 FIFO 中。
//

SSIDataPut (SSI0_BASE、0x42);
SSIDataPut (SSI0_BASE、0x05);
SSIDataPut (SSI0_BASE、RTD_CH1_INPUTMUX);
SSIDataPut (SSI0_BASE、RTD_PGA);
SSIDataPut (SSI0_BASE、RTD_datarate);
SSIDataPut (SSI0_BASE、RTD_REF);
SSIDataPut (SSI0_BASE、RTD_IDACMAG);
SSIDataPut (SSI0_BASE、RTD_CH1_IDACMUX);

while (SSIBusy (SSI0_BASE)){}//等待 SSI0完成传输发送 FIFO 中的所有数据。

//清空接收 FIFO 中的垃圾数据

SSIDataGet (SSI0_BASE、&dataRx);
SSIDataGet (SSI0_BASE、&dataRx);

SSIDataPut (SSI0_BASE、RTD_START_COMMAND);//开始初始转换
while (SSIBusy (SSI0_BASE)){}

//清空接收 FIFO 中的垃圾数据
SSIDataGet (SSI0_BASE、&dataRx);

下图来自我们的逻辑分析仪。 尽管主器件发送数据、但从器件始终发送0x00、这一点很清楚。 嗯、最初我以为这是垃圾数据、所以我可以忽略它、因为我知道我应该一直清空接收 FIFO。 为此、我执行 了两次 SSIDataGet、因为上面可以看到它已清空接收 FIFO (注意:在这里、我假设  SSIDataGet 函数通过读取32位来清空两个 FIFO、 如果我错了、则可以对我进行校正)。 但是、当我仅执行第一个时、函数开始等待。 嗯、如果接收 FIFO 为空、我们就会这样期望、这样我就检查了 SSI_SR_RNE 寄存 器、并意识到即使在执行 SSIDataPut 八次之后、它仍然保持为零。 它听起来接收 FIFO 没有从从器件获取任何数据。  

嗯、我忽略了这一点、并在主循环中执行了以下部分来从从器件读取数据:

SSIDataPut (SSI0_BASE、Dummy_word);
SSIDataPut (SSI0_BASE、RTD_RDATA_COMMAND);// SPI (RTD_RDATA_COMMAND)数据、从 ADS114S08请求 AIN1 - AIN2值
SSIDataPut (SSI0_BASE、Dummy_word);
SSIDataPut (SSI0_BASE、Dummy_word);

while (SSIBusy (SSI0_BASE)){}//等待 SSI0完成传输发送 FIFO 中的所有数据。

SSIDataGet (SSI0_BASE、&dataRx);

结果= dataRx 和0xFFFF;//捕获第二次读取后的最低有效16位数据。

我执行四次 SSIDataPut、希望最后一次接收 FIFO 寄存器将具有有效数据、以便我可以轻松读取。  在评估读取数据后、我执行以下部分以进行下一次读取  

//开始转换以进行下一次读数

SSIDataPut (SSI0_BASE、RTD_START_COMMAND);
while (SSIBusy (SSI0_BASE)){}
SSIDataGet (SSI0_BASE、&dataRx);//忽略结果

 

可以看到、最后16位始终为零、这对我来说是没有意义的。 我还附加了我的设置图片。 对此问题有任何建议吗? 提前感谢...

 


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

    实际上有许多问题。 最大的问题是您使用 SS (或 CS)引脚的方式。 这个引脚必须在整个通信传输过程中保持低电平。 对于 WREG 命令、CS 必须保持低电平、并且不会从命令开始切换到写入的最后一个寄存器。 从 Saleae 影像中、它显示 CS 高电平然后是低电平、然后是6个数据寄存器。 由于数据长度可能有所不同、最好不要使用内置外设 SS (或 CS)引脚、而是使用 GPIO 在代码中手动控制此引脚。 我还建议使用字节传输、而不是16位传输。

    第二个问题是、我们建议在通信中使用0x00作为 NOP、而对于发送的虚拟数据、则使用0xFF。 此外、正如我之前所述、字节传输往往效果更好、因为对于 RDATA 命令、只需发送3个字节、而不是4个字节。 由于 WREG 未正确写入、数据很可能显示为0x00。

    另一个问题是、您已注释掉负基准缓冲器、但您写入的值为0x06、应为0x16。

    我建议在写入寄存器内容后读回这些内容、以验证内容是否正确更改。 我还建议在 START 命令之后监视 DRDY、并等待转换完成(DRDY 从高电平转换为低电平状态)、然后再尝试读取结果。 此外、结果将采用二进制补码。 确保在值有符号时正确处理数据。

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

    尊敬的 Bob:

    我明白你的观点。 实际上、我重新运行 Init_ADS114S08_RTD、得到了以下结果。 这个问题看起来已经解决了。 关于 CS 控制、我想 SSIDataPut 函数控制它。 如果我连续执行 SSIDataPut 函数、CS 必须始终保持低电平、现在我们在下面的新结果中观察到这一点。 关于数据传输的大小、SSIDataPut 的优点是在最后一个位传输完成后、CS 自动变为高电平。 在执行 SSIDataPut 函数时、无法通过 GPIO 可视化 CS 的控制。 如果您澄清这一点、那将非常好。 我已经使用 SSIConfigSetExpClk (SSI0_BASE、SYS_CLK_FREQ、SSI_FRF_MOTO_MOTO_MODE_1、SSI_MODE_MASTER、10000000、 8); 您认为它是16位传输的原因是什么?



    根据您的建议、我将虚拟字更改为0x00。 我相信我已经有字节传输了。 我发送4个字节的原因是为了轻松提取有效数据。 假设我发送了以下内容、并假设接收 FIFO 为空(我不确定这是因为我不知道在  WREG 命令之后应该执行 SSIDataGet 的次数)

    SSIDataPut (SSI0_BASE、RTD_RDATA_COMMAND);// SPI (RTD_RDATA_COMMAND)数据、从 ADS114S08请求 AIN1 - AIN2值

    SSIDataPut (SSI0_BASE、Dummy_word);

    SSIDataPut (SSI0_BASE、Dummy_word);

    ADS114s08将向我发送一个字节的垃圾数据、然后将16位有效数据作为 Data1和 DATA2发送。 由于 FIFO 寄存器为16位、一个字节的垃圾数据和 Data1将同时 位于一个接收 FIFO 中、 而 Data1将位于另一 个接收 FIFO 寄存器中。  我最初只发送一个虚拟字、 将 Data1和 DATA2推入 同一个 FIFO 寄存器中、以便轻松读取。  如果 我的思考过程出错、请更正我的问题。 这可能是错误的、因为我不确定  SSIDataGet  的工作方式

    假设前两个接收 FIFO 寄存器已满。 如果我执行 SSIDataGet (SSI0_BASE、&dataRx)、它是否读取两个接收 FIFO 寄存器并将值分配给 dataRx? 还是一次只读取一个接收 FIFO?

    关于 负基准缓冲器、这是评论错误。

    结果由以下代码处理

    //

    //首先检查 MSB,然后将数字代码转换为电阻

    //

    if ((结果& 0x8000)== 0x8000)

    结果=~(结果- 1);//减1并对结果进行补码

    RTD_RES =(-2 * RREF * Result / PGA)/(65535);//其中65535 =(2^16 - 1)请注意:我们需要更改此设置,因为我们有不同的配置。

    其他

    RTD_RES =(2 * RREF * RESULT / PGA)/(65535);//其中65535 =(2^16 - 1)

    实际上、Saleae Shot 通道4显示了 DRDY。 我将进行检查、并按照您的建议为数据转换提供足够的时间。 实际上、当我启动转换时、我会在转换之后执行延迟、就像

    SSIDataPut (SSI0_BASE、RTD_START_COMMAND);

    while (SSIBusy (SSI0_BASE)){}

    SSIDataGet (SSI0_BASE、&dataRx);

    SysCtlDelay (ADS114S08_DELAY);//延迟一个位(~1.3ms)以完成转换

     

    但是、DRDY 在我的运行中看起来始终处于高电平、并且即使 在我应用您的建议后从从器件读取数据仍为0x00。

     

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

    确保 RESET 引脚处于高电平。 您应该控制这个引脚、因为当电平位移器被禁用时、没有任何驱动这个引脚的东西。 您可以将其绑定到高电平或使用 GPIO 进行控制。

    您可能还会看到由于浮动 START/SYNC 引脚而出现的一些奇怪行为、因此、根据您希望如何操作器件、将其连接至高电平或低电平。

    此外、要清除接收缓冲 FIFO、您应该为发送的每个字节提取一个字节。

    此致、
    Bob B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "此外、要清除接收缓冲区 FIFO、您应该为传输的每个字节取一个字节。"

    为了在执行下面的代码后清除接收缓冲 FIFO、我应该执行6个 SSIDataGet ()对吧? 请详细说明 SSIDataGE()函数的工作原理吗? 提前感谢...

    //
    SSIDataPut (SSI0_BASE、0x42);
    SSIDataPut (SSI0_BASE、0x05);
    SSIDataPut (SSI0_BASE、RTD_CH1_INPUTMUX);
    SSIDataPut (SSI0_BASE、RTD_PGA);
    SSIDataPut (SSI0_BASE、RTD_datarate);
    SSIDataPut (SSI0_BASE、RTD_REF);
    SSIDataPut (SSI0_BASE、RTD_IDACMAG);
    SSIDataPut (SSI0_BASE、RTD_CH1_IDACMUX);
    //
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我询问有关 SSIDataGet ()的更多详细信息,因为如果我执行的次数超过了,此函数将等待接收缓冲 FIFO 有新数据... 我对 SSIDataGet ()函数很困惑?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如您所建议的、我将 START 和 RESET 引脚都连接到 GND、正如您在下面的设置图中看到的那样。 遗憾的是、我仍然从 ADS114S08读取零。 但同样、即使在 I 命令通过 SPI 启动后、DRDY 也始终为高电平。 在接收到 START 命令后、ADS114S08是否不应该立即启动某种转换、即使 WREG 也是错误的?   

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

    尊敬的 Bob:

    在 TI 论坛的讨论中、我曾看到过以下陈述:

    "如果你调用 SSIDataPut ()、后跟 SSIDataGet ()、后跟另一个 SSIDataPut ()、SSIDataGet ()、你会发现传输中实际上会有一个很小的间隙。  可以通过调用 SSIDataPut ()、SSIDataPut ()、SSIDataGet ()、SSIDataGet ()、SSIDataGet ()来消除此差异。

    在实践中、您可以重叠读取和写入以加速该过程。  例如,如果您知道接收数据的命令序列需要发送3个字,则可以3次调用 SSIDataPut (),这将把值加载到 FIFO 中,以便它们可以背对背传输。 然后,您可以在3次之后调用 SSIDataGet ()以读出虚拟响应数据。 "

    如果正确、我应该按如下方式执行 ADS114S08的初始化。 如果我错了、请纠正我的问题?

    Init_ADS114S08_RTD ()

    uint32_t dataRx;

    SSIDataPut (SSI0_BASE、RTD_WREG_COMMAND1);

    SSIDataPut (SSI0_BASE、RTD_WREG_COMMAND2);

    SSIDataPut (SSI0_BASE、RTD_CH1_INPUTMUX);

    SSIDataPut (SSI0_BASE、RTD_PGA);

    SSIDataPut (SSI0_BASE、RTD_datarate);

    SSIDataPut (SSI0_BASE、RTD_REF);

    SSIDataPut (SSI0_BASE、RTD_IDACMAG);

    SSIDataPut (SSI0_BASE、RTD_CH1_IDACMUX);

    while (SSIBusy (SSI0_BASE)){}//等待 SSI0完成传输发送 FIFO 中的所有数据。

    SSIDataGet (SSI0_BASE、&dataRx);

    SSIDataGet (SSI0_BASE、&dataRx);

    SSIDataGet (SSI0_BASE、&dataRx);

    SSIDataGet (SSI0_BASE、&dataRx);

    SSIDataGet (SSI0_BASE、&dataRx);

    SSIDataGet (SSI0_BASE、&dataRx);

    SSIDataGet (SSI0_BASE、&dataRx);

    SSIDataGet (SSI0_BASE、&dataRx);

    SSIDataPut (SSI0_BASE、RTD_START_COMMAND);//开始初始转换

    while (SSIBusy (SSI0_BASE)){}

    SSIDataGet (SSI0_BASE、&dataRx);

    SysCtlDelay (ADS114S08_DELAY);//延迟一个位(~1.3ms)以完成转换

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

    我主要支持 ADS124S08、而不是 Tiva、因此很难提出有关 Tiva 的具体建议。 至于复位引脚、我认为您误解了它。 复位为低电平时、器件保持在复位状态。 该引脚必须为高电平才能工作。 因此、将复位引脚设置为高电平、如果仍有问题、我们可以从此处开始。

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

    至于 SSIDataGet、如果您只是尝试清除 FIFO 中的任何旧数据、请使用函数 SSIDataGetNonBlocking 并在 TivaWare 库中的 SSI.c 文件中定义。 如果 FIFI 中没有数据、该函数将返回0。 您可以使用类似我们使用的内容:

    while (SSIDataGetNonBlocking (SSI0_BASE、&SAWRAY));//从 RX FIFO 中清除垃圾数据

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

    尊敬的 Bob:

    现在、我能够正确读取电阻值。 请参阅下面的"我"结果。 当我在以下函数中使用时、结果为0x4c94

    RTD_RES =(2 * RREF * RESULT / PGA)/(65535);//其中65535 =(2^16 - 1)它得到149。 5689、它是我连接的电阻器的电阻值。

    但我仍然无法读取正确的值、我认为这是编码问题。 在我讨论这个问题之前、我想确保有一件事。 当我发送 START 命令时、它不会产生任何影响 、正如您在下面看到的、因为根据 DRDY 引脚、ADS114S08仍处于转换模式。 我理解了这一点、但为什么当我发送第一个虚拟值时 DRDY (通道4)变为高电平。


    Bob、他介绍了与 Tiva 相关的问题、如果我们可以邀请能够在 Tiva 上帮助我们的人来解决、这将是一个很好的选择。 谢谢。。。

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

    您好 Fatih、

    需要考虑许多因素。  首先、当发出 SPI 时钟时、数据将直接从器件传输出去。  请注意、数据是重复的、并且通过直接读取结果或通过 RDATA 命令显示相同的结果。

    其次、一旦开始发出 SCLK、DRDY 将始终变为高电平(如果处于低电平状态、则在下一次转换完成之前保持高电平)。  请注意 ADS114S08数据表中的图86。  当 DRDY 从高电平转换为低电平时、它将保持高电平、直到转换结束。  如果处于单次模式、DRDY 将在发出 START 命令之前保持高电平、并且在转换完成且结果准备从器件中读出之前不会变为低电平。

    对于 START 命令、您希望看到什么影响?  START 命令在连续转换模式下无效、除非从 IDLE 状态发出的第一个 START 命令启动器件转换。  如果在单次转换模式下发出 START 命令、并且处于 IDLE 状态、则新的转换将开始。  DRDY 不会变为低电平并返回高电平、因为这意味着有效转换已完成且结果就绪。

    由于测量是比例式的、因此您可以进行计算、如所示、因为输出代码将是 RTD 电阻与基准电阻值的比率。  使用电压测量的结果是相同的、只是您有其他数学方法将电压转换回电阻。  激励电流为1mA 时、基准电压为1V (使用1k 欧姆基准电阻器)。  如果 RTD 电阻器的电阻值为150欧姆、我预计电阻器上的电压为150mV。  使用您为确定电阻所示的公式、将电阻值替换为电压值。

    RTD_Voltage =(2 * VREF * RESULT / PGA)/(65535); //其中65535 =(2^16 - 1) 会产生149.5689 mV

    要获得电阻值、请将电压除以电流(149、5689mV / 1mA = 149.5689 Ω)。

    由于温度是根据电阻计算的、因此您提供的初始比例式公式通过浮点数学运算减小了任何计算误差、因为不需要计算电压和电阻。

    现在最后一点让我感到困惑、在开始时、您会说您现在能够读取正确的值、但在下一句中、您认为您存在编码问题、因为您无法读取正确的值。  这是否意味着您在 Saleae 上看到正确的值、但在您的代码中看不到?

    此致、

    Bob B

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

    Tiva 代码在功能方面有很好的文档记录。 使用 ssi.c 文件并查看各种函数。 要开始读取数据,请在 while ()内发出 SSIDataGetNonBlocking ()函数,以便在发送任何数据之前先清空 FIFO。

    如果您放置4个字节的数据、则需要获取4个字节的数据。 对于您所示的读取数据命令序列、您需要丢弃前2个字节、然后捕获接下来的两个字节作为结果。 您需要通过获取 MSB 来正确汇编数据、并通过将数据左移8位将其保存到另一个变量中。 然后获取 LSB、并通过将 LSB 的值添加到 MSB 变量来保存它。 这应该是您的结果。

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

    尊敬的 Bob:

    现在、我能够读取结果。

    如您所述、"DRDY 将在发出 START 命令之前保持高电平、并且在转换完成且结果准备从器件中读出之前不会变为低电平。" 我希望 START 命令 通过将 DRDY 置于高电平而不是 第一个 SCLK 上升沿来启动转换。

    从数据表中的图82可以看出、首次转换完成后、如果器件处于单次转换模式、则器件将进入待机模式。 在待机模式下、我 希望 DRDY  处于低电平、因为第一次转换已完成、并指示数据就绪。 使用 START 命令启动新数据转换。  发出 START 命令后、DRDY 将变为高电平、并且在 新转换 完成之前不会变为低电平、正如您之前所述。   但是 、我无法在结果中观察到这种行为。 看起来 、当 DRDY 处于高电平时、我始终发送 START 命令、 这意味着转换   尚未完成。 根据数据表中的第9.5.3.5节、  如果  器件已经处于转换模式、则 START 命令无效、我的观察结果是在转换期间始终发送 START 命令。

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "现在最后一点让我感到困惑、在我开始时、您说现在可以读取正确的值、但在下一句中、您认为您有编码问题、因为您无法读取正确的值。 这是否意味着您在 Saleae 上看到正确的值、但在您的代码中看不到?"

    是的,我在 Saleae 上看到了正确的值,但在您的代码中没有看到。 但是、正如我先前所说的、现在我可以看到两者中的正确值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Fatih、

    您对 start 命令的使用是正确的。 如果转换已经在进行中、START 命令将不起作用。 为了清晰起见、我更新了我之前的回答、因为我们的某些器件将重新启动转换、但该器件与您更正的情况不同。

    至于您所示 Saleae 照片中的 DRDY、DRDY 在开始时处于低电平、这意味着转换已完成、但尚未从器件读取。 遗憾的是、ADS114S08不够智能、无法了解用户的意图、而是会假设对 DRDY 进行了确认、因此进行通信的原因是从将 DRDY 发回高电平的器件读取结果。 然后、您将知道、当 DRDY 再次以规定的数据速率下降时、START 命令已正确执行。

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

    尊敬的 Bob:

    所以你告诉我,萨利阿的结果是好的。 我只是想确保不会忽略我的 START 命令、因为我在器件仍处于转换状态时发送它。 如果我错了、请更正我、但下面的结果显示、START 命令实际上不会被忽略、并且在前一个命令完成后、转换会再次开始。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上、我稍后将使用电位器并对其进行更改、以查看启动命令是否确实正常工作。 我对此不太怀疑、因为如果 START 命令未起作用、我可能会在第一次转换后继续读取相同的值。 对我来说、唯一的方法是更改电阻器值并观察结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Fatih、

    您会混淆 DRDY 变为高电平与转换启动。 在单次模式下、转换仅从 START 命令或提升 START 引脚开始。 如果您未发送 START 命令、则 DRDY 将在读取前一转换结果时变为高电平、并保持高电平、直到发出 START 命令且转换完成。 如果 START 命令不起作用、则不会看到 DRDY 变为低电平。 但是、由于它确实会变为低电平、因此 START 命令正在工作。

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

    尊敬的 Bob:

    我只是想确保 START 命令 正常工作。

    非常感谢您的帮助。  我们的讨论 内容非常丰富。