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:使用 mspm0g3507从 ADS124s08读取数据

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1349260/ads124s08-data-read-from-ads124s08-using-mspm0g3507

器件型号:ADS124S08
主题中讨论的其他器件:MSPM0G3507

您好  

我正在使用 mspm0g3507从 ads124s08 ADC 读取数据。 但我得到的价值不符合预期。 我已经根据 DSO 进行了检查、所有波形都正确无误、如数据表所示。 我将附加波形文件、同时还有代码让我知道我哪里做错了。

int main(void)
{
    SYSCFG_DL_init();    // init all gpio and spi with spi mode 1

    delay_cycles(70400);  //wait for POST operation

    delay_cycles(32000);  //required min 20ns we provide 1ms delay

    delay_cycles(160000);        // delay of min of 4096*tclk

    readRegs( ID_ADDR_MASK,19,Data); //reading default setting

    ADS124S08_Init();   // configuring adc

    readRegs_after( ID_ADDR_MASK,19,Data); //readbck new configuration

    DL_GPIO_setPins(GPIO_LEDS_START_PORT,GPIO_LEDS_START_PIN);  // pull start pin high to start convertion
    delay_cycles(224000);

    while(1)
    {
        if (!DL_GPIO_readPins(GPIO_LEDS_DRDY_ADC_PORT, GPIO_LEDS_DRDY_ADC_PIN))  // check of low transition of DRDY pin
        {
                DL_SPI_transmitData8(SPI_0_INST,RDATA_OPCODE_MASK);
                delay_cycles(32000);
                iData.adcValue1 = dataRead(&dStatus, &dData, &dCRC);
         }
       RTDRes = CodeToRes(&iData);
       RTDTemp = calculateTemperature(RTDRes);
    }
}

数据读取

uint32_t dataRead(uint32_t *dStatus, uint32_t *dData, uint32_t *dCRC)
{
    uint32_t xcrc;
    uint32_t xstatus;
    uint32_t iData;
    uint32_t Data_t;
    DL_GPIO_clearPins(GPIO_LEDS_CS0_PORT,GPIO_LEDS_CS0_PIN);

    if((registers_after[SYS_ADDR_MASK] & 0x01) == DATA_MODE_STATUS)
    {
        xstatus = xferWord(0x00);
        dStatus[0] = (uint8_t)xstatus;
    }

    // get the conversion data
    iData = xferWord(0x00);
    iData = (iData<<8) + xferWord(0x00);
    iData = (iData<<8) + xferWord(0x00);
    if((registers_after[SYS_ADDR_MASK] & 0x02) == DATA_MODE_CRC)
    {
        xcrc = xferWord(0x00);
        dCRC[0] = (uint8_t)xcrc;
    }
    DL_GPIO_setPins(GPIO_LEDS_CS0_PORT,GPIO_LEDS_CS0_PIN);
    Data_t = iData;
    return iData ;
}

传递函数:

uint32_t xferWord(uint32_t tx)
{
    uint32_t rx;
    /* Set up data for the next xmit */
    DL_SPI_transmitData32(SPI_0_INST,tx);
    /* Wait for data to appear */
   while(DL_SPI_isBusy(SPI_0_INST));
    rx= DL_SPI_receiveDataBlocking32(SPI_0_INST);
  //  rx= DL_SPI_receiveDataBlocking32(SPI_0_INST);
 //   rx= DL_SPI_receiveData32(SPI_0_INST);
    return rx;
}

波形:

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

    大家好、Mehul Dabholkar:

    不清楚您的代码所显示的与示波器屏幕截图相关的内容。  因此、您更好地理解了这一期望、但您尚未分享这一期望。  另外、看起来您正在进行 RTD 温度传感器测量。  我可以告诉您的一点是、在读取 ADC 数据时、输出为二进制补码。  ADC 传输的值是负值、所以有两个问题。  一个是 iData 变量是无符号整数、返回的数据是有符号的。  因此、您需要确保使用正确的声明、并对值进行正确的符号扩展、将其从24位正确扩展到32位。

    第二个问题是 ADC 值为负。  如果需要正值、则配置寄存器设置中存在错误。

    为了提供更多指导、我需要了解您正在使用的配置寄存器设置以及查看原理图。

    此致、

    鲍勃 B

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

    您好,bob,问题已得到解决,问题是配置寄存器设置。