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.

[参考译文] ADS1256:具有波形共享精密电路板,如何获得差动电压?

Guru**** 2387830 points
Other Parts Discussed in Thread: ADS1256
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/578805/ads1256-have-waveshare-precision-board-how-to-get-differential-voltage

部件号:ADS1256

我有带ads1256的Waveshare Precision AD/DA板。 我想要进行差分电压,并使用A0和A1作为低电压正负输入。 该板随附的ads1256的示例代码为C,只需连续扫描所有输入并打印到我的Raspberry Pi 3B终端。 我是新手,所以请原谅我,但我的印象是,我可以通过使用“差异”模式获得一个单一的值,即Vinp和Vinn值的差异。 但我不知道该如何处理。 我将从下面的示例中粘贴我拥有的代码。 感谢所有愿意帮忙的人!

/*
ADS1256_test.c:
*	用于测试串行端口的非常简单的程序。 期望
*	端口回环至自身
*//*



从bcm2835.h进行定义 从板DVK511定义
3.3V || 5V -> 3.3V || 5V
RPI_V2_GPIO _P1_03 | 5V -> SDA || 5V
RPI_V2_GPIO _P1_05 | GND -> SCL || GND
RPI_GPIO _P1_07 || RPI_GPIO _P1_08 -> IO7 || TX
GND || RPI_GPIO _P1_10 -> GND || RX
RPI_GPIO _P1_11 || RPI_GPIO _P1_12 -> IO0 || IO1
RPI_V2_GPIO _P1_13 | GND -> IO2 || GND
RPI_GPIO _P1_15 || RPI_GPIO _P1_16 -> IO3 || IO4
VCC || RPI_GPIO _P1_18 -> VCC || IO5
RPI_GPIO_P1_19 | GND -> MOSI || GND
RPI_GPIO _P1_21 || RPI_GPIO _P1_22 -> 味增|| IO6
RPI_GPIO _P1_23 || RPI_GPIO _P1_24 -> sck || ce0
GND || RPI_GPIO _P1_26 -> GND || CE1

::如果您的Raspberry Pi是版本1或版本1或版本A
RPI_V2_GPIO _P1_03->RPI_GPIO _P1_03
RPI_V2_GPIO _P1_05->RPI_GPIO _P1_05
RPI_V2_GPIO _P1_13->RPI_GPIO _PI_PIO_err_13
::
:*/#PI_GPIO _P1_05_05.1_05.h>






包含<b.1_<b.sth><ine.h>列#c包括<b><b.1_<b>列#c<b.h>列#cine.h>

——— SPICS
//DIN ——— MOSI
//DOUT -- 味增
//SCLK --- SCLK
//DRDY ------- CTL_IO 数据开始
//RST ——— CTL_IO 重置



#define DRDY RPI_GPIO _P1_11 //P0
#define RST RPI_GPIO _P1_12 //P1
#define	SPICS	RPI_GPIO_P1_15	//P3

#define CS_1() BCM2835_GPIO写入(SPICS,高位)
#define CS_0() BCM2835_GPIO写入(SPICS, low)

#define DRDY_is_low()	(BCM2835_gPI_LEV_NOTE_ST=2835;

	
	




define2835 define #unsignat_RS_RS_1;#331; define #128_RS_RS=8 rut_rt #128_rt (#






typedef enum {false =0, true =!false} bool;


/*增益channelî*/
typedef enum
{
	ADS1256_gain			=1 =(0),	/*增益1 */
	ADS1256_gain			_2 =(1),	/*增益2 */
	ADS1256_gain			=(2),	/*增
					益4 */1256_gain =
	1216 				/*增益16 */
	ADS1256_GAIN_32			=(5),	/*增益32 */
	ADS1256_GAIN_64			=(6),	/*增益64 */
}ADS1256_GAIN_E;

/*采样速度选项*/*

	111万 SPS =3万SPS (默认)
	11100000=15,000SPS
	11010000=7,50011000000=3,750SPS1.5万 11010000=7,50011000000=3,750SPS 10110000=2,000SPS11010000 10110000=2,000SPS
	
	
	1010000001750.011万 1010000001 =1,000SPS0万 =1,000SPS
	SPS3750 SPS 10010=500SPS1011万 10010=500SPS
	10000010=10001001110010=6010001000100011=50110010011=3010010011=1000SPS2000 10000010=10001001110010=6010001000100011=50110010011=3010010011=1000SPS
	
	10011=100010011=1000SPS1010000001 10011=100010011=1000SPS 10011=100010011=1000100000SPS1000 10011=100010011=1000100000SPS
	
	1001110010 10011 SPS1001110000010 SPS10011 SPS1001110001001110010 SPS10011 SPS100116010.001万 SPS10011 SPS1001110.0011万 SPS10011 SPS=1000SPS50.11万 SPS=1000SPS 10011
	1.0011万 10011 SPS10011=30.10010011亿 SPS10011=</s>1000 1.0011万1000100111000100111.00010011亿10.001亿100111001110011100111001110001.0011万10011
	
	5SPS
	0.0011万 = 2.5SPS
*/
typedef enum
{
	ADS1256_30000SPS =3万 = 0,
	ADS1256_15000SPS,1.5万,
	ADS1256_7500SPS,7500,
	ADS1256_3750SPS,3750,
	ADS1256_2000SPS,2000,
	ADS1256_1000SPS,1000,
	ADS1256_500SPS,
	ADS1256_100SPS,
	ADS1256_60SPS,
	ADS1256_50SPS,
	ADS1256_30SPS,
	ADS1256_25SPS,
	ADS1256_15SPS,
	ADS1256_10SPS,
	ADS1256_5SPS,
	ADS1256_2d5SPS,

	ADS1256_DRATE_MAX
}ADS1256_DRATE_E;

#define ADS1256_DRAE_COUNT =15;

typedef结构
{
	ADS1256_GANE_E增益;		/*增益*/ ADSD1256_DRATE_E
	数据速率;	/*数据输出速度*/
	集成32_t ADV/			
				
		通道8£¬输入/通道8通道/通道8通道/通道




/*注册定义£º 表23. 寄存器映射--- ADS1256数据表第30*/
枚举
{/*Register
	address,然后重置默认值*/
	REG_STATUS =0,	// x1H
	REG_MUX =1,// 01H
	REG_ADCON =2,// 20H
	REG_DRATE =3,// F0H
	REG_IO = 4,// E0H
	REG_OFC0 = 5,// XXh
	REG_OFC1 = 6,// XXh
	REG_OFC2 = 7,// XXh
	REG_FSC0 = 8,// XXh
	REG_FSC1 = 9,// XXh
	REG_FSC2 = 10,// XXh
};

/*命令定义£º tTable 24。 命令定义--- ADS1256数据表第34页*/
枚举
{
	CMD_WAKEUP = 0x00,	//完成同步并退出待机模式0000 0000 (00h)
	CMD_RDATA = 0x01,//读取数据0000 0001 (01h)
	CMD_RDATAC = 0x03,//连续读取数据0000 0011 (03h)
	CMD_SDATAC = 0x0F //连续停止读取数据0000 1111 (0Fh)
	CMD_RREG = 0x10,//从REG RRR 0001 rrrrrr (1xh)
	CMD_WREG = 0x50,//写入REG RRR 0101 rrrrrrr (5xh)
	CMD_SELFCAL = 0xF0,//偏移和增益自校准FO0000(F0h,
	CMD= //偏移自校准1111 0001 (F1h)
	CMD_SELFGCAL= 0xF2,//增益自校准1111 0010 (F2h)
	CMD_SYSOCAL = 0xF3,//系统偏移校准
	
	1111 0011 (F3h) CMD_SYSGCAL = 0xF4,//系统增益校准1111 0010 (F2h) CMD_SYSOCAL = 0xF3,//系统偏移校准111.1001万 001111.1001万1 (F3h) CMD_SYNC = FC/ FD,同步FC0100,FC/ FD = 0xD转换
	//开始待机模式1111 1101 (FDH)
	CMD_reset = 0xFE,//重置为通电值1111 1110 (FEH)
};


ADS1256_VAR_T g_t1256;
静态连接uint8_t s_tabDataRate[ADS1256_DRATE_MAX]=
{
	0xF0,		/*重置默认值* 0xCAT0
	,0xB0
	
	
	
	
	0x92,
	0x82,
	0x72,
	0x63,
	0x53,
	0x43,
	0x33,
	0x20,
	0x13,
	0x03
};







void BSP_DelayUS (uint64_t micros);
void ADS1256_StartScan (uint8_t _ucScanMode);
静态void ADS1256_Send8Bit (uint8_t _data);
void ADS1256_CfgADC (ADS1256_Gain _E _Gain,ADS1256_DRATE_Drate);
static void (ADS1256_DE8)

静态无效ADS1256_WriteReg (uint8_t _RegID, uint8_t _RegValue);
静态uint8_t ADS1256_ReadReg (uint8_t _RegID);
静态


无效




ISR 1256_WriteCmd (uint8_t _Waitcmd);uint_ADS1256_Advoid _Invoid ADS1256_Int (static Isch_Invoid 556_Ind (static_Isch_Isch_Isch_56_Isch_Isch)
UINT8_t ADS1256_Scan(void);




void BSP_DelayUS(uint64_t micros)
{
		BCM2835_delayMicroseconds (micros);
}/******************************************************************************************************




*	名称:BSP_InitADS1256
*	函数:STM32 GPIO和SPI接口的配置£¬连接ADS1256
*	参数:空
*	返回值:空

*/


void BSP_InitADS1256 (void)
{
#ifdef soft_SPI
	CS_1();
	SCK_0();
	DI_0();
#endif

//ADS1256_CfgADC (ADS1256_gain _1,ADS1256_1000SPS)1000); 	/*ÅäÖÃADC²ÎÊý£º ÔöÒæ1:1,Êý¾ÝÊä³öËÙÂÊ 1KHz */
}




/*
*******************************************************************************************************************************************************************
*	名称:ADS1256_StartScan
*	函数:外部中断的配置DRDY PIN被触发
*	参数:_ucDiffMode:0单端输入8通道£¬1差分输入4通道
*	返回值:空
*******************************************************************************************************************
*/
void ADS1256_StartScan(uint8_t _ucScanMode)
{
	g_tADS1256.ScanMode =_ucScanMode;/*
	¿ªÊ¼É¨ÃèǰÇåÁã½á¹û»º³åÇø*/
	{
		uint8_t i;

		g_tADS1256.Channel =0;

		for (I = 0; I < 8;i++)
		{ g_tADS1256.*****************+;*********************************************************/}*********************************+*>
			
		
	





*	名称:ADS1256_Send8Bit
*	函数:SPI总线发送8位数据
*	参数:_data: data
*	返回值:空
*******************************************************************************************************************
*/
静态void ADS1256_Send8Bit (uint8_t _data)
{

	BSP_DelayUS(2);
	BCM2835_SPI_transfer (_data);
}/******************************************************************************************************************



*	名称:ADS1256_CfgADC
*	函数:ADC,增益和数据速率的配置参数
*	参数:_Gain:Gain 1-64
* _drate:数据速率
*	返回值:空
*****************************************************************************************************************************************
*/
void ADS1256_CfgADC(ADS1256_GANE_E _Gain1256 _Gain,ADS1256_DRATE_E _drate)
{g_tADS1256.Gain
	=_Gain;
	g_tADS1256.datarate =_drate;

	ADS1256_WaitDY();

	{uint8_t
		buf[4];		/ID3*

		
			只读存储器3

			位,只读存储器配置(ID1256*) 数据输出位顺序
				0=最高有效位优先(默认)
				1=最低有效位第一输入
			数据始终以最高有效字节偏移,位优先。 输出数据总是
			首先移出最重要的字节。 顺序位仅控制字节内输出数据的位顺序。

			位2 ACAL: 自动校准
				0=禁用自动校准(默认)
				1=启用自动校准
			当启用自动校准时,自校准在完成WREG命令时开始,WREG命令更改
			PGA (ADCON寄存器的第0-2位),DR (DRATE寄存器中的第7-0位)或BUFEN (状态寄存器中的第1位)
			值。

			位1 BUFEN:模拟输入缓冲启用
				0=禁用缓冲区(默认)
				1=启用缓冲

			区位0 DRDY:数据就绪(只读)
				此位复制DRDY引脚的状态。

			acal=1 enable calibration
		*///buf[0]
		=(0 <<3)|(1<<2)|(1<<1);//启用内部缓冲区
buf[0]=(0<3)|(1<2)|(0<1);//内部缓冲区被禁止

//ADS1256_WriteReg (REG_STATUS,(0 <<3)|(1 <<2)|(1 <<1));

		buf[1]= 0x08;	

		/*	ADCON:A/D控制寄存器(Address 02h)
			位7保留,始终为0 (只读)
			位6-5 CLK1, CLK0: D0/CLKOUT时钟输出速率设置
				00 =时钟输出关闭
				01 =时钟输出频率= fCLKIN (默认)
				10 =时钟输出频率= fCLKIN/2
				11 =时钟输出频率= fCLKIN/4
				不使用CLKUT时,建议将其关闭。 这些位只能使用复位引脚进行复位。

			位4-3 SDCS1,SCDS0: 传感器检测电流源
				00 =传感器检测关闭(默认)
				01 =传感器检测电流= 0.5 ¦Ì A
				10 =传感器检测电流= 2¦Ì A
				11 =传感器检测电流= 10¦Ì A
				传感器检测电流源可激活以验证的完整性 为
				ADS1255/6提供信号的外部传感器。 短路传感器产生非常小的信号,而断路传感器产生非常大的信号。

			位2-0 PGA2,PGA1,PGA0:可编程增益放大器设置
				000 = 1 (默认)
				001 = 2010
				= 4011
				= 8100
				= 1.6101万
				= 3.211万
				= 6.4111万
				= 64
		*/
		buf[2]=(0 <5)|(0 <3)|(_增益<0);
		//ADS1256_WriteReg (REG_ADCON,(0<5)|(0<2)|(GINE_1<1));	/*选择1:增益1;输入5V/buf[3]
		= s_tabDataRate[_drate];	// DR8BATE_10SPS;	

		CS_0();	/* SPIƬѡ= SDBON_1256*
			
					;地址0*0;DS8B56*;地址0*0/发端存器(NODE)

			/*设置状态寄存器*/
		ADS1256_Send8Bit(buf[1]);	/*设置输入通道参数*/
		ADS1256_Del8Bit(buf[2]);	/*设置ADCON控制寄存器,增益*/
		ADS1256_Send8Bit(buf[3]);	/*设置输出速率*/

		CS_1(f*;*****************/*/}}}*********************************************************SPBSPBs*/}/*************************/*********/*********/*********/*********/*********/<bf*> 	
	

	





*	名称:ADS1256_DelayDATA
*	函数:延迟
*	参数:空
*	返回值:空
***************************************************************************************************
*/
静态void ADS1256_DelayDATA(void)
从
	
		DIN的最后一个SCLK边缘到DOUT的第一个SCLK上升边缘的{/*延迟:RDATA,RDATAC,RREG命令
		最小值50 CLK =50*0.13uS =6.5uS
	*/
	BSP_DelayUS(10);	/*最小延时6.5us */******************************************************************************************







*	名称:ADS1256_Recive8Bit
*	函数:SPI总线接收函数
*	参数:空
*	返回值:空
***********************************************************************************
*/
静态uint8_t ADS1256_Recive8Bit(void)
{
	uint8_t read =0;
	read = BCM2835_SPI_transfer (0xff);
	return read;
}/*

*****************************************************************************************

*	名称:ADS1256_WriteReg
*	函数:写入相应的寄存器
*	参数:_RegID:寄存器ID
*			_RegValue:寄存器值
*	返回值:空
***********************************************************************************
*/
static void ADS1256_WriteReg (uint8_t _RegID, uint8_t _RegValue)
{
	CS_0();/*	Sendcs =0*/ADS1256_SendSPI
	(CMD_WREG|_RegID);/*Write	命令寄存器*/ADS1256_8Bit
	(0x);/*SendSPI		*/*************************/*REGIS_REGIS_REG1*

		
		




*	名称:ADS1256_ReadReg
*	函数:读取相应的寄存器
*	参数:_RegID:寄存器ID
*	返回值:读取寄存器值
***************************************************************************************************
*/
静态uint8_t ADS1256_ReadReg (uint8_t _RegID)
{uint8_t
	读;

	CS_0();	/* SPI cs =0*/
	ADS1256_Sendit(CMD_RREG |_RegID);	/*写入命令寄存器*/
	ADS1256_8Bit(0x00);	/*读取

	时间寄存器*1256_DREG_D56*读 	

		
		/* SPI cs =1 */

	返回读取;
}/****************************************************************************************************************************



*	名称:ADS1256_WriteCmd
*	函数:发送单字节顺序
*	参数:_cmd:命令
*	返回值:空
***************************************************************************************************************************
*/
static void ADS1256_WriteCmd (uint8_t _cmd)
{
	CS_0();/*	SPI cs =0*/
	ADS1256_Send8Bit (_cmd);
	CS_1();/*	SPI cs =1*/}/**********************************************************************************




*	名称:ADS1256_ReadChipID
*	函数:读取芯片ID
*	参数:_cmd:NULL
*	返回值:四个高状态寄存器
***************************************************************************************************
*/
uint8_t ADS1256_ReadChipID(void)
{
	uint8_t id;

	ADS1256_WaitDRDY();
	id = ADS1256_ReadReg (REG_STATUS);
	return (id >> 4);
}/**********************************************************************************



*	名称:ADS1256_SetChannal
*	函数:配置信道编号
*	参数:_ch:信道编号0--7
*	返回值:空
***************************************************************************************************
*/
static void ADS1256_SetChannal(uint8_t _ch)
{/*
	
	Bits 7-4 PSEL3, PSELL2, PSEL1, PSEL0:正输入通道(AINP)选择
		0000 = AIN0 (默认)
		0001 = AIN10010
		= AIN2 (仅ADS1256)
		0011 = AIN3 (
		
		仅ADS1256 = AIN5 (仅ADS1256
		= AIN0)
		0111 = AIN7 (仅限ADS1256)
		1xxx = AINCOM (当PSEL3 = 1,PSEL2,PSEL1,PSEL0¡°不在乎¡¯¡±时)

		注:使用ADS1255时,确保仅选择可用输入。

	位3-0 NSEL3,NSEL2,NSEL1,NSEL0:负输入信道(AINN)选择
		0000 = AIN00001
		= AIN1 (默认)
		0010 = AIN2 (仅ADS1256)
		0011 = AIN3 (仅ADS1256)
		0100 = AIN4 (仅ADS1256)
		0101 = AIN5 (
		
		仅ADS1256
		= AIN6 (仅AIN110 = AIN6)(仅AIN11 (当NSEL3 = 1,NSEL2,NSEL1,NSEL0为¡°don¡¯t Care¡±时)
	*/
	IF (_ch > 7)
	{
		RETURN;
	}
	ADS1256_WriteReg (REG_MUX,(_ch <<4)|(1 <<3));	/* Bit3 = 1,AINN连接AINCOM */



*****************************************************************************************
*	名称:ADS1256_SetDiffChannal
*	函数:配置差异信道
*	参数:_ch:信道编号0--3
*	返回值:四个高状态寄存器
*******************************************************************************************
*/
static void ADS1256_SetDiffChannal(uint8_t _ch)
{/*
	
	Bits 7-4 PSEL3, PSEL2, PSEL1, PSEL0:正输入通道(AINP)选择
		0000 = AIN0 (默认)
		0001 = AIN10010
		= AIN2 (仅ADS1256)
		0011 = AIN3 (仅
		ADS1256
		
		= AIN5 (仅AIN0)
		0111 = AIN7 (仅限ADS1256)
		1xxx = AINCOM (当PSEL3 = 1,PSEL2,PSEL1,PSEL0¡°不在乎¡¯¡±时)

		注:使用ADS1255时,确保仅选择可用输入。

	位3-0 NSEL3,NSEL2,NSEL1,NSEL0:负输入信道(AINN)选择
		0000 = AIN00001
		= AIN1 (默认)
		0010 = AIN2 (仅ADS1256)
		0011 = AIN3 (仅ADS1256)
		0100 = AIN4 (仅ADS1256)
		0101 = AIN5 (
		
		仅ADS1256
		= AIN6 (仅AIN110 = AIN6)(仅AIN11 (当NSEL3 = 1,NSEL2,NSEL1,NSEL0为¡°don¡¯t Care¡±时)
	*/
	IF (_ch == 0)
	{
		ADS1256_WriteReg (REG_MUX,(0 << 4)| 1);	/* DiffChannal AIN0£¬AIN1 *
	/}
	Else IF (_ch == 1<)
	12REG,
		<_4 (_MUX) 	/* DiffChannal AIN2£¬AIN3 */
	}
	else if (_ch ==2)
	{
		ADS1256_WriteReg (REG_MUX,(4 <<4)|5);/*DiffChannal	AIN4£¬AIN5 */
	}
	else if (_ch == 3)
	{
		ADS1256_WriteReg (********_4)|5******************/*********6	£¬*/*********
	




*	名称:ADS1256_WaitDRDY
*	函数:延迟时间等待自动校准
*	参数:空
*	返回值:空
*******************************************************************************************
*/
静态void ADS1256_WaitDRDY(void)
{
	UINT32_t I;

	for (I = 0;I < 40万; i+)
	{
		IF (DRDY_is_low()){
		
			Break;
		}}
	
	IF (I >= 40万)
	{
		printf("ADS1256_************************************************DRDY()超时...\r\n"}*} 		
	




*	名称:ADS1256_ReadData
*	函数:读取ADC值
*	参数:空
*	返回值:空
*******************************************************************************************
*/
static Int32_t ADS1256_ReadData (void)
{
	UINT32_t read =0;
static uint8_t buf[3];

	CS_0();	/* SPI cs =0 */

	ADS1256_Send8Bit(CMD_RDATA);	/* Read ADC command */

	ADS1256_DelayDATA();	/*Delay Time */

	/*读取样本结果24bit*/
buf[0]= ADS1256_Recive8Bit();
buf[1]= ADS1256_Recive8Bit();
buf[2]= ADS1256_Recive8Bit();

读取=((UINT32_t) buf[0]<16)和0x00FF0000;
Read |=((UINT32_t)buf[1]<8);/*注意It is wrong read ||(buf[1]<8)*/
阅读|= buf[2];

	CS_1();	/* SPIƬѡ=1*/*

	扩展已签名的号码*/
IF (读取和0x80万)
{
	读取|= 0xFF0万;
}

	RETURN (Int32_t) READ;
}/**************************************************************************************************************************




*	名称:ADS1256_GetAdc
*	函数:读取ADC值
*	参数:通道编号0--7
*	返回值:ADC vaule (签名编号)
*******************************************************************************************
*/
Int32_t ADS1256_GetAdc (uint8_t _ch)
{
	Int32_t ITEMP);

	IF (_ch >7){
	
		RETURN 0;}
	

	ITEMP = g_tADS1256.AdcNow[_ch];

	RETURN ITEMP;
}/**************************************************************************



*	名称:ADS1256_ISR
*	函数:收集过程
*	参数:空
*	返回值:空

*/
void ADS1256_ISR(void)
{
	IF (g_tADS1256.ScanMode ==0)	/* 0单端输入8通道£¬1差分输入4通道*/
	{

		ADS1256_SetChannal(g_tADS1256.Channel);1256.;	/*开关通道模式*/
		BSP_DelayUS(5);ADS1256_WritayUS_Delayd(cwakeD)(BSP_Delayd)1256_CM_Cmd;</s>1256

		
		

		
		

		IF (g_tADS1256.Channel ==0)
		{
			g_tADS1256.AdcNow[7]= ADS1256_ReadData();	
		}
		ELSE
		{
			g_twake1256.AdcNow[g_tADS1256.Channel-1]=1256.= ADS1256_ReadData();	
		

		ADSif (++g_twake=1256_DiffSale*1256; ADS1256_Channelx_US_1256_Channel*1256;1256 ADS1256_Channelx_US_1256_Channel*1256; ADS1256=1256 ADS1256= ADS1256_ADS1256_ADS1256_Channelx1256_ADS1256;1256 ADS1256_ADS1256_ADS1256_Channelx1256_ADS1256;
		
			
		
	
		
	
		
		通道1256通道(头1256(头=1256= ADS1256_ADS1256_US_1256 ADS1256_ADS1256_US_	通道1256通道=1256= ADS1256_1256 ADS1256_通道1256通道;1256;通道1256通道= ADS1256_ADS1256_ADS1256_通道1256通道=1256= ADS1256_ADS1256_US_ADS1256_ADS1256_ADS1256_ADS1256_ADS1256;通道1256通道=1256= ADS1256_US_1256 ADS1256_US_通道1256通道=1256= ADS1256;1256 ADS1256;通道1256通道=1256= ADS1256_US_ADS1256_ADS1256_ADS1256;通道1256通道=1256=
		

		通道1256通道;通道
		

		
		

		如果(g_tADS1256.Channel ==0)
		{
			g_tADS1256.AdcNow[3]= ADS1256_ReadData();	
		}
		否则
		{
			g_t}1256.AdcNow[g_tADS1256.Channel-1]=1256.= ADS1256_ReadData();	
		

		****************IF (++g_t}********=ADS1256={*****************+ADS1256= ADS1256;}{********_ADS1256+********_ADS1256=
		
			通道1256通道}+********_ADS1256+********_ADS1256=1256}+********_ADS1256+********_ADS1256=}+********_ADS1256+********_ADS1256=1256}+********_ADS1256+********_ADS1256= ADS1256+********_ADS1256+********_ADS1256=1256 ADS1256+********_ADS1256+********_ADS1256=通道1256通道}+********1256}+********</s>1256 12561256
		
	




*	名称:ADS1256_Scan
*	函数:
*	参数:NULL
*	返回值:1
***************************************************************************************************
*/
uint8_t ADS1256_Scan(void)
{
	IF (DRDY_is_low())
	{
		ADS1256_ISR();
		Return 1;
	}

	Return 0;
}/**************************************************************************************************


*	名称:write_DAC8552
*	函数:DAC发送数据
*	参数:通道:输出通道号
*			数据:输出DAC值
*	返回值:空
*******************************************************************************************************************
*/
void Write_DAC8552(uint8_t通道,uint16_t数据)
{uint8_t
	i;

	CS_1();
	CS_0();
BCM2835_SPI_TRANSFER (CHANNEL);
BCM2835_SPI_TRANSFER ((((Data>>>8));
BCM2835_SPI_TRANSFER (((Data&0xff));
CS_1();
}/**********************************************************************************************************


*	名称:Voltage_Convert
*	函数:voltage value conversion function
*	参数:Vref:参考电压3.3V或5V
*			电压:输出DAC值
*	返回值:空
***********************************************************************************************************
*/
uint16_t Voltage_Convert (浮点参考电压,浮点电压)
{
	uint16_t _d_;
	_D_=(uint16_t)(6.5536万 *电压/参考电压);

	RETURN _D_;
}/*


*********************************************************************************************************
*	名称:main
*	function:
*	parameter:null
*	返回值:null
***************************************************************************************************************************
*/

int main()
{
uINT8_t id;
	Int32_t ADC[8];
	Int32_t volt[8];
	uint8_t i;
	uint8_t ch_num;
	int32_t itEMP;
	uint8_t buf[3];
如果(!BCM2835_init())
返回1;
BCM2835_SPI_BEGIN();
BCM2835_SPI_setBitOrder (BCM2835_SPI_bit_Order_LSBFIRST); //默认值
BCM2835_SPI_setDataMode (BCM2835_SPI_MODE1); //默认值
BCM2835_SPI_setClockDivider (BCM2835_SPI_Clock_diver_1024)1024);//默认值
BCM2835_GPIO Fsel (SPICS,BCM2835_GPIO _FSEL_OUTP);//
BCM2835_GPIO写入(SPICS,高);
BCM2835_GPIO Fsel (DRDY,BCM2835_GPIO _FSEL_INPT);
BCM2835_GPIO_SET_Pud (DRDY,BCM2835_GPIO PUD_UP); 	
//ADS1256_WriteReg (REG_MUX,0x01);
//ADS1256_WriteReg (REG_ADCON,0x20);
// ADS1256_CfgADC (ADS1256_GANCE_1,ADS1256_15SPS);
id = ADS1256_ChipReadID();
printf("\r\n");
printf ("ID=\r\n");
	if (id != 3)
	{
		printf ("错误,ASD1256芯片ID = 0x%d\r\n",(int)id);
	}
	else
	{
		printf ("确定,ASD1256芯片ID = 0x%d\r\n",(int)id);
	ADS1256_Cfgsp_1256_ADCf1256</s>1256 1256
	
ADS1256_StartScan(0);
	ch_num = 8;	
	//if (ADS1256_Scan()==0)
		//{
			//}
		
		while (1)
	{
	while ((ADS1256_Scan()==0));
		for (i =0;i < ch_num;i++)
		{
			ADC[i]= ADS1256_GetAdc (i);
	VOLT[I]=(ADC[I]* 100)/167;	
		}
		
		用于(I = 0;I < ch_num;I++)
		{
	buf[0]=((UINT32_t)ADC[I]>> 16)和0xFF;
	buf[1]=((UINT32_t) ADC[i]>> 8)和0xFF;
	buf[2]=((UINT32_t)ADC[i]>> 0)和0xFF;
	printf ("%d=%02x%02x%02x,%8ld",(int) i,(int) buf[0],
	(int)buf[1],(int)buf[2],(Llong) ADC[I]);

	ITEMP = volt[I];	/* UV */
					IF (ITEMP < 0)
					{
						ITEMP =-ITEMP;
				printf ("(-%ld.%03ld %03ld V)\r\n",ITEMP /100万,(ITEMP%100万)/1000,ITEMP%1000);
					}
					其他
					{
				printf ("(%ld.%03ld %03ld V)\r\n",ITEMP /100万,(ITEMP%100万)/1000,ITEMP%1000);
					}
					
		}
			printf("\33[%da",(int)ch_num);
		BSP_DelayUS(10万);	
			} 	
BCM2835_SPI_END_();
BCM2835_close();
	
返回0;}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Christopher:

    欢迎来到TI E2E论坛!

    您是否已经浏览过ADS1256数据表? 要从ADS1256读取数据,您首先需要配置ADS1256寄存器设置,以便选择正确的输入。 要执行此操作,请将SPI命令发送到写入设备寄存器的设备。 我首先建议您在尝试收集数据之前了解如何读取和写入设备寄存器,因为这将帮助您验证SPI通信是否正常工作。

    一旦正确配置了寄存器(并通过重新读取它们来验证),您就可以发送命令重新开始转换。 转换过程完成后,您可以使用另一组SPI命令读取数据。 当/DRDY信号变低时,您将知道转换已完成。 通常,最佳做法是在MCU上使用中断来响应此情况;但是,上面的代码似乎轮询/DRDY信号,直到它变低。 这在某些情况下是可以的,但需要注意的是,这种方法是代码阻塞,如果处理器速度缓慢且太忙而无法响应此信号,则可能会丢失数据。

    尝试写入设备寄存器时,此部件的常见"gotcha"处于错误模式(RDATAC)。 确保在发送任何"WREG"命令之前发送"SDATAC"命令。

    此致,
    Chris