微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1298使用问题!急!

ADS1298使用问题!急!

时间:10-02 整理:3721RD 点击:

你好!

       我现在使用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 。 附上原理图

 

这里可以下载ADS1299的source code:

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

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top