【BLE】CC2541之ADC

本文最后修改时间:2022年04月12日 23:00

一、本节简介

本文介绍如何通过P05口采集电压值。

二、实验平台

1)CC2541平台

①协议栈版本:BLE-CC254x-1.4.0

②编译软件:IAR 10.20.1

③硬件平台:香瓜CC2541开发板、USB Dongle

④仿真器:香瓜CC Debugger下载器

2)电脑平台

①软件:Btool

三、版权声明

1)作者:甜甜的大香瓜

2)声明:喝水不忘挖井人,转载请注明出处。

3)纠错/业务合作:897503845@qq.com

4)香瓜BLE之CC2541群:127442605

5)本文出处:原创连载资料《简单粗暴学蓝牙4.0(CC2541篇)》

6)完整开源资料下载地址(电脑端打开):

opengua.taobao.com

7)香瓜CC2541开发板套件购买:

opengua.taobao.com

四、实验前提

1、在进行本文步骤前,请先阅读以下章节:

1)《简单粗暴学蓝牙4.0(CC2541篇)》的“第一章至第三章”章节

2、在进行本文步骤前,请先实现以下章节:

1)《简单粗暴学蓝牙4.0(CC2541篇)》的“第三章 软件的安装及使用”章节。

五、基础知识

1、CC2541的ADC是怎么样的?

答:

1)14位的模拟数字转换

2)最多12位的有效位数,最高位是符号位。

3)8个独立通道,AIN0~AIN7。

4)四种参考电压可选:

如上图,分别是内部参考电压(1.25V)、外部AIN7脚的电压、AVDD5脚的电压(3.3V)、外部AIN6~AIN7的差值电压。

注意:采集的电压值不能高过参考电压。外部的参考电压测出来的数据,会比内部参考电压测出来的数据更准。

2、AIN0~AIN7是指哪些引脚?

答:

P00~P07平时是普通IO口,也可以复用成AIN0~AIN7(复用时就没有普通IO口功能,而只有ADC功能)

六、硬件原理

1、本文使用的ADC引脚,P05

由于P05被用于底板的串口电路中,会被拉高到3.3V。所以要想使用P05,就得将核心板单独接线出来使用。(嫌麻烦的话建议换其他引脚)

七、实验步骤

1、编写并添加自定义的驱动

1)写一个驱动GUA_ADC.c(存放在“……

\BLE-CC254x-1.4.0\Projects\ble\SimpleBLECentral\Source\GUA”路径下)

//**********************************************************************

//name:         GUA_ADC.c

//introduce:    香瓜自定义的ADC驱动

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2541(127442605)

//shop:         opengua.taobao.com

//changetime:   2022.04.11

//**********************************************************************

#include <ioCC2540.h>

#include "GUA_ADC.h"

//**********************************************************************

//name:         GUA_Read_Adc

//introduce:    读ADC

//parameter:    channel:0~7表示P00~P07通道

//return:       2个字节ADC值(实际12位,最高位为符号位)

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2541(127442605)

//shop:         opengua.taobao.com

//changetime:   2022.04.11

//**********************************************************************

GUA_U16 GUA_Read_Adc(GUA_U8 channel)

{

  GUA_U16 value;

  GUA_U8 tmpADCCON3 = ADCCON3;

  P0SEL |= 1 << channel ;               //设置该通道为Peripheral function

  APCFG |= 1 << channel ;               //设置该通道为Analog I/O enabled

  ADCIF = 0;

  ADCCON3  = (2 << 6| 3 << 4| channel); //AVDD5、12bit、AINx

  while(!ADCIF);                        //等待ADC转换完成

  //while(!(ADCCON1 & 0x80));             //等待ADC转换完成

  value =  ADCL >> 2;                   //ADCL寄存器低2位无效

  value |= ((GUA_U16)ADCH << 6);        //连接AD转换结果高位和低位

  value >>= 2;                          //分辨率是12位,因此14位结果去除2位,最高位是符号位

  ADCCON3 = tmpADCCON3;

 

  return (value);

}

2)写一个驱动头文件GUA_ADC.h(存放在“……

\BLE-CC254x-1.4.0\Projects\ble\SimpleBLECentral\Source\GUA”路径下)

//**********************************************************************

//name:         GUA_ADC.h

//introduce:    香瓜自定义的ADC驱动的头文件

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2541(127442605)

//shop:         opengua.taobao.com

//changetime:   2022.04.11

//**********************************************************************

#ifndef GUA_ADC_H

#define GUA_ADC_H

/*********************宏定义************************/

#ifndef GUA_C

typedef char GUA_C;

#endif

#ifndef GUA_U8

typedef unsigned char GUA_U8;

#endif

#ifndef GUA_8

typedef signed char GUA_8;

#endif

#ifndef GUA_U16

typedef unsigned short GUA_U16;

#endif

#ifndef GUA_16

typedef signed short GUA_16;

#endif

#ifndef GUA_U32

typedef unsigned long GUA_U32;

#endif

#ifndef GUA_32

typedef signed long GUA_32;

#endif

#ifndef GUA_U64

typedef unsigned long long GUA_U64;

#endif

#ifndef GUA_64

typedef signed long long GUA_64;

#endif

/*********************函数声明************************/

extern GUA_U16 GUA_Read_Adc(GUA_U8 channel);

#endif

3)工程中添加GUA_ADC.c

4)在IAR设置中添加按键驱动源文件路径

$PROJ_DIR$\..\..\SimpleBLEPeripheral\Source\GUA

2、在应用层中使用

1)应用层代码中添加驱动头文件(SimpleBLEPeripheral.c中)

//GUA

#include "GUA_ADC.h"

//GUA

3)添加测试代码(SimpleBLEPeripheral.c的SimpleBLEPeripheral_Init中)

//GUA

  uint16 nGUA_Adc_value = 0;

  nGUA_Adc_value = GUA_Read_Adc(5);

//GUA

为了方便仿真查看采集的电压变化,可以多复制几条来测试。

八、注意事项

1、P05用于底板的串口电路,不能直接接外部电路。要从底板跳线接GND\VCC\RESET\P21\P22五根线到核心板插针上。再将P05接到想测的外部电压上。

九、实验结果

设置断点在测试代码处,并仿真全速运行至断点处。

1、当P05脚接3.3V

0x7FF刚好是11位满量程,就是与参考电压一样,本文用的是3.3V参考电压,因此测得外部电压是3.3V。

2、当P05脚接1.63V时(通过两个10K电阻分压3.3V,得到万用表实际测量的1.63V)

采样到0x3E9(1001),通过公式3.3v/2048=x/1001,算得x=1.613V

所以实际1.63V,CC2541测得是1.613V,有0.017V的误差。如果想提高精度,可以使用外部参考电压。

3、当P05脚接GND

测试出现两种情况,一种是采集到0x0002(算得0.0033V),这种是正常的。另一种是测得0xFFFD,这种情况是最高位的符号位变负数,香瓜猜测是接线出来后有一点点压差导致,且香瓜不会算负数……出现这种情况时,也可以适时选择直接软件过滤成0来处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2161.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpeingMVC框架(三)

目录 五、响应数据与结果视图 1、返回值分类 2、springmvc的请求转发和重定向 六、异常处理 1、处理思路 2、自定义异常处理器 七、springmvc中的拦截器 1、拦截器概述 2、自定义拦截器步骤 五、响应数据与结果视图 1、返回值分类 返回String&#xff1a;Controller方…

Hadoop3.x 万字解析,从入门到剖析源码

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

【Vue】分享一个快速入门的前端框架以及如何搭建

先上效果图: 登录 菜单: 下载地址: 链接&#xff1a;https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码&#xff1a;ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…

汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮

故障现象  一辆2007款法拉利599 GTB车&#xff0c;搭载6.0 L V12自然吸气发动机&#xff08;图1&#xff09;&#xff0c;累计行驶里程约为6万km。该车因发动机故障灯异常点亮进厂检修。 图1 发动机的布置 故障诊断 接车后试车&#xff0c;发动机怠速轻微抖动&#xff0c;…

Emacs 折腾日记(九)——elisp 数组与序列

elisp 中序列是数组和列表的统称&#xff0c;序列的共性是内部数据有一个先后的顺序&#xff0c;它与C/C 中有序列表类似。 elisp 中的数组包括向量、字符串、char-table 和布尔向量&#xff0c;它们的关系如下: 在之前一章中已经介绍了序列中的一种类型——列表&#xff0c…

Mac玩Steam游戏秘籍!

Mac玩Steam游戏秘籍&#xff01; 大家好&#xff01;最近有不少朋友在用MacBook玩Steam游戏时遇到不支持mac的问题。别担心&#xff0c;我来教你如何用第三方工具Crossover来畅玩这些不支持的游戏&#xff0c;简单又实用&#xff01; 第一步&#xff1a;下载Crossover 首先&…

初识算法和数据结构P1:保姆级图文详解

文章目录 前言1、算法例子1.1、查字典&#xff08;二分查找算法&#xff09;1.2、整理扑克&#xff08;插入排序算法&#xff09;1.3、货币找零&#xff08;贪心算法&#xff09; 2、算法与数据结构2.1、算法定义2.2、数据结构定义2.3、数据结构与算法的关系2.4、独立于编程语言…

Oracle 使用dbms_stats.gather_table_stats来进行表analyse,收集表统计信息

目录 一. 介绍二. 参数说明三. 简易封装四. 效果 一. 介绍 DBMS_STATS.GATHER_TABLE_STATS 用于收集 表 级别的统计信息。这些统计信息有助于查询优化器优化查询计划&#xff0c;影响与表本身相关的查询性能。 Oracle 查询优化器会根据表的统计信息来选择最优的执行计划。当运…

apache-skywalking-apm-10.1.0使用

apache-skywalking-apm-10.1.0使用 本文主要介绍如何使用apache-skywalking-apm-10.1.0&#xff0c;同时配合elasticsearch-8.17.0-windows-x86_64来作为存储 es持久化数据使用。 步骤如下&#xff1a; 一、下载elasticsearch-8.17.0-windows-x86_64 1、下载ES(elasticsear…

Flink系统知识讲解之:容错与State状态管理

Flink系统知识之&#xff1a;容错与State状态管理 状态在Flink中叫作State&#xff0c;用来保存中间计算结果或者缓存数据。根据是否需要保存中间结果&#xff0c;分为无状态计算和有状态计算。对于流计算而言&#xff0c;事件持续不断地产生&#xff0c;如果每次计算都是相互…

Python线性混合效应回归LMER分析大鼠幼崽体重数据、假设检验可视化|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p38816 在数据分析领域&#xff0c;当数据呈现出层次结构时&#xff0c;传统的一般线性模型&#xff08;GLM&#xff09;可能无法充分捕捉数据的特征。混合效应回归作为GLM的扩展&#xff0c;能够有效处理这类具有层次结构的数据&…

大疆机场及无人机上云

最近基于大疆上云api进行二次开发&#xff0c;后面将按照开发步骤对其进行说明&#xff01;

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识&#xff08;如加密、签名、证书等&#xff09;&…

SpringMVC

开发模式&#xff1a; &#xff08;1&#xff09;前后端不分离&#xff1a;服务端渲染 数据和结构并不分离&#xff0c;客户端发送请求后访问指定路径资源&#xff0c;服务端业务处理之后将数据组装到页面&#xff0c;并返回带数据的完整页面。 &#xff08;2&#xff09;前…

uni-app编写微信小程序使用uni-popup搭配uni-popup-dialog组件在ios自动弹出键盘。

uni-popup-dialog 对话框 将 uni-popup 的type属性改为 dialog&#xff0c;并引入对应组件即可使用对话框 &#xff0c;该组件不支持单独使用 示例 <button click"open">打开弹窗</button> <uni-popup ref"popup" type"dialog"…

UML系列之Rational Rose笔记九:组件图

一、新建组件图 二、组件图成品展示 三、工作台介绍 最主要的还是这个component组件&#xff1b; 然后还有这几个&#xff0c;正常是用不到的&#xff1b;基本的使用第四部分介绍一下&#xff1a; 四、基本使用示例 这些&#xff0c;主要是运用package还有package specifica…

数据结构《MapSet哈希表》

文章目录 一、搜索树1.1 定义1.2 模拟实现搜索 二、Map2.1 定义2.2 Map.Entry2.3 TreeMap的使用2.4 Map的常用方法 三、Set3.1 定义3.2 TreeSet的使用3.3 Set的常用方法 四、哈希表4.1 哈希表的概念4.2 冲突4.2.1 冲突的概念4.2.2 冲突的避免1. 选择合适的哈希函数2. 负载因子调…

赛灵思(Xilinx)公司Artix-7系列FPGA

苦难从不值得歌颂&#xff0c;在苦难中萃取的坚韧才值得珍视&#xff1b; 痛苦同样不必美化&#xff0c;从痛苦中开掘出希望才是壮举。 没有人是绝对意义的主角&#xff0c; 但每个人又都是自己生活剧本里的英雄。滑雪&#xff0c;是姿态优雅的“贴地飞行”&#xff0c;也有着成…

qt vs ios开发应用环境搭建和上架商店的记录

qt 下载链接如下 https://download.qt.io/new_archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg 安装选项全勾选就行&#xff0c;这里特别说明下qt5.14.2/qml qt5.14.2对qml支持还算成熟&#xff0c;但很多特性还得qt6才行&#xff0c;这里用qt5.14.2主要是考虑到服…

JavaSE学习心得(反射篇)

反射 前言 获取class对象的三种方式 利用反射获取构造方法 利用反射获取成员变量 利用反射获取成员方法 练习 保存信息 跟配置文件结合动态创建 前言 接上期文章&#xff1a;JavaSE学习心得&#xff08;多线程与网络编程篇&#xff09; 教程链接&#xff1a;黑马…