请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: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;}