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.

[参考译文] ADS1211:ADS1211E

Guru**** 2590620 points
Other Parts Discussed in Thread: ADS1211

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/655598/ads1211-ads1211e

部件号:ADS1211

你好…

我正在  通过SPI将ADS1211E与我的项目中的PSOC5连接。我可以将数据写入ADS1211,但无法从ADS1211E读取数据。

我尝试使用指令寄存器将数据写入命令寄存器,并在命令寄存器中读回默认值,但它总是读取0xF0/0x00。我希望获得有关如何使用ADS1211E ADC的支持。 如果可能,任何人都在此处使用ADS1211E POST示例代码。

提前感谢。

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

    您好,Jayaramulu,

    欢迎参加E2E论坛!  遗憾的是,我们没有ADS1211的任何示例代码。  在某些方面,它是一个复杂的通信计时设备。  您如何验证无法读取设备时是否可以写入设备?

    您能否向我发送您的通信示意图以及一些示波器或逻辑分析器的镜头?  这将有助于我了解沟通中可能出现的问题。

    此致,

    Bob B

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

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

     使用SPI串行通信将数据写入ADC

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正在写入0x84和虚拟数据0x00
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我们的代码..please审核,让我知道我的错误所在。

    /*===================================================
    *
    *版权所有您的公司,年份
    *保留所有权利
    *未发布,许可的软件。
    *
    *机密和专有信息
    *这是贵公司的财产。
    *
    *===========================================================
    */
    #include "project.h"

    UINT8 SPIReadData[4]={0};
    #define READEMASK 0x80
    #define WRITEMASK 0x00


    #define ADC_DATA_REG2_address 0x00
    #define ADC_DATA_REG1_ADDRESS 0x01
    #define ADC_DATA_REG0_ADDRESS 0x02


    #define ADC_CMD_REG3_ADDRESS 0x20
    #define ADC_CMD_REG2_ADDRESS 0x05
    #define ADC_CMD_REG1_address 0x06
    #define ADC_CMD_REG0_ADDRESS 0x07



    UINT8 CMDRegValue[4]={0};



    //void adcWrite(void);
    //void adcRead (void);
    void adcWrite (uint8地址,uint8数据);

    void writeADCCMDRegValue(void);
    void ReadADCCMDRegValue(void);
    UINT8 adcRead (uint8地址);
    UINT8 CMDEF[4]={0xB0,0x04,0xFF,0x80};
    //uint8 i = 0;
    内部主(无效)


    // Clock_1_Start();
    spim_Start();


    CyDelay(1000);
    CyGlobalIntEnable;/*启用全局中断。 */

    //CS_Write (1);

    while (1 == DRDY_IP_Read());

    /*将您的初始化/启动代码放在此处(例如 MyInst_Start()*/
    DSYNC_Write(0);

    对于(;;)

    writeADCCMDRegValue();
    ReadADCCMDRegValue();




    }
    }

    void writeADCCMDRegValue(void)

    while (1 == DRDY_IP_Read());
    CyDelay(1);
    ///*写入*/
    写入(0);


    CyDelay(2);
    //adcWrite (ADC_CMD_REG0_ADDRESS,0x16);
    //CyDelay(100);
    adcWrite (ADC_CMD_REG3_ADDRESS,0x04);
    //CyDelay(100);
    //adcWrite (ADC_CMD_REG1_ADDRESS,0xFF);
    //CyDelay(100);
    //adcWrite (ADC_CMD_REG0_ADDRESS,0x80);
    //CyDelay(100);
    }

    void ReadADCCMDRegValue(void)

    //SPIM_ClearFIFO ();
    // SPIM_ClearRxBuffer();
    //CyDelay(100);
    CMDRegValue[0]= adcRead (ADC_CMD_REG0_ADDRESS;
    //CyDelay(100);
    /CMDRegValue[1]= adcRead (ADC_CMD_REG2_address);
    CyDelay(100);
    // CMDRegValue[2]= adcRead (ADC_CMD_REG1_ADDRESS;
    // CyDelay(100);
    // CMDRegValue[3]= adcRead (ADC_CMD_REG0_ADDRESS);
    // CyDelay(100);
    }

    void adcWrite (uint8地址,uint8数据)


    while (1 == DRDY_IP_Read());
    CyDelay(10);
    /*写入*/
    // CS_Write (0);
    // CyDelay(1);
    // SPIM_TxEnable();
    Spim_WriteTxData (WRITEMASK |地址);
    while (!(SPIM_ReadTxStatus()和SPIM_STS_Byte_Complete));

    // SPIM_TxDisable();
    CyDelay(10);

    // SPIM_TxEnable();
    Spim_WriteTxData (数据);
    while (!(SPIM_ReadTxStatus()和SPIM_STS_Byte_Complete));

    // SPIM_TxDisable();
    CyDelay(10);



    while (1 == DRDY_IP_Read());
    CyDelay(1);


    }

    UINT8 adcRead (uint8地址)

    UINT8 SPIData = 0;


    while (1 == DRDY_IP_Read());
    CyDelay(10);

    CyDelay(1);


    Spim_WriteTxData (READEMASK |地址);
    while (!(SPIM_ReadTxStatus()和SPIM_STS_Byte_Complete));
    while (!(SPIM_ReadRxStatus()和SPIM_STS_RX_FIFO_NOT_Empty));
    CyDelay(10);
    spim_ReadRxStatus();

    Spim_WriteTxData (0x00);
    while (!(SPIM_ReadTxStatus()和SPIM_STS_Byte_Complete));

    CyDelay(1);

    SPIData = SPIM_ReadRxData();
    CyDelay(100);
    while (1 == DRDY_IP_Read());
    CyDelay(1);
    写入(1);

    返回SPIData;
    }




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

    您好,Jayaramulu,

    我 还不能查看您的代码,但您似乎正在尝试读取命令寄存器的1字节(MSB)。  但是,从不启动任何SCLK来检索寄存器字节。  微控制器必须启动寄存器字节的时钟以及指令。  这可以通过发送数据的伪字节来启动,结果将被传输到该字节。  此伪字节可以是0x00。

    此致,

    Bob B

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

    查看您的代码后,您似乎错过了我在上一篇文章中提到的最后一个字节。 您是否能够解决读出注册内容的问题?

    此致,
    Bob B