工程师必备!AD7799 驱动程序
扫描二维码
随时随地手机看文章
24bit高精度ADC,支持双极性信号,使用时如果需要使用内部增益,不能将VIN-接GND。
/************************************************************************************************************* * 文件名 : AD7799.c * 功能 : AD7799驱动 * 作者 : cp1300@139.com * 创建时间 : 2017-04-21 * 最后修改时间 : 2018-06-06 * 详细 : AD7799驱动 AD7799的输入脚需要保持低电平,连续采集模式下必须片选有效,否则不产生RDY结果 依赖系统ms延时函数 如果需要使用内部增益>2,那么VIN-不能接GND,必须接基准源,并且输入的差分信号需要在指定范围内。 *************************************************************************************************************/ #include "SYSTEM.H" #include "GPIO_INIT.H" #include "AD7799.H" //调试开关 #define AD7799_DBUG 1 #if AD7799_DBUG #include "system.h" #define ad7799_debug(format,...) uart_printf(format,##__VA_ARGS__) #else #define ad7799_debug(format,...) / / #endif //AD7799_DBUG static const u8 AD7799_REG_LEN[8] = {1,2,2,3,1,1,3,3}; //AD7799寄存器长度,单位字节 /************************************************************************************************************************* * 函数 : bool AD7799_Init(AD7799_HANDLE *pHandle, void (*SetCLK)(u8 Level), void (*SetCS)(u8 Level), void (*SetOutData)(u8 Level), u8 (*GetInData)(void)) * 功能 : AD7799初始化 * 参数 : pHandle:句柄;SetCLK:CLK输出控制回调;SetCS:CS输出回调;SetOutData:输出输出DOUT回调;GetInData:数据输入DIN回调 * 返回 : TRUE:成功;FALSE:失败 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2017-04-21 * 说明 : 初始化检测ID,ID不对会返回失败 *************************************************************************************************************************/ bool AD7799_Init(AD7799_HANDLE *pHandle, void (*SetCLK)(u8 Level), void (*SetCS)(u8 Level), void (*SetOutData)(u8 Level), u8 (*GetInData)(void)) { u8 retry; u8 id; u8 temp; if(pHandle == NULL || SetCLK == NULL || SetCS == NULL || SetOutData== NULL || GetInData == NULL) { DEBUG("AD7799 初始化句柄或接口无效!"); SYS_DelayMS(100); } //初始化句柄 pHandle->SetCLK = SetCLK; //CLK输出控制回调(参数1:输出高电平;0:输出低电平) pHandle->SetCS = SetCS; //CS输出控制回调(参数1:输出高电平;0:输出低电平) pHandle->SetOutData = SetOutData; //DOUT输出控制回调(参数1:输出高电平;0:输出低电平) pHandle->GetInData = GetInData; //DIN输入回调(返回1:高电平;0:低电平) //开始初始化芯片 pHandle->SetCS(1); //CS默认高电平 pHandle->SetCLK(1); //CLK默认高电平 pHandle->SetOutData(0); //默认输出低电平 SYS_DelayMS(10); //延时10ms等待供电稳定 AD7799_SoftwareReset(pHandle); //系统软复位 SYS_DelayMS(20); for(retry = 0;retry < 8;retry ++) //循环读取ID { id = AD7799_ReadReg(pHandle, AD7799_REG_ID); if((id&0x0F)==0X9) { break; } SYS_DelayMS(100); } if((id&0x0F)!=0X9) { ad7799_debug("AD7799初始化失败,未知的ID(%02X)rn",id); return FALSE; } AD7799_SetConfig(pHandle, FALSE, TRUE, AD7799_GAIN_1, TRUE, AD7799_CH_AIN1); SYS_DelayMS(10); temp = AD7799_ReadReg(pHandle, AD7799_REG_STATUS); //读取状态 if(temp & BIT5) { ad7799_debug("AD7799参考故障,状态(%02X)rn",temp); } ad7799_debug("AD7799初始化成功,ID(%02X)rn",id); return TRUE; } /************************************************************************************************************************* * 函数 : u8 AD7799_ReadWriteByte(AD7799_HANDLE *pHandle, u8 data) * 功能 : AD7799读写一字节 * 参数 : pHandle:句柄;data:需要写入的数据 * 返回 : 无 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2018-06-06 * 说明 : 不带片选,最底层写入1B *************************************************************************************************************************/ u8 AD7799_ReadWriteByte(AD7799_HANDLE *pHandle, u8 data) { u8 i; for(i = 0;i < 8;i ++) { pHandle->SetCLK(0); //CLK=0 if(data & 0x80) { pHandle->SetOutData(1); //DOUT=1 } else { pHandle->SetOutData(0); //DOUT=0 } nop;nop;nop;nop;nop;nop; pHandle->SetCLK(1); //CLK=1 data <GetInData()) //DIN { data |= 1; } nop;nop;nop;nop;nop;nop; } return data; } /************************************************************************************************************************* * 函数 : u32 AD7799_ReadReg(AD7799_HANDLE *pHandle, AD7799_REG_TYPE RegAddr) * 功能 : AD7799读取一个寄存器 * 参数 : pHandle:句柄;RegAddr:寄存器地址 * 返回 : 读取的数据 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2018-06-06 * 说明 : 会使能片选,会自动判断寄存器长度,并进行读取 *************************************************************************************************************************/ u32 AD7799_ReadReg(AD7799_HANDLE *pHandle, AD7799_REG_TYPE RegAddr) { u8 i; u32 data = 0; if(RegAddr > 7) return 0; //寄存器地址0-7 pHandle->SetCS(0); //片选拉低,准备读写数据 nop;nop; data |= BIT6; //R/W位为1,读取数据 data |= RegAddr << 3; //寄存器地址 AD7799_ReadWriteByte(pHandle, data); //写入命令,读取指定寄存器 data = 0; for(i = 0;i<AD7799_REG_LEN[RegAddr];i ++) { data <SetCS(1); //片选恢复 pHandle->SetOutData(0); //DOUT=0 默认输出低电平 return data; } /************************************************************************************************************************* * 函数 : void AD7799_WriteReg(AD7799_HANDLE *pHandle, AD7799_REG_TYPE RegAddr, u32 RegData) * 功能 : AD7799写一个寄存器 * 参数 : pHandle:句柄;RegAddr:寄存器地址;RegData:需要写入的值 * 返回 : 无 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2018-06-06 * 说明 : 会使能片选,会自动判断寄存器长度,并进行写入 *************************************************************************************************************************/ void AD7799_WriteReg(AD7799_HANDLE *pHandle, AD7799_REG_TYPE RegAddr, u32 RegData) { u8 i; u8 data = 0; if(RegAddr > 7) return; //寄存器地址0-7 pHandle->SetCS(0); //片选拉低,准备读写数据 nop;nop; data |= RegAddr << 3; //寄存器地址 AD7799_ReadWriteByte(pHandle, data); //写入命令,写指定寄存器 for(i = 0;i>((AD7799_REG_LEN[RegAddr]-1-i)*8)); //写入数据 } pHandle->SetCS(1); //片选恢复 pHandle->SetOutData(0); //DOUT=0 默认输出低电平 } /************************************************************************************************************************* * 函数 : void AD7799_SetMode(AD7799_HANDLE *pHandle, AD7799_MODE_TYPE mode, AD7799_SPEED_TYPE speed) * 功能 : AD7799设置采集模式 * 参数 : pHandle:句柄;mode:模式,见AD7799_MODE_TYPE;speed:采样速度,见AD7799_SPEED_TYPE * 返回 : 无 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2018-06-06 * 说明 : 设置采集模式 *************************************************************************************************************************/ void AD7799_SetMode(AD7799_HANDLE *pHandle, AD7799_MODE_TYPE mode, AD7799_SPEED_TYPE speed) { u16 data = 0; data |= mode << 13; //模式设置 data |= speed & 0xf; //转换速度设置 AD7799_WriteReg(pHandle, AD7799_REG_MODE, data); } /************************************************************************************************************************* * 函数 : void AD7799_SoftwareReset(AD7799_HANDLE *pHandle) * 功能 : AD7799软件复位 * 参数 : pHandle:句柄 * 返回 : 无 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2018-06-06 * 说明 : 连续发送32个1到AD7799会进行复位,所有寄存器复位到原始值 *************************************************************************************************************************/ void AD7799_SoftwareReset(AD7799_HANDLE *pHandle) { pHandle->SetCS(0); //片选拉低,准备读写数据 nop;nop; AD7799_ReadWriteByte(pHandle, 0XFF); //发送32个1 AD7799_ReadWriteByte(pHandle, 0XFF); //发送32个1 AD7799_ReadWriteByte(pHandle, 0XFF); //发送32个1 AD7799_ReadWriteByte(pHandle, 0XFF); //发送32个1 pHandle->SetCS(1); //片选恢复 pHandle->SetOutData(0); //DOUT=0 默认输出低电平 } /************************************************************************************************************************* * 函数 : void AD7799_SetCREAD(AD7799_HANDLE *pHandle, bool Enable) * 功能 : AD7799快速读取模式开关 * 参数 : pHandle:句柄;Enable:TRUE:开启快速读取模式;FALSE:关闭快速读取模式 * 返回 : 无 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2018-06-06 * 说明 : 开启快速读取模式后,可直接快速读取采集的数据,无效发送读取命令 使能连续可读模式,必须在通信寄存器中写入01011100;当RDY变为低时,向通信寄存器中写入01011000,退出连续可读模式。 当在连续可读模式下,ADC检测到DIN脚的有效活动,也会退出连续可读模式。另外,如果在DIN管脚上连续输入32位的高电平,AD被复位。 因此,当在连续读模式下DIN脚应被置为低电平直到一个新的命令写入设备。 警告:开启连续读取后必须在RDY变为低电平后发送此命令(不能发送别的命令) *************************************************************************************************************************/ void AD7799_SetCREAD(AD7799_HANDLE *pHandle, bool Enable) { pHandle->SetCS(0); //片选拉低,准备读写数据 nop;nop; if(Enable) //使能连续读取模式 { AD7799_ReadWriteByte(pHandle, 0x5C); //开启连续读取模式 AD7799_ReadWriteByte(pHandle, 0); AD7799_ReadWriteByte(pHandle, 0); } else { AD7799_ReadWriteByte(pHandle, 0x58); //关闭连续读取模式 AD7799_ReadWriteByte(pHandle, 0XFF); AD7799_ReadWriteByte(pHandle, 0XFF); } pHandle->SetCS(1); //片选恢复 pHandle->SetOutData(0); //DOUT=0 默认输出低电平 } /************************************************************************************************************************* * 函数 : u32 AD7799_CReadData(AD7799_HANDLE *pHandle, bool isCS) * 功能 : AD7799快速读取采集结果 * 参数 : pHandle:句柄;isCS:TRUE:需要控制片选;FALSE:无需控制片选 * 返回 : 24bit的采集结果 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2018-06-06 * 说明 : 必须先开启快速读取模式,开启后可以进行快速读取 *************************************************************************************************************************/ u32 AD7799_CReadData(AD7799_HANDLE *pHandle, bool isCS) { u32 data = 0; u8 i; if(isCS) //需要使能片选 { pHandle->SetCS(0); //片选拉低,准备读写数据 nop;nop; } for(i = 0;i < 3;i ++) { data <SetCS(1); //片选恢复 pHandle->SetOutData(0); //DOUT=0 默认输出低电平 } return data; } /************************************************************************************************************************* * 函数 : void AD7799_SetConfig(AD7799_HANDLE *pHandle, bool isEnBurnout, bool isUnipolar, AD7799_GAIN_TYPE Gain, bool isEnBuff, AD7799_CH_TYPE ch) * 功能 : AD7799配置 * 参数 : pHandle:句柄;isEnBurnout:是否开启电流源;isUnipolar:是否使能单极性采集;Gain:增益设置,见AD7799_GAIN_TYPE;isEnBuff:是否开启缓冲器 ch:采集通道选择,见AD7799_CH_TYPE * 返回 : 无 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-21 * 最后修改 : 2018-06-06 * 说明 : 用于设置AD7799,默认已经开启了参考保护 *************************************************************************************************************************/ void AD7799_SetConfig(AD7799_HANDLE *pHandle, bool isEnBurnout, bool isUnipolar, AD7799_GAIN_TYPE Gain, bool isEnBuff, AD7799_CH_TYPE ch) { u16 data = 0; if(isEnBurnout) data|=BIT13; //使能电流源 if(isUnipolar) data|=BIT12; //使能单极性采集 data |= (Gain&0x07) << 8; //增益设置 data |= BIT5; //参考保护开启 if(isEnBuff) data |= BIT4; //使能buff,缓冲器 data |= ch&0x7; //通道选择 AD7799_WriteReg(pHandle, AD7799_REG_CONFIG, data); //写入配置寄存器 } /************************************************************************************************************************* * 函数 : bool AD7799_Calibration(AD7799_HANDLE *pHandle, AD7799_SPEED_TYPE speed) * 功能 : AD7799校准模式 * 参数 : pHandle:句柄;speed:转换速度 * 返回 : FALSE:校准失败;TRUE:校准成功 * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-27 * 最后修改 : 2018-06-06 * 说明 : 校准前需要先设置通道,使用的是内部校准模式 片内满度校准不能在增益为128的情况下进行。为尽量减少满度误差,每次的通道的增益改变都需要进行满度校准。 *************************************************************************************************************************/ bool AD7799_Calibration(AD7799_HANDLE *pHandle, AD7799_SPEED_TYPE speed) { u8 delay = 0; AD7799_SetMode(pHandle, AD7799_MODE_IDLE, speed); //先进入空闲模式 AD7799_SetMode(pHandle, AD7799_MODE_ZEROCALI, speed); //内部零刻度校准模式 pHandle->SetCS(0); if(pHandle->GetInData()==0) { ad7799_debug("校准失败,提前有低电平!rn"); pHandle->SetCS(1); return FALSE; } delay = 0; while(pHandle->GetInData()==1) { SYS_DelayMS(10); delay ++; if(delay > 100) { ad7799_debug("校准失败,等待校准结束超时!rn"); pHandle->SetCS(1); return FALSE; } } pHandle->SetCS(1); AD7799_SetMode(pHandle, AD7799_MODE_FULLCALI, speed); //内部满刻度校准模式 pHandle->SetCS(0); if(pHandle->GetInData()==0) { ad7799_debug("校准失败1,提前有低电平!rn"); pHandle->SetCS(1); return FALSE; } delay = 0; while(pHandle->GetInData()==1) { SYS_DelayMS(10); delay ++; if(delay > 100) { ad7799_debug("校准失败1,等待校准结束超时!rn"); pHandle->SetCS(1); return FALSE; } } pHandle->SetCS(1); return TRUE; } /************************************************************************************************************************* * 函数 : u32 AD7799_Coll(AD7799_HANDLE *pHandle, u8 ch, u8 CollCnt) * 功能 : AD7799采集数据 * 参数 : pHandle:句柄;ch:通道0-2;CollCnt:采集次数(用于滤波) * 返回 : 采集的结果HEX * 依赖 : 底层宏定义 * 作者 : cp1300@139.com * 时间 : 2017-04-27 * 最后修改 : 2018-06-07 * 说明 : *************************************************************************************************************************/ u32 AD7799_Coll(AD7799_HANDLE *pHandle, u8 ch, u8 CollCnt) { u32 data; u32 temp; u32 ADC_Data; u8 i; if(ch > 2) return 0; if(CollCnt < 1) CollCnt = 1; //采集 AD7799_SetConfig(pHandle, pHandle->Config[ch].isEnBurnout, pHandle->Config[ch].isUnipolar, pHandle->Config[ch].Gain, pHandle->Config[ch].isEnBuff, (AD7799_CH_TYPE)ch); //切换通道 AD7799_SetMode(pHandle, AD7799_MODE_IDLE, pHandle->Config[ch].speed); //空闲模式 //uart_printf("AD7799_REG_CONFIG:0x%Xrn",AD7799_ReadReg(AD7799_REG_CONFIG)); AD7799_SetMode(pHandle, AD7799_MODE_CONTINUOUS, pHandle->Config[ch].speed); //连续采集模式开启 //uart_printf("mode2:0x%Xrn",AD7799_ReadReg(AD7799_REG_MODE)); //uart_printf("AD7799_REG_STATUS2:%Xrn",AD7799_ReadReg(AD7799_REG_STATUS)); AD7799_SetCREAD(pHandle, TRUE); //连续读取模式使能 pHandle->SetCS(0); data = 0; for(i = 0;i < CollCnt;) //采集滤波 { if(pHandle->GetInData()==0) { temp = AD7799_CReadData(pHandle, FALSE); data += temp; i++; } SYS_DelayMS(5); } //退出连续读取模式 for(i = 0;i < 10;i++) { if(pHandle->GetInData()==0) { AD7799_SetCREAD(pHandle, FALSE); //连续读取模式关闭 break; } SYS_DelayMS(10); } pHandle->SetCS(1); data /= CollCnt; //取得平均值 return data; }
/************************************************************************************************************* * 文件名 : AD7799.h * 功能 : AD7799驱动 * 作者 : cp1300@139.com * 创建时间 : 2017-04-21 * 最后修改时间 : 2018-06-06 * 详细 : AD7799驱动 AD7799的输入脚需要保持低电平,连续采集模式下必须片选有效,否则不产生RDY结果 依赖系统ms延时函数 *************************************************************************************************************/ #ifndef __AD7799_H__ #define __AD7799_H__ #include "system.h" //AD7799寄存器定义 typedef enum { AD7799_REG_STATUS = 0, //状态寄存器,8位 AD7799_REG_MODE = 1, //模式寄存器,16位 AD7799_REG_CONFIG = 2, //配置寄存器,16位 AD7799_REG_DATA = 3, //数据寄存器,24位 AD7799_REG_ID = 4, //ID寄存器,8位 AD7799_REG_IO = 5, //IO寄存器,8位 AD7799_REG_ZERO = 6, //零刻度校准寄存器,24位 AD7799_REG_FULL = 7, //满刻度校准寄存器,24位 }AD7799_REG_TYPE; //工作模式选择 typedef enum { AD7799_MODE_CONTINUOUS = 0, //连续转换模式 AD7799_MODE_SINGLE = 1, //单次转换模式 AD7799_MODE_IDLE = 2, //空闲模式 AD7799_MODE_POWERDOWN = 3, //掉电模式 AD7799_MODE_ZEROCALI = 4, //内部零刻度校准模式 AD7799_MODE_FULLCALI = 5, //内部满刻度校准模式 AD7799_MODE_SYSZEROCALI = 6, //系统零刻度校准模式 AD7799_MODE_SYSFULLCALI = 7, //系统满刻度校准模式 }AD7799_MODE_TYPE; //转换速度设置 typedef enum { AD7799_SPEED_500HZ = 1, AD7799_SPEED_250HZ = 2, AD7799_SPEED_125HZ = 3, AD7799_SPEED_62HZ = 4, AD7799_SPEED_50HZ = 5, AD7799_SPEED_39HZ = 6, AD7799_SPEED_33HZ = 7, AD7799_SPEED_19HZ = 8, AD7799_SPEED_16_1HZ = 9, //16.7HZ 80db 50hz滤波 AD7799_SPEED_16_2HZ = 10, //16.7HZ 65b AD7799_SPEED_12HZ = 11, AD7799_SPEED_10HZ = 12, AD7799_SPEED_8HZ = 13, AD7799_SPEED_6HZ = 14, AD7799_SPEED_4HZ = 15, }AD7799_SPEED_TYPE; //增益选择 typedef enum { AD7799_GAIN_1 = 0, AD7799_GAIN_2 = 1, AD7799_GAIN_4 = 2, AD7799_GAIN_8 = 3, AD7799_GAIN_16 = 4, AD7799_GAIN_32 = 5, AD7799_GAIN_64 = 6, AD7799_GAIN_128 = 7, }AD7799_GAIN_TYPE; //通道选择 typedef enum { AD7799_CH_AIN1 = 0, AD7799_CH_AIN2 = 1, AD7799_CH_AIN3 = 2, AD7799_CH_AVDD = 7, //电源监控 }AD7799_CH_TYPE; //AD7799通道配置 typedef struct { AD7799_GAIN_TYPE Gain; //增益 AD7799_SPEED_TYPE speed; //转换速度 bool isEnBurnout; //是否开启电流源 bool isUnipolar; //是否使能单极性采集 bool isEnBuff; //输出缓冲 }AD7799_CH_CONFIG; //AD7799句柄 typedef struct { void (*SetCLK)(u8 Level); //CLK输出控制回调(参数1:输出高电平;0:输出低电平) void (*SetCS)(u8 Level); //CS输出控制回调(参数1:输出高电平;0:输出低电平) void (*SetOutData)(u8 Level); //DOUT输出控制回调(参数1:输出高电平;0:输出低电平) u8 (*GetInData)(void); //DIN输入回调(返回1:高电平;0:低电平) AD7799_CH_CONFIG Config[3]; //存放3个通道的配置信息 }AD7799_HANDLE; //相关函数 bool AD7799_Init(AD7799_HANDLE *pHandle, void (*SetCLK)(u8 Level), void (*SetCS)(u8 Level), void (*SetOutData)(u8 Level), u8 (*GetInData)(void)); //AD7799初始化 u32 AD7799_ReadReg(AD7799_HANDLE *pHandle, AD7799_REG_TYPE RegAddr); //读取指定寄存器 void AD7799_SetMode(AD7799_HANDLE *pHandle, AD7799_MODE_TYPE mode, AD7799_SPEED_TYPE speed); //设置模式 void AD7799_SoftwareReset(AD7799_HANDLE *pHandle); //软复位 void AD7799_SetCREAD(AD7799_HANDLE *pHandle, bool Enable); //设置连续读取模式开关 u32 AD7799_CReadData(AD7799_HANDLE *pHandle, bool isCS); //快速读取模式下读取24bit数据 void AD7799_SetConfig(AD7799_HANDLE *pHandle, bool isEnBurnout, bool isUnipolar, AD7799_GAIN_TYPE Gain, bool isEnBuff, AD7799_CH_TYPE ch); //AD7799配置 bool AD7799_Calibration(AD7799_HANDLE *pHandle, AD7799_SPEED_TYPE speed); //校准模式 u32 AD7799_Coll(AD7799_HANDLE *pHandle, u8 ch, u8 CollCnt); //AD7799采集数据 #endif //__AD7799_H__
测试
//底层接口
///////////////////////////////////////////////////////////////////////////////////////////// //AD7799支持 __inline void AD7799_DIO_OUT(u8 level) {PBout(6)=level;} //接芯片DIN __inline u8 AD7799_DIO_IN(void) {return PBin(7);} //接芯片DOUT __inline void AD7799_CS(u8 level) {PBout(5)=level;} //片选 __inline void AD7799_CLK(u8 level) {PBout(4)=level;} //时钟 //AD7799硬件IO初始化 __inline void AD7799_IO_INIT(void) { DeviceClockEnable(DEV_GPIOB,ENABLE);/*使能GPIOB时钟*/ GPIOx_Init(GPIOB,BIT4|BIT5|BIT6, OUT_PP, SPEED_10M); GPIOx_Init(GPIOB,BIT7, IN_IPU, IN_IN); }
//初始化
AD7799_HANDLE AD7799_Handle; //ad7799句柄
AD7799_IO_INIT(); //AD7799 IO硬件初始化
//切换到通道1,校准通道1 AD7799_SetConfig(&g_SysFlag.AD7799_Handle, FALSE, TRUE, AD7799_GAIN_2, FALSE, AD7799_CH_AIN1); //AD7799配置 g_SysFlag.AD7799_Handle.Config[AD7799_CH_AIN1].isEnBurnout = FALSE; //电流源关闭 g_SysFlag.AD7799_Handle.Config[AD7799_CH_AIN1].isUnipolar = TRUE; //单极性信号使能 g_SysFlag.AD7799_Handle.Config[AD7799_CH_AIN1].Gain =AD7799_GAIN_2; //增益2 g_SysFlag.AD7799_Handle.Config[AD7799_CH_AIN1].isEnBuff = FALSE; //输出缓冲使能 g_SysFlag.AD7799_Handle.Config[AD7799_CH_AIN1].speed = AD7799_SPEED_50HZ; //转换速度 if(AD7799_Calibration(&g_SysFlag.AD7799_Handle, AD7799_SPEED_50HZ)==FALSE) { uart_printf("AD7799校准失败!rn"); }
//采集
temp = AD7799_Coll(&g_SysFlag.AD7799_Handle, AD7799_CH_AIN1, 3); ftemp = temp; ftemp /= 0XFFFFFF; //计算比例 ftemp /= 2; //放大倍数为2 ftemp*=2500;