ADS1248,怎么使用内部参考,使用后怎么确定它使用成功了?
我用一个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端的参考电压,您说的设置好还要启动,这个启动怎么启动?谢谢