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.

ADS1298使用问题!急!!!

Other Parts Discussed in Thread: ADS1298, ADS1299

你好!

       我现在使用ADS1298,当正常上电时可以读取默认状态的数据。而且也可以正常读取ID。但再执行RDATAC后,就不能正常读取数据了,表现为DRDY的中断不能进入了。

      而且只要是我发送了任何指令(RREG、START等)后,再想恢复连续读模式,即发送RDATAC后,都不能正常读取数据了。

      不知道RDATAC这个命令该操作时该注意哪些呢?

  • 你好,你可以仔细看看datasheet的Figure 27. RDATAC Usage,这里介绍了使用时候的细节

  • 您好!

    烦请帮忙看看,我读取的默认寄存器值是否正确。 一共20组。请看数组d[]。贵司的手册22页,

    1.说Conifg2的默认值是0x40;但我读出来的是0x00;

    2. 说GPIO寄存器的默认值是0x0F;但我读出来的是0x00;

     

     

     

  • 这两个寄存器的值不对,你的硬件POWER-UP SEQUENCING和软件Power-On Reset是否合适?

  • 一、是这样,我觉得CONFIG2的值应该是正确的,因为根据DATAsheet 第25页描述的 内容,其值不可能是0X40;

    二、至于GPIO 的值我就不太确定了,因为我发现 DATAsheet 里提到 不用的GPIO 需要接地,但我目前是悬空的,不知道是否是此原因。

    三、至于是否是硬件上电时序的问题,我这边还没确定。但我觉得不管上电时序情况如何,只要我做复位处理了,芯片应该就恢复默认工作了。不知道这样理解是否正确。

    四、关于复位的问题,烦请帮我看看我的ADS1298初始化程序,个人觉得复位操作应该没问题,但是读取的寄存器值就如上图的内容。

    //ADS1298初始化
    void ADS1298_Init(void)
    {
     uchar d[20];
      P6DIR |= 0xF8;                            // P6.0 output
             P6OUT |= 0x00;                            // P6.3 output 0
           //下面是复位操作
             __delay_cycles(100000);  //延时
            ADS1298_START1;  //
     ADS1298_PWDN1;          //
     ADS1298_RST1;          
            ADS1298_CS1;
     __delay_cycles(100000);  //延时
            ADS1298_START1;  //
     ADS1298_PWDN1;          //
     ADS1298_RST0;          
            ADS1298_CS1;           
            __delay_cycles(500);  //延时
            ADS1298_START1;  //
     ADS1298_PWDN1;          //
     ADS1298_RST1;           //
            ADS1298_CS1;            //                  
            __delay_cycles(5000);  //延时
            ADS1298_CS0;            //
            //至此复位操作结束,开始读取寄存器默认值
            __delay_cycles(50000);  //延
            ADS1298_Send_CMD_One(SDATAC);    //发送停止命令
            ADS1298_Read_REG(0x20+ADDR_ID,20,d);
            ADS1298_Send_CMD_One(RDATAC);    //发送连续读停止命令
            __delay_cycles(5000);  //延时
    }

    //接收ADS1298多字节命令
    void ADS1298_Read_REG(uchar cmd,uchar len, uchar dat[])
    {
     uchar i;
     ADS1298_Send_CMD_One(cmd);   //发送接收命令第一字节+地址
     ADS1298_Send_CMD_One(len-1);   //发送接收第二字节命令,接收数据长度
     for(i=0;i<len;i++)
     {
      ADS1298_Send_CMD_One(0x55);   //发送SPI时钟,DOUT0
      if(UCA1IFG&UCRXIFG)           // UCB0RXBUF IS EMPTY?
      { dat[i] = UCA1RXBUF; }
     }         
            __delay_cycles(100);
    }

    //发送ADS1298单字节命令
    void ADS1298_Send_CMD_One(uchar cmd)
    {  
     while(!(UCA1IFG&UCTXIFG)); //USCI_B0 TX buffer ready
     UCA1TXBUF = cmd;                  //Transmit data
            __delay_cycles(1000); 
    }

  • 程序看起来是没有错的啊,你试着转换一下数据,看看得到的值和实际测量值一样不

  • GPIO默认值是设置为输入的,即0x0F,为0x00则为输出了,这个比较奇怪。CONFIG2为0x00是正确的,datasheet上前后有点不一致

  • GPIO默认为输入的时候引脚不能悬空,而复位后默认为输入,不知道是不是这里的问题

  • 你好!

        试了下,数据读取不正确。真是不知道该怎么办了。附上数据,有意思的是第一组(头3个数组,应该是正确的,表示STATUS REG,读取的数据为0xC00000)

  • 你们那边没有测试程序吗?提供下呗!

  • 有个好消息是,我感觉ADS1298可以正常工作了,因为我现在配置完某个寄存器后(如采样率),再恢复其RDTATC模式,已经没问题了。

    但在使用默认寄存器的情况下,我读取的数据就如同我上面发的那3个图片里的数据一样。大多数时候都是0x800000 或者0x7FFFFF,应该是超量程了。

    还有个地方需要请教下,就是我想 利用WCT 做 胸级单导联,是否需要重新配置寄存器的值呢?

    我的数据有三组 分别为X = V1 -V2 ; Y = V3 -V4 ; Z = V5 - V6 。 附上原理图

     

    采集电路.pdf
  • 这里可以下载ADS1299的source code:

    ftp://ftp.ti.com/pub/data_acquisition/ECG_FE/ADS1298/Source_ads129x_v1p1.zip

    但是需要在http://e2e.ti.com/上提出并留下邮箱申请解压密码。

  • 另:ads1299和ads1298的内核是差不多的,只是在噪声和增益配置上有微小区别。ADS1299性能稍好一点