ADS1299内部测试信号数据问题
时间:10-02
整理:3721RD
点击:
之前买了ADS1299的评估板,我利用MCU(cc2530)板子对ADS1299套件子板供电并实现spi连接,已经成功读出ID。
再进行内部信号测试的时候出现方波不稳(个别点跳跃)的情况(评估板测试方波良好),我检查了一下得到的原始数据发现个别位置出现数据错误(图中蓝线所示部分),请问这是什么原因?应该如何改正呢?
好象没有明确规则的数据发生错误.
不过我感觉不见得是芯片的采集问题, 也可能软件有缺陷. 数据应该有的, 发生了放置的错位
感谢你的回复!
感觉应该是我读取数据的问题,以下是我配置管脚、寄存器、读取数据的代码,能请您帮我查看一下吗?
#define SPI_DRDY P1_2 #define CLKSEL P1_3 #define SPI_START P0_6 #define PWDN P0_5 #define RESET P0_4 int spi_init() { // SPI Master Mode PERCFG |= 0x02; // map USART1 to its alternative 2 location. P1_4: SSN, P1_5: SCK, P1_6: MOSI, P1_7: MISO P1SEL |= 0xE0; // P1_5, P1_6, and P1_7 are peripherals P1SEL &= ~0x10; // P1_4 is GPIO (SSN) P1DIR |= 0x10; // SSN is set as output U1BAUD = 0x00; U1GCR |= 0x0D; // BAUD_M=0,BAUD_E=13,Fsck=250kHz.4us U1CSR &= ~0xA0; // SPI Master Mode // U1CSR &= ~0x80; U1CSR |= 0x20; // SPI Slave Mode //U1GCR &= ~0xC0; U1GCR |= 0x20; // MSB U1GCR = 0x6D; //IO_FUNC_PORT_PIN(1, 4, IO_FUNC_GIO); IO_FUNC_PORT_PIN(1, 2, IO_FUNC_GIO); IO_DIR_PORT_PIN(1, 2, IO_IN); IO_FUNC_PORT_PIN(1, 3, IO_FUNC_GIO); IO_DIR_PORT_PIN(1, 3, IO_IN); IO_FUNC_PORT_PIN(0, 6, IO_FUNC_GIO); IO_DIR_PORT_PIN(0, 6, IO_IN); IO_DIR_PORT_PIN(1, 4, IO_OUT); IO_DIR_PORT_PIN(1, 5, IO_IN); IO_DIR_PORT_PIN(1, 6, IO_OUT); IO_DIR_PORT_PIN(1, 7, IO_IN); IO_FUNC_PORT_PIN(1, 1, IO_FUNC_GIO); // IO_DIR_PORT_PIN(1, 1, IO_OUT); // IO_FUNC_PORT_PIN(1, 0, IO_FUNC_GIO); IO_DIR_PORT_PIN(1, 0, IO_OUT); return 0; } void main() { char temp[3]; unsigned char out[27]; uint32 uartout[200]; CLKCONCMD = 0x80; while (CLKCONSTA != 0x80); // 32MHz InitUart(); spi_init(); LED1 = 1; P1_3 = 1; //CLKSET = 1 halMcuWaitUs(1000); P0_5 = 1; //PWDN = 1 P0_4 = 1; //RESET pin =1 //while(1){ P1_4 = 0; //SSN = 0; halMcuWaitUs(16); WriteData(0x06); //RESET halMcuWaitUs(36); P1_4 = 1; halMcuWaitUs(16); P1_4 = 0; halMcuWaitUs(16); WriteData(0x11); //SDATAC halMcuWaitUs(16); P1_4 = 1; halMcuWaitUs(16); P1_4 = 0; halMcuWaitUs(16); WriteData(0x43); //WREG and from 0x03h address halMcuWaitUs(32); WriteData(0x00); //only CONFOG3 halMcuWaitUs(32); WriteData(0xE0); halMcuWaitUs(32); P1_4 = 1; halMcuWaitUs(16); P1_4 = 0; halMcuWaitUs(16); WriteData(0x42); //WREG and from 0x02h address halMcuWaitUs(32); WriteData(0x00); //only CONFOG2 halMcuWaitUs(32); WriteData(0xD0); halMcuWaitUs(32); P1_4 = 1; halMcuWaitUs(16); P1_4 = 0; halMcuWaitUs(16); WriteData(0x45); //WREG and from 0x05h address halMcuWaitUs(32); WriteData(0x07); //eight channels | CHnSET halMcuWaitUs(32); WriteData(0x05); halMcuWaitUs(32); WriteData(0x05); halMcuWaitUs(32); WriteData(0x05); halMcuWaitUs(32); WriteData(0x05); halMcuWaitUs(32); WriteData(0x05); halMcuWaitUs(32); WriteData(0x05); halMcuWaitUs(32); WriteData(0x05); halMcuWaitUs(32); WriteData(0x05); halMcuWaitUs(32); P1_4 = 1; halMcuWaitUs(16); //P0_6 = 1; //START=1 //halMcuWaitUs(4); P1_4 = 0; halMcuWaitUs(16); WriteData(0x10); //Come back to RDATAC Mode //halMcuWaitUs(16); P1_4 = 1; P0_6 = 1; //START=1 while(1) { if(P1_2 == 0){ for(int i=0;i<27;i++){ //for(int j=0;i<3;j++){ P1_4 = 0; U1DBUF = 0x00; while(!U1TX_BYTE); //temp[j] = U1DBUF; out[i] = U1DBUF; P1_4 = 1; U1TX_BYTE = 0; //} //out[i] = temp[0]+temp[1]+temp[2]; //uartout[i]=hexStr2Str(out); //sprintf(uartout[i],"%6X",out); } //out[27] = 0xFF; UartSendString(out,27); halMcuWaitMs(100); } } }
你的ADS1299的ID在初始化的时候设置的是多少啊?