TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1298使用问题!急!!!

你好!

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

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

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

Carter Liu:

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

Jackie Zhang:

回复 Carter Liu:

您好!

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

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

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

 

 

 

Carter Liu:

回复 Jackie Zhang:

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

Jackie Zhang:

回复 Carter Liu:

一、是这样,我觉得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);  }

Carter Liu:

回复 Jackie Zhang:

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

Carter Liu:

回复 Carter Liu:

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

Carter Liu:

回复 Carter Liu:

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

Jackie Zhang:

回复 Carter Liu:

你好!

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

Jackie Zhang:

回复 Carter Liu:

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

Jackie Zhang:

回复 Jackie Zhang:

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

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

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

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

 

赞(0)
未经允许不得转载:TI中文支持网 » ADS1298使用问题!急!!!
分享到: 更多 (0)