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.

ADS1299内部测试信号数据问题

Other Parts Discussed in Thread: ADS1299, CC2530

之前买了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在初始化的时候设置的是多少啊?