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