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.

[参考译文] ADS131M02:ADC

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1320935/ads131m02-adc

器件型号:ADS131M02
主题中讨论的其他器件: ADS1235

您好!

若要在 AM243x Launchpad 上构建 SPI 接口以从 ADS131M02 ADC 读取数据、请提供堆栈库或介绍如何在 SPI 接口中读取数据。

谢谢。

阿比纳亚

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

    尊敬的 

    以下链接中的示例代码可以很好地开始您的工作。  

    SBAC254  -  ADS131M0x 示例 C 代码

    此外、请查看 ADS131M02数据表中8.5.1.7 SPI 通信帧会话中的详细信息。 下图是此 ADC 的典型 SPI 时序、您可以监测/DRDY 信号或将该信号用作  AM243x 处理器的中断、/DRDY 的下降沿指示数据已准备好读取、 然后、您可以发送 RREG、WREG 命令来读取或写入寄存器、或直接发送 SCLK 时钟、方法是发送足够的0数据(NULL)以通过 SPI 接口从 ADC 检索转换数据。

    此致、

    戴尔

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

    尊敬的 Dale Li:

    感谢您发送编修。

    称重应用使用 ADS1235 (模数转换器)和1022称重传感器。 不过、我们起初使用的是 ADC 15 点击驱动器模块本身的 ADS131M02、我们需要确定如何通过 SPI 接口使用该 ADC 来收集数据、包括 ADC 配置、校准和滤波。

    您首选 link ads131m02代码作为 MSP430控制器、但我们也使用 AM243x launchpad

    在如何解读模拟数据方面、我们仍需要您的帮助。

    谢谢!

    阿比纳亚

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

    尊敬的 

    这是 C 代码、  经过 一些修改后应该能够用于其他处理器。 这是我们针对 ADS131M0x 拥有的唯一示例代码。 正如我所说、您还可以检查 ADS131M02数据表中的时序和详细信息、如果您在从 ADC 收集数据时遇到任何问题、我可以提供帮助。

    此致、

    戴尔

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

    尊敬的 Dale Li:

     非常感谢 您的帮助!

    是的、我更改了 AM243x Launchpad 中的 C 代码、但我不确定该函数中应在何处接收 ADC 数据。   

    这是在 ads131m0x 中修改的 c 文件  

    ...   

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

    尊敬的 

    示例代码对  每个函数和大多数代码行都有详细的说明和解释。 希望大家 先了解一下细节。

    读取转换数据的函数是"ReadData (ADC_CHANNEL_DATA * DataStructuret)"。在 ads131m0x.c 文件中、您必须在主程序中调用此函数。 但是、 在调用 "ReadData (ADC_CHANNEL_DATA * DataStruct)" 函数读取数据之前、必须检查主程序循环中的"flag_nDRDY_interrupt"标志是否为真。 当/DRDY 信号触发中断并且在 hal.c 文件中执行"void GPIO_DRDY_IRQHandler ()"中断例程时,"flag_nDRDY_interrupt"的标志设置为"True"。  

    读取数据还有另一种替代解决方案,您可以 在 hal.c 文件中的"void GPIO_DRDY_IRQHandler ()"中断例程中调用"ReadData(ADC_CHANNEL_DATA *DataStruct)"函数,而不是在主程序循环中调用它。

    我还强烈建议您查看自述文件、该文件已逐步显示如何使用此示例代码:

    如何使用此代码:
    -------------------------------------------------------
    在编写自己的代码时,请参考*ads131m0x.c*文件,以获取有关如何执行基本 ADC 操作的示例,如寄存器读/写和读取数据...


    将示例代码复制并粘贴到您的工程中、并根据需要更新文件以访问提供的 API ...
     1.`ADS131M0x``HAL`模块文件复制到固件工程中。
     2.*hal.h*中的库引用添加到特定于处理器的库文件中。
     3.编辑*hal.c*中的所有函数实现,为您的处理器和特定于处理器的库 API 提供指定的功能。   
     4.程序中的某个位置包含对*hal.h*的引用,并调用**InitADC ()**函数以初始化连接到 ADC 的 MCU 外设。
     5.在您的应用程序(从*main.c*或处理 ADC 通信的任何地方)中包含对*ads131m0x.h*的引用。 `应该能够开始在代码中调用 μ`ADS131M0x μ 模块函数。
    此致、
    戴尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dale Li:

    谢谢、抱歉耽误了响应。

    是的、当我使用"ReadData (ADC_CHANNEL_DATA *DataStructurt)"函数读取数据时、我在主程序循环中检查了"flag_nDRDY_interrupt"的标志是否正确、但在该调试会话没有使用该标志时、它会退出该函数。

    谢谢。此致、

    阿比纳亚

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

    尊敬的 ABI Bharathi:

    Dale 目前不在办公室、他将在本周晚些时候回复

    但是、如果您的串行通信遇到问题、请向我们发送清晰标记的逻辑分析仪或通信示波器截图、以便我们帮助诊断问题。

    -Bryan

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

    您好、Bryan:

    感谢您的答复...

    uint8_t spiSendReceiveByte(const uint8_t dataTx)
    {
        /*  --- INSERT YOUR CODE HERE ---
         *  This function should send and receive single bytes over the SPI.
         *  NOTE: This function does not control the /CS pin to allow for
         *  more programming flexibility.
         */
    
        // Remove any residual or old data from the receive FIFO
        uint32_t junk;
        while (SSIDataGetNonBlocking(SSI_BASE_ADDR, &junk));
    
        // SSI TX & RX
        uint8_t dataRx;
        MAP_SSIDataPut(SSI_BASE_ADDR, (uint32_t) dataTx);
        MAP_SSIDataGet(SSI_BASE_ADDR, (uint32_t *) &dataRx);
     
        return dataRx;
    }

    上述代码具有 MSP430驱动程序库...如何在 Am243x Launchpad 中重新构建该函数?  

    谢谢  

    阿比纳亚

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

    尊敬的 ABI Bharathi:

    如果您对将代码从一个 MCU 移植到另一个 MCU 有疑问、请在 "微控制器"论坛中发布该问题、我们的一位专家将为您提供帮助

    -Bryan

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

    您好、Bryan:

    好的,感谢您的建议。

    此致、

    阿比纳亚

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

    您好!

    我参考 AM243x MCU+ SDK 示例:mcspi_loopback_am243x-lp_r5fss0-0_nortos_ti-arm-clang。 McSPI 实例初始化/打开代码是由 syscfg 自动基于 example.syscfg 生成的。  但我将使用 MCU_PLUS_SDK_AM243x_09.00.00.30、但 mcspi 驱动程序源文件仅包含此 mcspi 传递函数(int32_t MCSPI_transfer (MCSPI_Handle handle、MCSPI_Transaction * transaction)。

    不提供 SPI 写入和读取功能。。。如何发送 ADC 寄存器和接收数据?

    谢谢。

    阿比纳亚

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

    您好!

    我参考 AM243x MCU+ SDK 示例:mcspi_loopback_am243x-lp_r5fss0-0_nortos_ti-arm-clang。 McSPI 实例初始化/打开代码是由 syscfg 自动基于 example.syscfg 生成的。  但我将使用 MCU_PLUS_SDK_AM243x_09.00.00.30、但 mcspi 驱动程序源文件仅包含此 mcspi 传递函数(int32_t MCSPI_transfer (MCSPI_Handle handle、MCSPI_Transaction * transaction)。

    不提供 SPI 写入和读取功能。。。如何发送 ADC 寄存器和接收数据?

    bool readData(adc_channel_data *DataStruct)
    {
    
    
        uint8_t dataRx[4] = {0};
        //uint8_t bytesPerWord = getWordByteLength();
        /* Set the nCS pin LOW */
        setCS(LOW);
    
        // Send NULL word, receive response word
        int i;
        dataRx[i] = spiSendReceiveByte(0xA5);
    
        DataStruct->response = combineBytes(dataRx[0], dataRx[1]);
    
           // Send 2nd word, receive channel 1 data
         dataRx[i] = spiSendReceiveByte(0x14);
    
         DataStruct->channel1 = signExtend(&dataRx[0]);
    
    #if (CHANNEL_COUNT > 1)
    
        // Send 3rd word, receive channel 2 data
    
            dataRx[i] = spiSendReceiveByte(0x11);
            DataStruct->channel2 = signExtend(&dataRx[0]);
    
    
    #endif
    
        /* Set the nCS pin HIGH */
        setCS(HIGH);
    
        // Returns true when a CRC error occurs
        return 0;
    }
    
    
    uint8_t spiSendReceiveByte( uint8_t dataTx)
    {
      uint8_t dataRx;
      MCSPI_Transaction   spiTransaction;
    
      setCS(LOW);
    
           MCSPI_Transaction_init(&spiTransaction);
           spiTransaction.channel  = gConfigMcspi0ChCfg[0].chNum;
           spiTransaction.dataSize = 8;
           spiTransaction.csDisable = TRUE;
           spiTransaction.count    = (spiTransaction.dataSize/8);
           spiTransaction.txBuf    = (void *)dataTx;
           spiTransaction.rxBuf    = (void *)dataRx;
           spiTransaction.args     = NULL;
    
           DebugP_log("transmit data %d\r\n",dataTx);
    
           dataRx = MCSPI_transfer(gMcspiHandle[CONFIG_MCSPI0],&spiTransaction);
           DebugP_log("receive data %d\r\n",dataRx);
    
    
        setCS(HIGH);
    
    
    
        return dataRx;
    }

    中的上述代码用于 SPI 通信、但接收到的数据为0。 我需要您的帮助来解决该问题。  

    谢谢。

    阿比纳亚

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

    尊敬的 ABI Bharathi:

    正如 Bryan 所提到的、您将会提出 有关 MCU 的问题、需要将问题发布到微控制器论坛。 如果您要使用 ADC 调试时序、请上传通过示波器或逻辑分析仪捕获的时序图、包括 SCLK、DIN、DOUT、/CS 和/DRDY 、我可以帮助您解决时序问题。

    Br、

    戴尔