TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1247寄存器数据读不出来

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

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

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

Van Yang:

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

Lion chang:

回复 Van Yang:

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

Lion chang:

回复 Van Yang:

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

Lion chang:

回复 Van Yang:

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

Lion chang:

回复 Lion chang:

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

Lion chang:

回复 Lion chang:

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

Lion chang:

回复 Lion chang:

看来还得靠自己,哈哈

Van Yang:

回复 Lion chang:

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

 

#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;

        }

      }

    }

  }

}

Lion chang:

回复 Van Yang:

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

wang ziyuan:

回复 Lion chang:

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

赞(0)
未经允许不得转载:TI中文支持网 » ADS1247寄存器数据读不出来
分享到: 更多 (0)