/**************************************************************************************
*
* Address
*
* (c) Copyright 20xx, Company Name, City, State
* All Rights Reserved
*
*
* FileName : ad5412.c
* Version : V1.0
* Programmer(s) : zhaojun_xf
* Parameters :
* DebugTools :
* Description : ad5412 - 12为AD,ad5422 - 16位AD
*
*
**************************************************************************************/
/**************************************************************************************
* HeaderFiles
**************************************************************************************/
#include "../usr/config.h"
/**************************************************************************************
* Variable Definition
**************************************************************************************/
/**************************************************************************************
* FunctionName : W25_SetGpio()
* Description : 管脚配置
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void ADA_SetGpio(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADA_LTC_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADA_LTC_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(ADA_LTC_PORT, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(ADA_CLR_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADA_CLR_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(ADA_CLR_PORT, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(ADA_FLT_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADA_FLT_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;;
GPIO_Init(ADA_FLT_PORT, &GPIO_InitStructure);
}
/**************************************************************************************
* FunctionName : ADA_Delay()
* Description : 延时
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void ADA_Delay(u16 time)
{
while (time-- > 0)
{
;
}
}
/**************************************************************************************
* FunctionName : ADA_Enable()
* Description : 片选
* EntryParameter : en - 0使能;1禁止
* ReturnValue : None
**************************************************************************************/
void ADA_Enable(u8 en)
{
(en > 0) ? GPIO_SetBits(ADA_LTC_PORT, ADA_LTC_PIN) : GPIO_ResetBits(ADA_LTC_PORT, ADA_LTC_PIN);
}
/**************************************************************************************
* FunctionName : ADAClear()
* Description : 清除[高电平有效]
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void ADAClear(u8 en)
{
(en > 0) ? GPIO_SetBits(ADA_CLR_PORT, ADA_CLR_PIN) : GPIO_ResetBits(ADA_CLR_PORT, ADA_CLR_PIN);
}
/**************************************************************************************
* FunctionName : ADAInit()
* Description : 初始化
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void ADAInit(void)
{
ADA_SetGpio();
ADA_Enable(1);
}
/**************************************************************************************
* FunctionName : ADA_WriteReg()
* Description : 写寄存器[24位宽 = 8位地址+16位数据]
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void ADA_WriteReg(u8 addr, u16 dat)
{
ADA_Enable(0);
ADA_WriteByte(addr);
ADA_WriteByte(dat >> 8);
ADA_WriteByte(dat & 0xFF);
ADA_Enable(1);
}
/**************************************************************************************
* FunctionName : ADA_ReadReg()
* Description : 读寄存器
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
u16 ADA_ReadReg(u8 addr)
{
u16 tmpDat = 0;
ADA_Enable(0);
ADA_WriteByte(addr);
tmpDat = ADA_ReadByte() << 8;
tmpDat |= ADA_ReadByte();
ADA_Enable(1);
return tmpDat;
}
/**************************************************************************************
* FunctionName : ADA_ResRange()
* Description : 范围限制
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void ADA_ResRange(u32 *pDat)
{
#if (ADA_CHP_MDL == AD5412)
*pDat <<= 4; // AD5412高位对齐,低4位没有用,AD5422的16位都使用
#endif
if (*pDat > ADA_WRD_BIT) // 最大输出
{
*pDat = 0xFFF0;
}
}
/**************************************************************************************
* FunctionName : ADA_Vol2Num()
* Description : 电压转数字
* EntryParameter : vol - 输出电压[mV],rng - 输出范围
* ReturnValue : None
**************************************************************************************/
u16 ADA_Vol2Num(s16 vol, ADA_ORS_E rng)
{
u32 volNum = 0;
switch (rng)
{
case ADA_ORS_V00_05: // 0~5V
{
// 单极性:Vout = Vref×Gain(D/Dbit),D-数字输出
volNum = (vol * ADA_DAT_BIT) / (ADA_REF_VOL * ADA_GAIN_05)+1;
ADA_ResRange(&volNum);
if (vol <= 0)
{
volNum = 0;
}
break;
}
case ADA_ORS_V00_10: // 0~10V
{
// 单极性
volNum = (vol * ADA_DAT_BIT) / (ADA_REF_VOL * ADA_GAIN_0A)+1;
ADA_ResRange(&volNum);
if (vol <= 0)
{
volNum = 0;
}
break;
}
case ADA_ORS_V05_05: // -5~5V
{
// 双极性:Vout = Vref×Gain(D/Dbit) - (Gain×Vref/2),D-数字输出
volNum = ((vol+ADA_REF_VOL) * ADA_DAT_BIT) / (ADA_REF_VOL * ADA_GAIN_55);
ADA_ResRange(&volNum);
if (vol <= -5000)
{
volNum = 0;
}
break;
}
case ADA_ORS_V10_10: // -10~10V
{
// 双极性
volNum = ((vol+ADA_REF_VOL*2) * ADA_DAT_BIT) / (ADA_REF_VOL * ADA_GAIN_AA);
ADA_ResRange(&volNum);
if (vol <= -10000)
{
volNum = 0;
}
break;
}
default: volNum = 0; break;
}
return volNum;
}
/**************************************************************************************
* FunctionName : ADA_Crr2Num()
* Description : 电流转数字
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
u16 ADA_Crr2Num(u16 crr, ADA_ORS_E rng)
{
u32 crrNum = 0;
switch (rng)
{
case ADA_ORS_C04_20:
LaoZhangGong123
- 粉丝: 2740
- 资源: 45
最新资源
- 基于Netty、SpingBoot开发的分布式、嵌入式、组件化、高度自定义、高可扩展的Java即时通讯框架详细文档+全部资料+高分项目+源码.zip
- 基于netty框架下的推送系统,目前CIM支撑 websocket,android,ios,桌面应用,WEB应用以及后台系统之间的即时消服务详细文档+全部资料
- 基于nodejs+webpack,以nosql轻量级嵌入式数据库nedb作为存储,实现了excel表格上传导出以及可视化详细文档+全部资料+高分项目+源码.zi
- 湘潭大学2024级大一上人工智能专业期末C语言题库.zip【编程题及答案】
- 基于qemu创建riscv嵌入式开发板,并移植操作系统详细文档+全部资料+高分项目+源码.zip
- 基于Qt4和嵌入式linux系统的简易北斗导航终端详细文档+全部资料+高分项目+源码.zip
- 基于QtC++实现的新冠肺炎疫情实时数据可视化显示。主要包括新型冠状病毒肺炎疫情数据实时查看,确诊疑似治愈死亡数据趋势折线图,各省市和海外数据树形显示,最新动态
- 基于Qt的Linux嵌入式开发详细文档+全部资料+高分项目+源码.zip
- 基于RT-Thread,运行在嵌入式上的高并发高性能FTP服务器详细文档+全部资料+高分项目+源码.zip
- 基于Qt开发的平移组件,主要应用在嵌入式触摸显示屏上,通过手触滑动切换页面显示详细文档+全部资料+高分项目+源码.zip
- 基于ROS系统的嵌入式前后端开发详细文档+全部资料+高分项目+源码.zip
- 基于STM32的门禁考勤系统、门禁嵌入式软件部分详细文档+全部资料+高分项目+源码.zip
- 基于STM32平台事件驱动的嵌入式控制器框架详细文档+全部资料+高分项目+源码.zip
- 基于STM32F107Board的STM库的嵌入式系统入门工程例程详细文档+全部资料+高分项目+源码.zip
- 基于WEB的嵌入式监控系统详细文档+全部资料+高分项目+源码.zip
- 基于标准C库实现嵌入式RTSP服务器详细文档+全部资料+高分项目+源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论1