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.

ADS1247寄存器数据读不出来

Other Parts Discussed in Thread: MSP430F5529

目前寄存器的值还是无法读取,但是已经能够采集数据,改变寄存器配置的值,采集数据也有变化,所以我觉得寄存器的值已经写进去了

我现在用ads247    AIN1=GND,AIN2为模拟信号输入,当AIN2输入为0,也就是接地时采集数据位1A7000(低16位数据一直变化),当输入为1.6V时为7FFFFF,PGA=1,可我要求的范围是0---2.5V,该怎么调增寄存器,我试了好多次值都不行,当为0时采集的数据比1A7000还大,我希望的是当为0时采集为0000000,     2.5V时采集为7FFFFF,

在线坐等答案,各位大侠速速来帮忙哦

  • 你还是先完成寄存器的正常读写操作,再来调试转化结果

  • 我也想先把寄存器的读写操作完成再调试下一步,可现在是我不知道问题出在哪,还望大神帮忙分析下,需要看源代码还是电路图,我发给你

  • 我用示波器看了一下时序,根据手册当配置寄存器是ST信号必须拉高,可当我把ST拉高后DRDY自动被拉低,然后每隔一段时间就会有一个正脉冲出来,按道理就算有脉冲也应该是负脉冲啊,不知道是为什么

  • 现在寄存器的值读出来了,可是采集的数据一直为00000;DRADY信号一直为低

  • 搞定了,可那个增益和偏移调整还不太明白,我现在输入0V时采集数据为9CEEB2,我配置的单端输入,把OFC设置成9CECF5之后可以了,可低12位一直不稳定,不知道我这样设置对不对

  • 还有,那个自动增益和偏移校正怎么用啊

  • 看来还得靠自己,哈哈

  • 我这有个参考代码,你看看。

     

    #include <msp430f5529.h>

    long a[512];

    unsigned int j;

      unsigned char nop=0xff;

      unsigned char rdatac=0x14;

    int test;

     

    int main(void)

    {

      volatile unsigned int i;

      WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer

      P1IES |= BIT0;                           //P5.1口作为ADC的DRDY接口,下降沿触发中断

      P1IE |= BIT0;                            //P5.1中断使能

      P1IFG &= ~BIT0;

      P6DIR |= BIT7;                             //P1.1 as start signal

      P6OUT |= BIT7;

      test=0;

     

    for(i=0;i<512;i++)

    {

      a[i]=0;

    }

      P4SEL |= BIT4+BIT5+BIT0;                       // P4.0,4,5 option select

      UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**

      UCA1CTL0 |= UCMST+UCSYNC+UCMSB;    // 3-pin, 8-bit SPI master

      UCA1CTL1 |= UCSSEL_2;                     // SMCLK

      UCA1BR0 = 0;                           //

      UCA1BR1 = 0;                              //

      UCA1MCTL = 0;                             // No modulation

      UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

      j=0;

      for(i=50000;i>0;i--);                        // Wait for slave to initialize

      while (!(UCA1IFG&UCTXIFG));

      UCA1TXBUF = 0x42;

      while (!(UCA1IFG&UCTXIFG));

      UCA1TXBUF = 0x01;

      while (!(UCA1IFG&UCTXIFG));

      UCA1TXBUF = 0x60;            //MUX1

      while (!(UCA1IFG&UCTXIFG));           

      UCA1TXBUF = 0x02;            //SYS0

     

      while (!(UCA1IFG&UCTXIFG));

      UCA1TXBUF = 0x4A;            

      while (!(UCA1IFG&UCTXIFG));

      UCA1TXBUF = 0x01;           

      while (!(UCA1IFG&UCTXIFG));

      UCA1TXBUF = 0x04;            //IDAC0

      while (!(UCA1IFG&UCTXIFG));

      UCA1TXBUF = 0x23;            //IDAC1

     

        while (!(UCA1IFG&UCTXIFG));               // USCI_A0 TX buffer ready?

        UCA1TXBUF = rdatac;                     // Transmit first character

     

        for(i=0;i<100;i++);

      while(1)

      {

        if((P1IN & BIT0)==0)

        {

       

          for(i=0;i<3;i++)

          {

            while (!(UCA1IFG&UCTXIFG));               // USCI_A0 TX buffer ready?

            UCA1TXBUF = nop;                     // Transmit first character

            while (!(UCA1IFG&UCRXIFG));

            a[j] = a[j]*256+UCA1RXBUF;

          }

          j++;

         

          if(j>511)

          {

            j=0;

           

            for(i=0;i<100;i++);

           

            while(1);

           

            for(i=0;i<512;i++)

            {

             a[i]=0;

            }

          }

        }

      }

    }

  •   关于寄存器部分和数据采集部分的问题应经解决了,就差校正部分,OFC和SFC寄存器的配置,发送自动校正命令得输入最大电压和最小电压,然后系统会自动校正这些寄存器么,那样的话是不是每次都得校正,如果直接配置OFC和SFC是不是就不需要发送自动校正命令了,那这两个寄存器的值是怎么计算出来的

  • 请问你怎么解决读寄存器读不出来的问题?我现在用stm32,我读任何一个寄存器,发现都是0.写是应该写进去了。真不知道哪里出了问题。读寄存器也要把st拉高。?DRDY我现在直接是接地的

  • 请问怎么把寄存器的值读出来的?能否请教下,我按照时序写读的都不对

  • 请问如何解决的呢?我用的ads11447出现跟你类似的情况