微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1255读写寄存器问题

ADS1255读写寄存器问题

时间:10-02 整理:3721RD 点击:

这是我初始化ADS1255函数 和 读写寄存器函数。SPI速度设置为最低速300KHZ左右。请问各位和TI工程师,这是怎么回事。谢谢!

经过串口,首先把ADS1255寄存器的缺省值显示出来,再写进去再经串口显示出来。但是无论是读ADS1255寄存器的初始值也不对,读经过写之后的值也不对。

无论是第一次读,还是写后再读,都是显示一些255 63 253等等的数值(255居多)。

SPI_SendByte函数就是STM32库函数中SPI发送Byte函数
/////////////////////////////////////
//ADS1255硬件reset函数
/////////////////////////////////////
void ADS1255_ResetHard(void)
{
	ADS_RESET_LOW();
	delay_us(5);
	ADS_RESET_HIGH();
	delay_us(5);
}

///////////////////////////////////
///ADS1255写寄存器函数
//////////////////////////////////
void ADS1255_WREG(unsigned char regaddr,unsigned char databyte)
{
	ADS_CS_LOW();
	while(ADS_DRDY);
	SPI_SendByte(ADS1255_CMD_WREG | (regaddr & 0x0F));
	SPI_SendByte(0);
	delay_us(100);		//
	SPI_SendByte(databyte);
	ADS_CS_HIGH();
}

//////////////////////////////////////////////
///ADS1255读寄存器函数
//////////////////////////////////////////////
unsigned char ADS1255_RREG(unsigned char regaddr)
{
	unsigned char r=0;
	ADS_CS_LOW();
	while(ADS_DRDY);
	SPI_SendByte(ADS1255_CMD_RREG | (regaddr & 0x0F ));
	SPI_SendByte(0);
	delay_us(10);		//t6
	r=SPI_SendByte(0);
	ADS_CS_HIGH();
	return r;
}

//////////////////////////////////////////////
//ADS1255初始化函数
///////////////////////////////////////////////
void ADS1255_Init(void)
{
	u8 i=0;
	unsigned char tab1[4];
	ADS1255_ResetHard();
	ADS_CS_LOW();
	tab1[0]=ADS1255_RREG(0);	//x1h
	tab1[1]=ADS1255_RREG(1);	//01h=1d	
	tab1[2]=ADS1255_RREG(2);	//20h=32d
	tab1[3]=ADS1255_RREG(3);	//f0h=240d
	//tab1[4]=ADS1255_RREG(4);	//e0h=224d
	ADS_CS_HIGH();
	for(i=0;i<4;i++)
	{
		printf("o:%d\r\n",(u8)tab1[i]);
		delay_ms(100);
	}
	
	ADS_CS_LOW();
	while(ADS_DRDY);
	SPI_SendByte(ADS1255_CMD_WREG | ADS1255_STATUS);
	SPI_SendByte(3);
	SPI_SendByte(0x06);		//status
	SPI_SendByte(0x10);		//mux
	SPI_SendByte(0x00);		//adcon
	SPI_SendByte(0x03);		//drate
	//SPI_SendByte(0xD0);		//io
	ADS_CS_HIGH();
	
	delay_us(100);
	tab1[0]=ADS1255_RREG(0);
	tab1[1]=ADS1255_RREG(1);
	tab1[2]=ADS1255_RREG(2);
	tab1[3]=ADS1255_RREG(3);
	//tab1[4]=ADS1255_RREG(4);
	for(i=0;i<4;i++)
	{
		printf("a:%d\r\n",(u8)tab1[i]);
		delay_ms(100);
	}
}

有没有用示波器检查一下读写的波形,看看时序和写入、读出的值跟软件采集到的是否一致?

我用示波器是看过SPI发数据时有 时钟输出,用普通的示波器能看出SPI_SendBYTE()发出的值吗?谢谢

能的,用示波器的STOP键捕捉到波形数据然后译码成二进制

好的,谢谢您。我测试下,再咨询您!谢谢

你好,opa627BP 用来做前级放大,接地电阻用多少才合适,反馈电阻用多少才合适,谢谢

你好,opa627BP 用来做前级放大,接地电阻用多少才合适,反馈电阻用多少才合适,谢谢

你的意思是使用opa627BP做同相放大电路吗?,放大多少倍

HELLO CARTER

有没有可能出现寄存器读写正确,举例子,我对STATUS寄存器写进去0x06,读出来也是0x06。但是转换结果就是不对,怎么办?转换结果还是一些超过0x7FFFF的杂乱非重复的数据。

THANK YOU!

我觉得要看一下你的参考电压是否稳定、输入信号到AD引脚是否稳定吧,排除硬件上的问题

参考电压是稳定,输入信号(我用单通道,AIN0短接ACOM),然后循环去读(RDATA模式读)通道0转换结果,但是结果不是一些  接近0x000000的数据,而是一些0xFF8000,0xFF80FF等等数据。谢谢您!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top