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.

求 ADS1292R 寄存器 配置 问题

Other Parts Discussed in Thread: MSP430F5438, ADS1292R, ADS1293, ADS1298R

我正使用msp430f5438驱动ADS1292R测量心电和呼吸,已能正常读写1292寄存器,配置寄存器时,遇到了困难,怎么配置 都不对,想请各位老师 给推荐一下参考寄存器。。PS:模拟器用的是福禄克mps450,电路图用的是官方评估板上的图,要求一通道测呼吸,二通道测一导联心电。。谢谢各位老师。。

  • Hi puling,

        感谢你对论坛的支持,我们会和AE确认是否有相关的资料可以帮助到你。

  • 请问你们有没有ADS1292R的参考程序

  • 有      留个联系方式   发给你

  • 求参考程序。。fuwen0202@163.com

    我的寄存器读写一直不正常,难道不是发送 (0x20 | reg)和(0x00 | length)这两个数据包,然后读取2个8bit数据么,我读取到的一直是0,,

    单片机的SPI的设置为1MHz,高位在前,上升沿采样,下降沿置位,SCK闲置时为0,对么,和ads1293一样设置的

  • 这是一个完整的工程吧,谢谢,您有没有“ADS1298ECGFE-PDK 1.0.0 版本安装”,官网下不了

  • 这个是1298 的配套评估软件吧,我有ads129xecg-fe-setup-1.1.1.exe这个版本的     好久不用了,不知道是不是你需要的

  • 有没有1292R的配套评估软件

  • 发给你你自己看看吧   时间长我也忘了      链接:http://pan.baidu.com/s/1o6FRKMm 密码:9kv1

  • 有的,我手上买了ads1298r和1293的开发板,

    1298r的板子只能配套ADS129xECG-FE使用,

    而ADS1298R-EVM不知怎么,那个软件一直找不到板子。。。

  • 你好,你以前提供我的ADS1292R程序,我参考了一下,但是运行在我的板子上,读出来的初试结果是错误的下面是我的程序


    #include <msp430x14x.h>
    char MST_Data = 0xAA,SLV_Data = 0xff;
    unsigned char a[12];
    unsigned char b[12];
    #define SPI_ENABLE      P2OUT &=~0x08;
    #define  SPI_DISABLE    P2OUT |=0x08;
    unsigned char regdata[11]={0x02,0xeb,0x18,0x00,0x00,0x30,0x0f,0x40,0x02,0x01,0x03};//二通道心电测试信号,无呼吸
    void Stop_Read_Data_Continuous (void)
    {
        unsigned int i=0;
        SPI_ENABLE;                            // /CS enable
        //for(i=0;i<10;i++);
        //while (!(IFG1&URXIFG0));                     // Clear flag
        TXBUF1 =0x11;                              // Send SDATAC
        while (!(IFG2&UTXIFG1));                 // Wait for TXBUF ready
       // UCA0IFG &= ~(UCRXIFG+UCTXIFG);                 // Clear flag 可能自动复位(zhao)
        SPI_DISABLE;         // /CS disable
        for(i=0;i<10;i++);
    }

    void Start_Read_Data_Continuous (void)
    {
        unsigned int i=0;
        SPI_ENABLE;
       // while (!(IFG1&URXIFG0));                  // Clear flag
        TXBUF1 =0x10;                              // Send RDATAC
        while (!(IFG2&UTXIFG1));                  // Wait for TXBUF ready       
     //   UCA0IFG &= ~(UCRXIFG+UCTXIFG);                  // Clear flag
       // UCA0IFG &= ~UCRXIFG;                  // Clear flag
        SPI_DISABLE;
        for(i=0;i<10;i++);
    }

    void SPI_RegRead(unsigned char addr, unsigned char *buffer, unsigned char count)  
    {  
      unsigned int i=0,j=0;
     
      //P1OUT |=BIT1;
      //退出连续读数模式
      Stop_Read_Data_Continuous ();     //When in RDATAC mode, the RREG command is ignored.Send SDATAC MUST BE SENT
      //for(i=0;i<50;i++);
     
      SPI_ENABLE;                         // /CS enable
     
      TXBUF1 =addr+0x20;                         // Send address 
       
     while ((IFG2 & UTXIFG1) == 0);            // USART0 TX buffer ready?
     // UCA0IFG &= ~(IFG+UCTXIFG);                  // Clear flag

      TXBUF1  = count-1;                        // regedit count  ge shu
      while (!(IFG2&UTXIFG1));                 // Wait for TXBUF ready
     // UCA0IFG &= ~(UCRXIFG+UCTXIFG);                  // Clear flag
     
      for (i = 0; i<count;i++)  
      { 
        TXBUF1  = 0x55;                            //Initiate next data RX, meanwhile..
        while (!(IFG2&UTXIFG1));                  // Wait for TXBUF ready   
        buffer[i] =  RXBUF1;                    // Store data from last data RX
         TXBUF0=RXBUF1;
        while (!(IFG2&URXIFG1));                  // Wait for TXBUF ready 
        for(j=0;j<10;j++);
         P2OUT =~0X04;
       
      }

      SPI_DISABLE;         // /CS disable
      //P1OUT = 0x00;
      for(i=0;i<10;i++);
      //回到连续模式方便读数
      Start_Read_Data_Continuous ();
      for(i=0;i<10;i++);
     
    }  
    void SPI_Regwrite(unsigned char addr,unsigned char *data,unsigned char count)  
    {
      unsigned int i=0,j=0;
      //P1OUT |=BIT1;
      //退出连续读数模式
      Stop_Read_Data_Continuous ();
     
      SPI_ENABLE;                            // /CS enable
     
      //UCA0IFG &= ~(UCRXIFG+UCTXIFG);                  // Clear flag
      TXBUF1 =addr+0x40;   //发送地址信息;  首地址是0x01;(zhao)
      while (!(IFG2&UTXIFG1));                 // Wait for TXBUF ready
     
     // UCA0IFG &= ~(UCRXIFG+UCTXIFG);                  // Clear flag
      TXBUF1 =count-1;  //发送header;              //发送的寄存器数量为10个(zhao)
     while (!(IFG2&UTXIFG1));                 // Wait for TXBUF ready
      for (i = 0; i<count;i++)  
      {
      
        //UCA0IFG &= ~(UCRXIFG+UCTXIFG);                 // Clear flag
        TXBUF1 =data[i];  
      
       while (!(IFG2&UTXIFG1));                 // Wait for TXBUF ready
        for(j=0;j<30;j++);
       
       
      }
     
      SPI_DISABLE;         // /CS disable
     
      //回到连续模式方便读数
      Start_Read_Data_Continuous ();
     
    }

    void intSPI1()
    {
      P5SEL |= 0x0E;                            // P5.1,2,3 SPI option select
      P5OUT &= ~0x01;
      P5DIR |= 0x01;   
      U1CTL = CHAR + SYNC + MM + SWRST;         // 8-bit, SPI, Master
      U1TCTL = CKPL + SSEL1 + STC;              // Polarity, SMCLK, 3-wire
      U1BR0 = 0x02;                             // SPICLK = SMCLK/2
      U1BR1 = 0x02;
      U1MCTL = 0x00;
      ME2 |= USPIE1;                            // Module enable
      U1CTL &= ~SWRST;                          // SPI enable
     
      IE2 |= URXIE1 + UTXIE1;                   // RX and TX interrupt enable
    }

    void intUART0()
    {
      P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
      ME1 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
      UCTL0 |= CHAR;                            // 8-bit character
      UTCTL0 |= SSEL0;                          // UCLK = ACLK
      UBR00 = 0x03;                             // 32k/9600 - 3.41
      UBR10 = 0x00;                             //
      UMCTL0 = 0x4A;                            // Modulation
      UCTL0 &= ~SWRST;                          // Initialize USART state machine
      IE1 |= URXIE0;                            // Enable USART0 RX interrupt
    }


    void main( void )
    {
      unsigned int i;
      WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
      P1OUT = 0x000;
      P1DIR |= 0x001;                 //设置P1.0为输出
      P1SEL = 0x010; 
      P2DIR |= 0x00f;                   //0,1,2,3输出
      P2OUT |=0x03;                     //START,RST高电平
     
      P5SEL = 0x020;                  //设置P3端口为SPI模式
     
      intUART0();
      intSPI1();
     
      _EINT();
     
     
     
      SPI_RegRead(0x00,a,12); //读取初始寄存器,检验电路连接是否正确 
      SPI_Regwrite(0x01,regdata,11);   //写入配置寄存器,
      i=50000;
      do(i--);
      while(i != 0);
      //SPI_RegRead(0x00,b,12); // 再次读出寄存器   检验是否写入正确

      
       // TXBUF0 = MST_Data;            //传输第一个字符
       for (;;)
      {
      //_BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/interrupt
     ;
      }
        //LPM0;                         //关CPU,进入低功耗模式
     
    }
    #pragma vector=USART1RX_VECTOR
    __interrupt void SPI1_rx (void)
    {
      P1OUT = RXBUF1;                           // RXBUF1 to TXBUF1
    }
    #pragma vector=USART1TX_VECTOR
    __interrupt void SPI1_tx (void)
    {
      unsigned int i;

      i = P1IN;
      i = i >> 4;
      TXBUF1 = 0xaa;                               // Transmit character
    }

    #pragma vector=UART0RX_VECTOR
    __interrupt void usart0_rx (void)
    {
       while (!(IFG1 & UTXIFG0));                // USART0 TX buffer ready?
                            // RXBUF0 to TXBUF0
      _BIC_SR_IRQ(LPM3_bits);                   // Clear LPM3 bits from 0(SR)
    }

  • 你好,你当时给我了一个ADS1292R的驱动程序,现在的问题是寄存器可以读写,但是测试信号是错的,看时序发现读数据时不是连续读模式

  • 我现在的问题是每三个SCLK就出现一个DRDY中断,而不是九个,因此数据发不完,九个数据只能发三个,这是怎么回事,求指导!

  • 你好,我也需要一份ADS1292R的参考代码?能发我一份吗?

  • 您好,后来能测出心电数据和呼吸波数据了吗?我现在寄存器无法读写,读出来的数据和我写进去的不同,能给我参考一下程序吗?万分感谢

  • 您好,请问问题解决了吗?我也遇到同样的问题了