[nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC
一、本实验ADC 配置
- 分辨率:10 位。
- 输入通道:5,即使用输入通道AIN5 检测电位器的电压。
- ADC 基准电压:1.2V。
二、NRF51822 ADC 管脚分布
NRF51822 的ADC 共有8 个输入通道,对应的管脚分布入下图:

三、NRF51822 ADC 原理
NRF51822 的ADC 比较简单,如下图所示。

3.1、ADC 通道及预分压系数
NRF51822 的ADC 共有8 个输入通道,在使用ADC 时,要设定ADC 的输入通道。本实验中,因为连接电位器的管脚是P0.04,所以,选择输入通道AIN5。
3.2、基准电压
基准电压有4 种选择,分别是:
- 1) 内部1.2V。
- 2) CONFIG. EXTREFSEL 中设定的外部基准。
- 3) 1/2 VDD,仅适用于VDD 工作在1.7 V - 2.6 V 电压范围内。
- 4) 1/3 VDD,仅适用于VDD 工作在2.5 V - 3.6 V 电压范围内。
3.3、分辨率
NRF51822 的ADC 可以作8、9、10 位转换,本实验中,选择最高分辨率:10 位。需要注意的是:NRF51822 的ADC 自身仅支持单次转换,每次转换时都需要触发STARTtask。当然,我们可以借助NRF51822 强大的PPI 功能,通过定时器时间来触发ADC 的STARTtask,从而进行连续转换。
四、代码解析:
main函数:
int main(void)
{
nrf_gpio_cfg_output(LED_1);//配置P0.21~P0.24为输出驱动LED指示灯D1~D4
nrf_gpio_pin_set(LED_1); //LED初始状态为熄灭 6 adc_config();
uart_config();
8 nrf_adc_start();//每次调用这个函数就会触发ADC一次采样,当采样完毕后会触发ADC_IRQHander,下面ADC_IRQHander内部获取采样值并保存在adc_sample中,同时最后又调用start函数,进行下一次采样
while (true)
{
nrf_delay_ms();
13 printf("V%d", (int)adc_sample);
nrf_gpio_pin_toggle(LED_1); __SEV(); //设置事件
__WFE(); //进入睡眠,等待事件唤醒
__WFE();
}
}
ADC初始化:
void adc_config(void)
{
const nrf_adc_config_t nrf_adc_config = NRF_ADC_CONFIG_DEFAULT; // Initialize and configure ADC
nrf_adc_configure( (nrf_adc_config_t *)&nrf_adc_config);
7 nrf_adc_input_select(NRF_ADC_CONFIG_INPUT_5);
nrf_adc_int_enable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos);
9 NVIC_SetPriority(ADC_IRQn, NRF_APP_PRIORITY_HIGH);
10 NVIC_EnableIRQ(ADC_IRQn);
}
ADC事件中断:
/**
* @brief ADC interrupt handler.
*/
void ADC_IRQHandler(void)
{
6 nrf_adc_conversion_event_clean();
7 adc_sample = nrf_adc_result_get();
8 // trigger next ADC conversion
9 nrf_adc_start();//
}
@nRF51822基础实验系列:
[nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
@beautifulzzzz - 物联网&普适计算实践者
e-mail:beautifulzzzz@qq.com
i-blog:blog.beautifulzzzz.com
[nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC的更多相关文章
- [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM
一.PWM概述: PWM(Pulse Width Modulation):脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形. PWM 的几个基本概念: 1) 占空比:占空比是指 ...
- [nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写
一.实验内容: 通过串口发送单个字符到NRF51822,NRF51822 接收到字符后将其写入到FLASH 的最后一页,之后将其读出并通过串口打印出数据. 二.nRF51822芯片内部flash知识 ...
- [nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC
一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻 ...
- [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
前一篇分析了前十个基础实验的代码,从这里开始分析后十个~ 一.PPI原理: PPI(Programmable Peripheral Interconnect),中文翻译为可编程外设互连. 在nRF51 ...
- [nRF51822] 7、基础实验代码解析大全(前十)
实验01 - GPIO输出控制LED 引脚输出配置:nrf_gpio_cfg_output(LED_1); 引脚输出置高:nrf_gpio_pin_set(LED_1); 引脚电平转换:nrf_gpi ...
- 基础Gan代码解析
initializer总结: #f.constant_initializer(value) 将变量初始化为给定的常量,初始化一切所提供的值. #tf.random_normal_initializer ...
- MYSQL常见出错mysql_errno()代码解析
如题,今天遇到怎么一个问题, 在理论上代码是不会有问题的,但是还是报了如上的错误,把sql打印出來放到DB中却可以正常执行.真是郁闷,在百度里面 渡 了很久没有相关的解释,到时找到几个没有人回复的 & ...
- 【原创】大数据基础之Spark(5)Shuffle实现原理及代码解析
一 简介 Shuffle,简而言之,就是对数据进行重新分区,其中会涉及大量的网络io和磁盘io,为什么需要shuffle,以词频统计reduceByKey过程为例, serverA:partition ...
- 【原创】大数据基础之Spark(4)RDD原理及代码解析
一 简介 spark核心是RDD,官方文档地址:https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-di ...
随机推荐
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- 《UML大战需求分析》阅读随笔(三)
一: 需求中提到的各种业务概念.人物等,经过抽象后都可以视之为类. 平时遇到的人.物,我们将遇到的都是具体的人.物,也就如程序中的对象,是一个实实在在的东西. 当我们分析需求的时候,设计模型的时候,我 ...
- c:out标签和el表达式与跨域攻击XSS
很多时候,在JSP中我们喜欢用EL表达式输出信息,但是最近发现这个确实存在个问题:XSS即跨域攻击. 下面看个例子: <c:out value="${student.name}&quo ...
- 迷之bug
是这样的.要解决tbody滚动,而thead不动的布局问题,我把它们分别放在两个表格里,上面的只有thead,下面的只有tbody, 然后解决宽度对齐的问题,我用colgroup设置每列的宽度,用的都 ...
- unity 协程
StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使 ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- mac下xampp的mysql无法自动启动
mac下xampp的mysql无法自动启动,每次启动都要手动在终端里执行 sudo /Applications/XAMPP/xamppfiles/bin/mysql.server start 自动启动 ...
- 原生js模拟锚点,实现点击后,内容定位到本页的对应位置
今天在做angularJS项目过程中,遇见了一个需求,在一个页面中有多个表格,每个表格都有对应的分页,点击顶部对应的模块,可以定位到每个表格模块具体的位置. 页面如下所示: 在angular中,为了使 ...
- 在php中定义常量时,const与define的区别?
问]在php中定义常量时,const与define的区别? [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很 ...
- node-webkit安装及简单实现
遇到一个客户说不要登录网页访问系统,说是不安全,要做成像是QQ这样的客户端. 这让我很为难啊,项目都快做好了,不可能让我重新做吧,再说C++什么的我也不会啊, 于是我接触了node-webkit,并觉 ...