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.

[参考译文] ADS1292R:SPI通信初始化

Guru**** 2563970 points
Other Parts Discussed in Thread: ADS1292R

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/576648/ads1292r-spi-communication-init

部件号:ADS1292R

您好,

我一直在尝试从我的ADS1292r读取任何类型的输出引脚数据,似乎我不知道发生了什么。  

我一直在尝试读取0x00位置的ID寄存器。 您能否快速查看并尝试找出我的错误?

代码已编译,我可以使SCLK,DIN和CS_正常工作,即 ,当"send_command"为时,我在示波器上获得SCLK和DIN  

我正在使用 pic24fj64ga104,并且只想在开始时读取状态寄存器。

PIC SCLK = 1MHz

免责声明- 这是一个并非完全受我启发的代码!

void initADS1292(){

inCodeDelayMs(500);//延迟毫秒
inCodeDelayMs(500);

ADS_CLKSEL = 1;//迭代时钟
//重置ADS1292
ads_reset_off;
inCodeDelayMs(500);
inCodeDelayMs(500);


ad_reset_on;
inCodeDelayMs(500);
inCodeDelayMs(500);
ads_reset_off;
inCodeDelayMs(500);



选择;
inCodeDelayMs(500);
inCodeDelayMs(500);
取消选择;

inCodeDelayMs(500);



//发送SDATAC命令(停止连续读取数据模式)
send_command(SDATAC);//#define SDATAC 0x11

inCodeDelayMs(1);

inCodeDelayMs(5);

read_byte(0x00);//读取状态reg




int read_byte (int reg_addr){
内部输出=0;
CS_SELECT;// CS pin = 1
WriteSPI1 (0x20 | reg_addr);
tg_inCodeDelayMs(1);
WriteSPI1 (0x00);//要读/写的寄存器数-1
tg_inCodeDelayMs(1);
输出= ReadSPI1();
tg_inCodeDelayMs(1);
cs_delete;// css pin=0
return (out);
}
void send_command(uint8_t cmd){
选择;
tg_inCodeDelayMs(2);
WriteSPI1 (cmd);
tg_inCodeDelayMs(2);
取消选择;
} 

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

    欢迎来到我们的e2e论坛! 您能否分享您的原理图和您在示波器上看到的图片?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Tom,  

    感谢您的快速回复,我现在在家,所以没有示波器。 将在早上分享所有内容。 我来自克罗地亚,那是12小时。

    干杯!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好,下面是整个代码,我希望可以实现更好的可视化。 我整个早上都在尝试着想出一些东西,即使是来自的源代码也是如此 
    ADS_1x9X_ECG_RECORDER固件,但我不知道发生了什么

    SCLK为1MHz,pic时钟为8MHz



    int main (int argc,char** argv){
    Int配合=0;
    EnableWDT (WDT_DISABLE);
    
    tg_Configure();
    
    tg_inCodeDelayMs(500);
    tg_inCodeDelayMs(500);
    tg_inCodeDelayMs(500);
    tg_inCodeDelayMs(500);
    
    
    
    // initADS1292();
    //worker();
    initADS1292();
    而(1){
    /* ADS1292_StartC();
    IF (ADS_DRDY==0){
    ADS1292_UpdateChannelData();
    }*/
    
    
    
    
    tg_inCodeDelayMs(500);
    read_byte(0x00);
    配合++;
    配合++;
    配合++;
    
    /*
    tg_inCodeDelayMs(200);
    BT_OTA=0;
    tg_inCodeDelayMs(200);
    BT_OTA=1;*/
    }
    
    return (exit_success;
    }
    
    void write_byte(unsigned char reg_addr, unsigned char val_hex){
    选择;
    tg_inCodeDelayMs(1);
    WriteSPI1 (0x40 | reg_addr);
    tg_inCodeDelayMs(1);
    WriteSPI1 (0x00);
    tg_inCodeDelayMs(1);
    WriteSPI1 (val_hex);
    tg_inCodeDelayMs(2);
    cs_deceet;
    }
    
    unsigned char read_byte (unsigned char reg_addr){
    内部输出=0;
    选择;
    WriteSPI1 (0x20 | reg_addr);
    tg_inCodeDelayMs(1);
    WriteSPI1 (0x00);//要读/写的寄存器数-1
    tg_inCodeDelayMs(1);
    输出= ReadSPI1();
    tg_inCodeDelayMs(1);
    取消选择;
    return (out;
    }
    
    void send_command(unsigned char cmd){
    选择;
    tg_inCodeDelayMs(2);
    WriteSPI1 (cmd);
    tg_inCodeDelayMs(2);
    cs_deelect;
    }
    
    void initADS1292(){
    int i;
    
    ads_reset_off;
    对于(i=0;i<5000;i++);//等待1毫秒
    ads_reset_on
    对于(i=0;i<5000;i++);//等待1毫秒
    ads_reset_off;
    对于(i=0;i<3.5万;i++)//等待
    
    
    
    
    
    
    tg_inCodeDelayMs(500);
    
    
    
    //发送SDATAC命令(停止连续读取数据模式)
    send_command (SDATAC);
    
    
    /* SPI_IN_Buff [SPI_IN_BUK_LEN+]=(unsigned char)ReadSPI1();//读取从缓冲区
    收到的数据IF (SPI_IN_BUK_LEN == MAX_IN_SPI)
    {
    spI_in_buy_len = 0;
    }
    */
    //所有GPIO设置为输出
    
    
    
    
    write_byte(CONFIG1,0x02);//连续转换,500SPS
    
    write_byte(CONFIG2,0xA0);//Vref,CLK_EN作为输出,测试
    tg_inCodeDelayMs(500);
    write_byte(CONFIG2,0xA3);
    对于(i=0;i<5000;i++)//等待1毫秒
    tg_inCodeDelayMs(1);
    write_byte (CH1SET,0x05);
    对于(i=0;i<5000;i++)//等待1毫秒
    write_byte (CH2SET,0x05);
    对于(i=0;i<5000;i++)//等待1毫秒
    write_byte (GPIO,0x00);
    对于(i=0;i<5000;i++)//等待1毫秒
    write_byte (LoFF,0x10);
    对于(i=0;i<5000;i++)//等待1毫秒
    write_byte (RLD_SENS,0x00);
    对于(i=0;i<5000;i++)//等待1毫秒
    write_byte (LoFF_SENS,0x00);
    对于(i=0;i<5000;i++)//等待1毫秒
    write_byte (LoFF_STAT,0x00);
    对于(i=0;i<5000;i++)//等待1毫秒
    write_byte(RESP1,0x02);
    对于(i=0;i<5000;i++)//等待1毫秒
    write_byte(RESP2,0x01);
    
    
    
    }
    

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

    示意图

    示波器-黄色- SCLK,蓝色- Din

    示波器-相同的信道,500us周期

    甚至不能正确上传照片:)

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

    我在您的示意图中没有立即看到任何会导致问题的内容。 因此,需要注意的是,对照AVSS检查并验证AVDD和DVDD,以确保您有电源。 检查并验证CLKSEL和CLK源的状态,PWDN/RESET和/CS的状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tom,您好!

    只是想告诉你,问题在3天后就解决了。我用示波器的探针在针脚附近钻了一个洞,我 的SPI时钟关闭了,所以信号永远不会进入ADS芯片。 耶酥:)

    感谢您的回复!

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