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:ADS1299测试信号

Guru**** 2553260 points
Other Parts Discussed in Thread: ADS1299EEGFE-PDK, CC2530, ADS1298, ADS1299

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/601486/ads1299-ads1299-test-signal

部件号:ADS1299
主题中讨论的其他部件: CC2530ADS1298

我使用CC2530板与ADS1299EEGFE-PDK子板连接。

 我读了ChipID并得到了正确的值。

然后我  根据数据表第62页(设置基本数据采集设备)编写和阅读配置

事实上,我读 过一些以前的文章。 根据 (ADS1298:运行测试信号并使用两个电极测量心率)

我经常从缓冲区读取27字节,并形成[n x 8]矩阵来存储信号。我使用MATLAB测试 内部 测试信号。

这是我的数据和一个频道的图像。 图像看起来像方波? 我错了吗?

C0 00 00 00 09 C1 00 09 FF 00 09 AF 00 09 C2 00 09 B0 00 09 83 00 09 84 00 0A 03
C0 00 00 00 09 C1 00 0B 80 00 00 00 13 86 00 13 FE 00 13 58 00 13 84 00 13 52 00
C0 00 00 00 09 C1 00 09 FF 00 09 AA 00 09 C3 00 09 AF 00 09 83 00 09 88 00 0A 06
C0 00 00 09 be 00 09 FE 00 09 AA 00 09 C0 00 09 AC 00 09 81 00 09 88 00 0A 00
C0 00 00 00 09 C0 00 09 FC 00 09 AE 00 09 C1 00 09 AD 00 09 7F 00 09 89 00 0A 03
C0 00 00 FF EE 7C FF EE BA FF EE 67 FF EE 79 FF EE 66 FF EE 3C FF EE 40 FF EE BB
C0 00 00 FF EE 7E FF EE BF EE 68 FF EE 7A FF EE 6A FF EE 3E FF EE 43 FF EE BD
C0 00 FF EE 77 FF EE BA FF EE 64 FF EE 79 FF EE 68 FF EE 3C FF EE 40 FF EE BB
C0 00 00 FF EE 7C FF EE B6 FF EE 63 FF EE 74 FF EE 67 FF EE 3B FF EE 40 FF EE BB
C0 00 FF EE 78 FF EE B9 FF EE 67 FF EE 77 FF EE 67 FF EE 3D FF EE 42 FF EE BB
C0 00 FF EE 79 FF EE BA FF EE 64 FF EE 77 FF EE 69 FF EE 3B FF EE 3C FF EE B9
C0 00 00 09 BE 00 09 FC 00 09 B1 00 09 BE 00 09 AE 00 09 81 00 09 83 00 0A 00
C0 00 00 00 09 BD 00 0A 01 00 09 AF 00 09 C1 00 09 AF 00 09 82 00 09 89 00 0A 03
C0 00 00 00 09 C0 00 0A 01 00 09 B1 00 09 C1 00 09 B1 00 09 85 00 09 87 00 0A 03
C0 00 00 00 09 C0 00 0A 01 00 09 AD 00 09 C0 00 09 AC 00 09 82 00 09 86 00 0A 08
C0 00 00 00 09 C0 00 09 FF 00 09 AD 00 09 C1 00 09 B1 00 09 83 00 09 8B 00 0A 01
C0 00 00 FF F3 04 FF F3 44 FF F2 F0 FF F2 FE FF F2 F4 FF F2 F2 CA FF F2 CB FF F3 42
C0 00 FF EE 7F FF EE BD FF EE 66 FF EE C0 00 FF EE 7E FF EE BC FF EE 65 FF

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,用户481.8433万,

    您发布的原始数据是正确的,但图解是错误的。 从设备中输出的数据是二进制2的补码。 这意味着第一位为1的数据为负值。 数据表中的表9显示了如何将代码转换为电压。

    Brian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我很高兴您的回答,我将检查我的代码以更正它。我将再次显示。
    再次感谢! 我将显示我的正确图解。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的先生,事实上,我对您在本文中所说的话有一些疑问:正代码应该大约为0x000E,负代码应该大约为0xFFF2。
    e2e.ti.com/.../58.1842万
    这就是为什么?根据我从MCU得到的数据,方波的峰值和波谷都是2字节的十六进制。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    噢,我想我找到了答案,每个通道的三个字节会读得更清楚!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    用户481.8433万,

    您回答正确。 数据将为24位或3字节。

    Brian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,先生,

    最后我得到 了方波,但图像似乎有很多噪音。(第一个通道设置 为正常电极模式)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    噢!我忘记了,这就是为什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,用户481.8433万,

    这是否已解决? 如果输入保持浮动并尝试测量电压,则结果将无效。

    Brian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但方波也有噪音! 这就是为什么? ADS1299EEGFE-PDK子板和MCU(CC2530)板之间的连接没有完全纠正? 或者还有其他问题吗? 我无法在正常电极模式下获得外部信号(正弦信号)。
    除4条SPI线路外,我还将DRDY、PWDN、CLKSET、START、RESET连接到MCU的GPIO。 MCU板为连接到J4(5V,3V和GND)的子板供电5V和3V。 我所做的是按照第62页(图67开机时的初始流量)操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现我从ADS1299获取的主数据存在问题。

    就像我标记的那条线。

    为什么这里的数据是错误的? 我是否忽略了某些问题? 等待您的回答!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,用户481.8433万,

    我认为问题是您读取数据的速度不够快。 在连续读取模式下,只要DRDY断言,数据就会自动加载到设备的输出移位寄存器中。 这意味着,如果读取数据所需的时间超过DRDY声明之间的间隔时间,则您读取的数据将被新数据损坏。

    您可以在突出显示的数据中看到这一点。 在第一个区域中,蓝色下划线的第一个字节不是0xC0,这正是状态字节的开始。在带下划线的第二个区域中,正位于带下划线的字节之前的字节是0xC0,表示该点也已被缓慢的数据读取损坏。

    要解决此问题,您可以提高SPI时钟频率,或减少DRDY声明时间与开始读取数据之间的延迟。

    此致,
    Brian Pisani
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    听起来很合理!

    但是当我更改SPI时钟时,它看起来是无效的! 而且我不清楚如何 减少DRDY断言和您开始读取数据之间的延迟。

    即使我设置了信道断电,零线也会发生波动。

    这是我的代码,可以帮助我检查代码并指出我的故障!

    #include <ioCC2530.h>
    #include <string.h>
    #include "hal_cc8051.h"
    
    #define LED1 P1_0
    #定义LED2 P1_1
    
    #define SPI_DRDY P1_2
    #定义CLKSEL P1_3
    #define SPI_start P0_6
    #define PWDN P0_5
    #define reset P0_4
    
    #define LED_OFF 1
    #define LED_ON 0#define
    TX_size 20
    #define test_data "test UART"
    char TxData[TX_size];
    void InitUart (void)
    {
    PERCFG = 0x00; //
    P0SEL = 0x0c; //P0_2,P0_3
    P2DIR &=~0xC0; //P0 UART0
    
    U0CSR |= 0x80; //UART
    U0GCR |=11; 				
    U0BAUD |=216; //11.52万
    UTX0IF = 0;
    LED2=1;
    }
    
    void UartSendString(car *Data, int len)
    {
    int i;
    
    对于(i=0;i<len;i++)
    {
    U0DBUF =*数据++;
    while (UTX0IF == 0);
    UTX0IF = 0;
    }
    }
    
    作废写入数据(uint8命令){
    
    U1DBUF =命令;
    while (!U1TX_Byte);
    U1TX_Byte = 0;
    }
    
    字符读取数据(uint8值)
    {
    U1DBUF =值;
    while (!U1TX_Byte);
    
    //while (U1RX_byte);
    //U1RX_byte = 0;
    unsigned char temp = U1DBUF;
    U1TX_Byte = 0;
    返回temp;
    }
    
    int SPI_init()
    {
    // SPI主模式
    PERCFG |= 0x02; //将USART1映射到其备用2位置。 P1_4:SSN,P1_5:SCK,P1_6:mosi,P1_7:miso
    P1SEL |= 0xE0; // P1_5,P1_6和P1_7是外围设备
    P1SEL &=~0x10; // P1_4是GPIO (SSN)
    P1DIR |= 0x10; // SSN设置为输出
    	
    U1BAUD = 0x00;U1GCR |= 0x0D; // baud _M=0,baud _E=13,fsck =250kHz.4US
    U1CSR &=~0xA0; // SPI主模式
    // U1CSR &=~0x80;U1CSR |= 0x20; // SPI从属模式
    //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);
    返回0;
    }
    
    void main()
    {
    字符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; //重置引脚= 1
    
    //while (1){
    P1_4 = 0; //SSN = 0;
    HalMcuWaitus(16);
    WriteData (0x06); //重置
    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和0x03h地址
    HalMcuWaitus(32);
    WriteData (0x00); //仅CONFOG3
    HalMcuWaitus(32);
    WriteData (0xE0);
    HalMcuWaitus(32);
    P1_4 = 1;
    HalMcuWaitus(16);
    
    P1_4 = 0;
    HalMcuWaitus(16);
    WriteData (0x42); //WREG和0x02h地址
    HalMcuWaitus(32);
    WriteData (0x00); //仅CONFOG2
    HalMcuWaitus(32);
    WriteData (0xD0);
    HalMcuWaitus(32);
    P1_4 = 1;
    HalMcuWaitus(16);
    
    P1_4 = 0;
    HalMcuWaitus(16);
    WriteData (0x45); //WREG和0x05h地址
    HalMcuWaitus(32);
    WriteData (0x07); //8个通道| 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); //返回到RDATAC模式
    //halMcuWaitus(16);
    P1_4 = 1;
    P0_6 = 1; //start=1
    同时(1)
    {
    IF (P1_2 == 0){
    对于(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);
    }
    }
    //读取寄存器
    /*P1_4 = 0;
    halMcuWaitus(4);
    WriteData (0x20); //REG两个8位(命令+地址)
    halMcuWaitus(13);
    WriteData (0x00); //寄存器的数目
    halMcuWaitus(13);
    temp[0]=读取数据(0x00);
    /*temp[1]= ReadData(0x00);
    temp[2]= ReadData (0x00);
    temp[3]=读取数据(0x00);
    temp[4]=读数据(0x00);
    temp[5]= ReadData (0x00);
    temp[6]=读数据(0x00);
    temp[7]=读数据(0x00);
    temp[8]= ReadData (0x00);
    temp[9]= ReadData (0x00);
    temp[10]= ReadData (0x00);
    temp[11]= ReadData (0x00);
    temp[12]= ReadData (0x00);
    temp[13]= ReadData (0x00);
    temp[14]= ReadData (0x00);
    temp[15]= ReadData (0x00);
    temp[16]= ReadData (0x00);
    temp[17]= ReadData (0x00);
    temp[18]= ReadData (0x00);
    temp[19]= ReadData (0x00);
    temp[20]= ReadData (0x00);
    temp[21]= ReadData (0x00);
    temp[22]= ReadData (0x00);
    temp[23]= ReadData (0x00);
    halMcuWaitus(9);
    P1_4 = 1;
    //int i=500;
    同时(1)
    {
    UartSendString(temp,1);//
    halMcuWaitMs(100); //
    //}
    //I-;
    }*/
    
    }
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,用户481.8433万,

    一种策略是将数据读取例程置于由DRDY下降边缘触发的中断的上下文中。 似乎您从SPI读取数据,然后在MCU下次检查DRDY状态之前通过UART发送数据。 这是非常缓慢的。

    我不熟悉MCU的具体细节,但处理器上可能有DMA功能,可以在不需要内核干预的情况下,实现从外设到内存的快速数据传输,反之亦然。

    确定延迟源于何处的最佳方法是使用逻辑分析仪或示波器检查事务。 有关如何改善MCU代码中通信延迟的详细信息,您可以参阅该处理器的数据表,该处理器的e2e论坛,或咨询您已经认识的固件开发专家。

    此致,
    Brian Pisani
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,先生。

    最后,我得到了方波,但我的波与数据表和其他人的波形不同。

    一个矿场周期只有不到10个采样点。数据表几乎有120个采样点。

    这就是为什么? 我不知道问题是我在8个信道的数据读取之前的延迟。

    请给我一些建议。

     等待您的回复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我猜是因为延迟。我的延迟是100毫秒,我的周期是10分。当我的延迟是50毫秒,我的周期是20分。
    对于250 SPS数据速率,周期仅为250点