ADS8684 驱动
环境:STM32F103RC,主频 72MHz(外部晶振)或64MHz(HSI)
普通IO口模拟spi
note:自动扫描模式下改完量程,必须要增加AUTO_RST_Mode()。
代码实现:
// ADS8684.c#define ADS8684_GLOBALS
#include "ADS8684.h"/********************************************************普通IO口模拟spi驱动********************************************/
/******************************************************
函数名称:ReadWriteByte
函数描述:IO口模拟spi读写8位数据,上升沿写数据,下降沿读数据
Calls:
Called by:
输入参数:data:需要写入的数据
返回值:读到的8位数据
******************************************************/
static uint32_t ReadWriteByte(uint32_t data)
{uint32_t status = 0;uint32_t result = 0;for (int number = 0; number < 8; number++){if (data & (1 << (7 - number))){ADS8684_SDI_H;}else{ADS8684_SDI_L;}ADS8684_CLK_H; ADS8684_CLK_H; ADS8684_CLK_H; status = ADS8684_SD0_STATUS(); ADS8684_CLK_L;if (status){result |= 1; } result <<= 1; }return (result >> 1);
}/***************************************************************************************************************//********************************************************ADS8684驱动********************************************/
/******************************************************
函数名称:WriteCommandReg
函数描述:写ADS8688命令寄存器
Calls:
Called by:
输入参数:command:命令寄存器
返回值:无
******************************************************/
static void WriteCommandReg(uint32_t command)
{ADS8684_CS_L;ReadWriteByte((command & 0xff00) >> 8);ReadWriteByte(command & 0xff);ADS8684_CS_H;
}/******************************************************
函数名称:AUTO_RST_Mode
函数描述:进入自动扫描模式
Calls:
Called by:
输入参数:无
返回值:无
******************************************************/
void AUTO_RST_Mode(void)
{WriteCommandReg(AUTO_RST);
}/******************************************************
函数名称:Write_Program_Register
函数描述:Program Register写操作
Calls:
Called by:
输入参数:Addr:Program Register地址data:写入Program Register的值
返回值:无
******************************************************/
static void Write_Program_Register(uint32_t Addr, uint32_t data)
{ADS8684_CS_L;ReadWriteByte((Addr << 1) | WRITE);ReadWriteByte(data);ADS8684_CS_H;
}/******************************************************
函数名称:Read_Program_Register
函数描述:Program Register读操作
Calls:
Called by:
输入参数:Addr:Program Register地址
返回值:Program Register的值
******************************************************/
uint32_t Read_Program_Register(uint32_t Addr)
{uint32_t data = 0;ADS8684_CS_L;ReadWriteByte((Addr) << 1 | READ);data = ReadWriteByte(0XFF);data = ReadWriteByte(0XFF);ADS8684_CS_H;return data;
}/******************************************************
函数名称:Set_Auto_Scan_Sequence
函数描述:设置自动扫描序列通道
Calls:
Called by:
输入参数:seq:需要设置Auto-Scan Sequence Enable Register的值
返回值:无
******************************************************/
void Set_Auto_Scan_Sequence(uint32_t seq)
{Write_Program_Register(AUTO_SEQ_EN, seq);
}/******************************************************
函数名称:Set_CH_Range_Select
函数描述:设置各个通道的范围
Calls:
Called by:
输入参数:ch:通道输入范围寄存器地址range:量程范围
返回值:无
******************************************************/
void Set_CH_Range_Select(uint32_t ch, uint32_t range)
{Write_Program_Register(ch, range);
}
/***************************************************************************************************************//******************************************************
函数名称:Get_AUTO_RST_Mode_Data
函数描述:读取扫描通道序列的AD转换数据
Calls:
Called by:
输入参数:pADCData:传入gUADCData.ChADCDatachNum:总通道数
返回值:无
******************************************************/
static void Get_AUTO_RST_Mode_Data(uint16_t* pADCData, uint32_t chNum)
{uint32_t datal = 0, datah = 0;for (uint32_t i = 0; i < chNum; i++){ADS8684_CS_L;ReadWriteByte(0X00);ReadWriteByte(0X00);datah = ReadWriteByte(0XFF);datal = ReadWriteByte(0XFF);ADS8684_CS_H;*(pADCData + i) = (datah << 8) | datal; //高位在前,低位在后}
}/******************************************************
函数名称:Init_ADS8684
函数描述:ADS8684的初始化代码
Calls:
Called by: main
输入参数:无
返回值:TRUE:初始化成功;FALSE:初始化失败
******************************************************/
uint32_t Init_ADS8684(void)
{ Set_Auto_Scan_Sequence(0x0F);// 通道1~通道4if (Read_Program_Register(AUTO_SEQ_EN) != 0x0F){return FALSE;}AUTO_RST_Mode(); // 默认通道1~通道4的量程为-10~10Vreturn TRUE;
}
// ADS8684.h
#ifndef __ADS8684_H
#define __ADS8684_H#ifdef ADS8684_GLOBALS
#define ADS8684_EXT
#else
#define ADS8684_EXT extern
#endif#include "global.h"/**************************************ADS8684寄存器********************************************/
//Command Register
#define NO_OP 0X0000
#define STDBY 0X8200
#define PWR_DN 0X8300
#define RST 0X8500
#define AUTO_RST 0XA000
#define MAN_Ch_0 0XC000
#define MAN_CH_1 0XC400
#define MAN_Ch_2 0XC800
#define MAN_Ch_3 0XCC00
#define MAN_Ch_4 0XD000
#define MAN_Ch_5 0XD400
#define MAN_Ch_6 0XD800
#define MAN_Ch_7 0XDC00
#define MAN_AUX 0XE000//Program Register
#define AUTO_SEQ_EN 0X01
#define Channel Power Down 0X02
#define Feature Select 0X03#define Channel_0_Input_Range 0X05
#define Channel_1_Input_Range 0X06
#define Channel_2_Input_Range 0X07
#define Channel_3_Input_Range 0X08
#define Channel_4_Input_Range 0X09
#define Channel_5_Input_Range 0X0A
#define Channel_6_Input_Range 0X0B
#define Channel_7_Input_Range 0X0C#define Ch_0_Hysteresis 0X15
#define Ch_0_High_Threshold_MSB 0X16
#define Ch_0_High_Threshold_LSB 0X17
#define Ch_0_Low_Threshold_MSB 0X18
#define Ch_0_Low_Threshold_LSB 0X19#define Ch_7_Hysteresis 0X38
#define Ch_7_High_Threshold_MSB 0X39
#define Ch_7_High_Threshold_LSB 0X3A
#define Ch_7_Low_Threshold_MSB 0X3B
#define Ch_7_Low_Threshold_LSB 0X3C#define Command_Read_Back 0X3F #define WRITE 1
#define READ 0#define CH7_EN 0X80
#define CH6_EN 0X40
#define CH5_EN 0X20
#define CH4_EN 0X10
#define CH3_EN 0X08
#define CH2_EN 0X04
#define CH1_EN 0X02
#define CH0_EN 0X01#define CH7_PD 0X80
#define CH6_PD 0X40
#define CH5_PD 0X20
#define CH4_PD 0X10
#define CH3_PD 0X08
#define CH2_PD 0X04
#define CH1_PD 0X02
#define CH0_PD 0X01#define VREF_25_25 0X00
#define VREF_125_125 0X01
#define VREF_0625_0625 0X02
#define VREF_0_25 0X05
#define VREF_0_125 0X06
/***********************************************************************************************/
ADS8684 驱动相关推荐
- ADS8688 驱动记录(ATmega128)
做了一块用于污水处理单元的控制采集板,其中传感器部分大部分是4-20ma的电流输出,由于要做全隔离设计,于是采用了TI的8路ADC芯片ADS8688实现.原理图部分如下: 驱动部分代码,在他人基础上修 ...
- 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态
嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...
- 0、Spring 注解驱动开发
0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...
- 安装 Python MySQL 驱动(mysql-connector-python、MySQL-python)
1. 安装 由于 MySQL 服务器以独立的进程运行,并通过网络对外服务,所以,需要支持 Python 的MySQL 驱动来连接到 MySQL 服务器. 目前,有两个MySQL驱动: mysql-co ...
- Linux驱动框架之framebuffer驱动框架
1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...
- [Ubuntu] 安装/卸载 声卡驱动
卸载 sudo apt-get --purge remove linux-sound-base alsa-base alsa-utils 安装 sudo apt-get install linux-s ...
- pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装
一.前言描述 接到客户报修说,电脑无法开机,即到哥上门维修立即安排人员到现场查看原因,到现场后,查看的确是电脑系统问题,重新安装系统,安装完成系统后,发现打印机无法使用.这个打印机型号是TSC TTP ...
- linux mipi驱动分析_寒武纪社招内推数字IC设计、DSI驱动、软件架构、产品经理、芯片架构、工具链开发、深度学习、FAE工程师...
点击上方蓝字关注我吧! 为什么内推更靠谱?内推是基于人脉关系链的推荐,其背后有一定的信用背书,靠谱的人推荐的人相对也会比较靠谱,所以企业一般职位都是从内部开始分享的,相较于自己海投简历,内推的效率和成 ...
- i7 7700hq安装Linux,黑苹果安装火影金刚4K VULCAN JinGang GTX i7-7700HQ 独显驱动 Hackintosh...
严格来说,这不是一台笔记本,更像是一台移动一体机.火影金刚4K,独显GTX 1060,核显HD 630,在BIOS里是可以屏蔽核显的.所以这一次安装黑苹果时,直接当是一台IMAC来安装,连机型都是选择 ...
最新文章
- .net mvc 报表_Web在线报表设计器使用指南
- 16-作用域(全局作用域及局部作用域)
- Spark入门:也可以用Java创建轻量级的RESTful应用程序
- 超好用的webssh(支持秘钥登录)
- scanf可以输入负数吗_C语言进行数据的多输入多输出
- staruml java_非常详细的StarUML使用教程,推荐阅读!
- Confluence 6 完成你的任务
- 魔兽世界python脚本拍卖行_Python大法之告别脚本小子系列—信息资产收集类脚本编写(上)...
- mysql-存储过程 使用游标获取数据集并且操作
- Rust 与服务端编程的碎碎念
- 双系统装完只能u盘启动_U盘启动盘如何安装Win7+Win8双系统史上最详细教程
- 易语言制作计算软件简单步骤_基于飞时达FastTFT软件方格网法计算土方量的具体步骤...
- 基于STM32CUBE MX 的TM1640的使用例程
- Python中的 生成器、迭代器
- 大学英语(第三册)复习(原文及全文翻译)——Unit 7 - The Shelter(防空洞)
- 安卓逆向007之安卓系统架构
- eclipse中referenced libraries的引入方法
- 【Linux常用命令】linux常用命令集合配例子解析说明(持续更新)【Linux基础命令使用及总结】2020-12-21
- 外一篇:九阳豆浆机故障一则
- [附源码]计算机毕业设计Python+uniapp基于Android的学生评教系统rfl6a(程序+源码+LW+远程部署)