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