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.

ADS1248,怎么使用内部参考,使用后怎么确定它使用成功了?

Other Parts Discussed in Thread: ADS1248, MSP430F1611

我用一个120欧姆的电阻来测试ADS1248模块,打算选用内部参考,但是不知道怎么用,求指导。下面给出我的原理图

  • Hi

       采用内部参考电压可以用ADC寄存器设置:

      

          可以VREFCON设置为01,内部参考电压总开启; REFSELT设置为10,内部参考电压选择。当寄存器设置好启动后可以在REFOUT测试到参考电压(REFOUT上需要bypass电容的)。

  • 按照你指示的做了,REFOUT能量到2.048V的电压。在此,我还有一个问题,我使用内部参考的话,PREFP0、PREFN0、PREFP1、PREFN1、这些引脚该怎么处理,需要接什么东西吗?

    我的寄存器配置如下:

    ADS1248WREG(ADS1248_REG_MUX0,0x01); //00000001,Bit7-6:传感器电流源检测不使用,Bit5-3:正输入为AIN0,Bit2-0:负输入为AIN1
    //初始化MUX1多路复用控制寄存器
    ADS1248WREG(ADS1248_REG_MUX1,0x30); //00110000,Bit7:启用内部晶振,Bit6-5:内部基准一直打开,Bit4-3:输入基准以板上为准,Bit2-0:普通模式
    //延时等待10ms,等待内部基准稳定
    Delay(6*DELAY_10ms);
    //初始化VBIAS偏压寄存器
    ADS1248WREG(ADS1248_REG_VBIAS,0x00); //00000000,Bit7-0:偏置电压选择关闭
    //初始化IDAC1控制寄存器
    ADS1248WREG(ADS1248_REG_IDAC1,0x8F);//10001111,Bit7-4:内部第一恒流源的连接ANO,Bit3-0:内部第二恒流源的关闭
    //初始化IDAC0控制寄存器
    ADS1248WREG(ADS1248_REG_IDAC0,0x06); //00000111,Bit7-4:只读,Bit3:DOUT功能 ,Bit2-0:1.5mA内部恒流源
    //初始化SYS0系统控制寄存器
    ADS1248WREG(ADS1248_REG_SYS0,0x7F); //01111111,Bit7:必须设置为0,Bit6-41:选择128倍增益,Bit3-0:选择2000SPS测量速度

    ADS1248WREG(ADS1248_REG_GPIOCFG,0x09);

    电阻通过AN0,AN1接入电路,如图所示,请看看有没有什么问题?我这样,读出来的数据完全不对

  • 手册上没有所谓的PREFP0和PREFP1这些东西,外部参考输入引脚是REFP0/N0和REFP1/N1,如果启用内部基准,这些引脚可以悬空。

    至于配置,没看懂。手册上一共有11个寄存器,地址从0x00到0x0A。从你的配置上,看不出来地址,寄存器的数目也不对。

  • 所有的寄存器都要配置吗?感觉GPIO相关的寄存器不需要配置啊

  • 你好,请我打开内部恒流源 IDAC,是不是只要配置寄存器就好了?硬件上还需要做什么吗?

  • 内部恒流源可以通过写0x0A地址的[2:0]实现。启动这个功能,输入口会向前端电路注入电流,通过前端的电阻性负载转换成电压,详见手册图85。这个功能一般是用在温度检测的应用。

  • 我的寄存器配置为: IDAC0:0x07,MUX0:0x01,MUX1:0x38,IDAC1:0x01,SYS0:0x5F,但是没有电流输出,请问是什么原因?接线图如下,我在J3元件的1、2脚接入了一个120欧姆的电阻,把寄存器配置写进去以后,电阻2端没有电压。确定配置已经写进去了

  • 你好,可以帮我解决这个问题吗?谢谢

  • 寄存器配置写进去了,但恒流源没有输出,电阻两端量不到电压,是什么情况?

  • 配置没错,你的电路图错了。手册上的电路图是这样的,AIN0和AIN1都有让电流流到地的通路。你的电路图里,AIN0和AIN1通过一个120欧姆电阻连接到一起,但是没有电流流到地的通路,那么你想让电流怎么流??你再仔细看一下下面这个电路,然后修改一下你的电路图。

  • 可以有电流输出了,谢谢

  • 帮帮忙吧,看看我哪里错了,没有参考电压输出,指令发出去好像没什么作用,也不知道发出去了没,读就更不用说了

     

     

    #include "Ads1248.h"
    //单片机是MSP430F1611  主时钟是 1M

    /********************************************************************
    函数名称:SPI1初始化
    功    能:初始化SPI1
    参    数:无      
    返回值  :无
    ********************************************************************/
    void Init_Spi1(void)
    {  
        unsigned int i;
        P4OUT |=  BIT6 + BIT4 + BIT1 + BIT0;
        P4DIR |=  BIT6 + BIT4 + BIT1 + BIT0;
        P4DIR &= ~BIT5 ;
       
        P5OUT |=  BIT1 + BIT3;                            
        P5DIR |=  BIT1 + BIT3;
        P5DIR &= ~BIT2 ;
        for (i = 0xFF; i > 0; i--);   
    }

    /********************************************************************
    函数名称:发送数据
    功    能:
    参    数:     
    返回值  :
    *********************************************************************/
    void Spi3WriteByte(unsigned char Byte)
    {
        unsigned char i;
        ADC_SPI_CLK_CLR ;
        ADC_SPI_CLK_CLR ;
        for(i=0;i<8;i++) 
        {
          ADC_SPI_CLK_SET;
          ADC_SPI_CLK_SET;
          if(Byte&0x80)
            {ADC_SPI_DIN_SET;}
          else 
            {ADC_SPI_DIN_CLR;}
         
          Byte=Byte<<1;
         
          ADC_SPI_CLK_CLR;
          ADC_SPI_CLK_CLR;     
        }
    }
    /********************************************************************
    函数名称:读接收的数据
    功    能:
    参    数:     
    返回值  :接收数据
    *********************************************************************/
    unsigned char Spi3ReadByte(void)
    {
        unsigned char i,Byte=0;
        ADC_SPI_CLK_CLR ;
        ADC_SPI_CLK_CLR ;
        for(i=0;i<8;i++) 
        {
          ADC_SPI_CLK_SET;
          ADC_SPI_CLK_SET;
          Byte = (Byte<<1)|ADC_SPI_OUT;
          ADC_SPI_CLK_CLR ;
          ADC_SPI_CLK_CLR ;
        }
        return Byte; 
    }

    /********************************************************************
    函数名称:读接收的数据 long
    功    能:
    参    数:     
    返回值  :接收数据
    *********************************************************************/
    unsigned long int Spi3Read3Byte(void)
    {
        unsigned char i;
        unsigned long int Byte3;
        ADC_SPI_CLK_CLR;
        ADC_SPI_CLK_CLR;
        for(i=0;i<24;i++) 
        {
          ADC_SPI_CLK_SET;
          ADC_SPI_CLK_SET;
          Byte3 = (Byte3<<1)|ADC_SPI_OUT;
          ADC_SPI_CLK_CLR;
          ADC_SPI_CLK_CLR;
        }
        return Byte3; 
    }

    /********************************************************************
    函数名称:读寄存器
    功    能:
    参    数:     
    返回值  :
    *********************************************************************/
    unsigned char ADS1248_ReadReg(unsigned char RegAddr) 
    {   
         unsigned char Readregs;
         Spi3WriteByte(ADC_CMD_RREG + (RegAddr&0X0f));
         Spi3WriteByte(0);
         Readregs=Spi3ReadByte();
         Spi3WriteByte(ADC_CMD_NOP);
         return Readregs;

     
    /********************************************************************
    函数名称:写寄存器
    功    能:
    参    数:     
    返回值  :
    *********************************************************************/
    void ADS1248_WriteReg(unsigned char RegAddr,unsigned char Buffer) 
    {       
        Spi3WriteByte(ADC_CMD_WREG + (RegAddr&0x0f));
        Spi3WriteByte(0);
        Spi3WriteByte(Buffer);

    void ADS1248_Init(void) 

        ADC_START_CLR;
        ADC_SPI_CS_CLR;
       
        ADC_RESET_CLR;
        delay_ms(20);
        ADC_RESET_SET;
        delay_ms(20);   
        Spi3WriteByte(ADC_CMD_RESET);    //初始化所有寄存器
        delay_ms(5);
       
        ADS1248_WriteReg(ADC_REG_MUX0,0x01);delay_ms(10);
        ADS1248_WriteReg(ADC_REG_MUX1,0x30);delay_ms(1000);
        ADS1248_WriteReg(ADC_REG_VBIAS,0x00);delay_ms(10);
        ADS1248_WriteReg(ADC_REG_IDAC1,0xff);delay_ms(10);
        ADS1248_WriteReg(ADC_REG_IDAC0,0x08);delay_ms(10);
        ADS1248_WriteReg(ADC_REG_SYS0,0x0f);delay_ms(10);
     

    /*---------------------------------------------------------
     数据读取
    ---------------------------------------------------------*/ 
    unsigned long int ADS1248_Read(void) 
    {  
        unsigned long int DataS;
        Spi3WriteByte(ADC_CMD_RDATA);
        DataS=Spi3Read3Byte();
        Spi3WriteByte(ADC_CMD_NOP);
        return DataS; 

  • 你先测试下,把数据写到寄存器里,然后读回来,看看SPI读写有没有问题。SPI通讯的原理你要好好看看

  • 这是我的SPI程序:

    unsigned char ADS1248SPI(unsigned char m)
    {
           unsigned char i,r=0;
         unsigned short* pState0;//出口
        unsigned short* pState1;//出口反校
        pState0=(unsigned short*)0x202E0004;
        pState1=(unsigned short*)0x202E0008;
        for(i=0;i<8;i++)
        {
          sck_set(1);
              r=r<<1;
          Delay(100);
          if(m & 0x80)
       {
         sdin_set(1);
           }  
       else
       { 
        sdin_set(0);
           }
       m = m<<1;
            sck_set(0);
             if(!(*pState1==0xbf))
       {
        r++;
       }
        Delay(100);
       
        }
          return r;
        
    }

  • 多谢了!还在挣

  • 发写入这寄存器,30,用还是没输,能帮我这个spi读写程不,模尼的

  • 终有参考电压了,内的,但是1.86v,不是2.048v,这是什问题

  • 您好:

            我把该寄存器设置成0x30 还是测不到REFOUT端的参考电压,您说的设置好还要启动,这个启动怎么启动?谢谢

     

  • 您好:

            我把该寄存器设置成0x30 还是测不到REFOUT端的参考电压,您说的设置好还要启动,这个启动怎么启动?谢谢