一、本实验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] 7、基础实验代码解析大全(前十)

[nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI


@beautifulzzzz - 物联网&普适计算实践者
e-mail:beautifulzzzz@qq.com 
i-blog:blog.beautifulzzzz.com

[nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC的更多相关文章

  1. [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM

    一.PWM概述: PWM(Pulse Width Modulation):脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形. PWM 的几个基本概念: 1) 占空比:占空比是指 ...

  2. [nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写

     一.实验内容: 通过串口发送单个字符到NRF51822,NRF51822 接收到字符后将其写入到FLASH 的最后一页,之后将其读出并通过串口打印出数据. 二.nRF51822芯片内部flash知识 ...

  3. [nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC

    一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻 ...

  4. [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI

    前一篇分析了前十个基础实验的代码,从这里开始分析后十个~ 一.PPI原理: PPI(Programmable Peripheral Interconnect),中文翻译为可编程外设互连. 在nRF51 ...

  5. [nRF51822] 7、基础实验代码解析大全(前十)

    实验01 - GPIO输出控制LED 引脚输出配置:nrf_gpio_cfg_output(LED_1); 引脚输出置高:nrf_gpio_pin_set(LED_1); 引脚电平转换:nrf_gpi ...

  6. 基础Gan代码解析

    initializer总结: #f.constant_initializer(value) 将变量初始化为给定的常量,初始化一切所提供的值. #tf.random_normal_initializer ...

  7. MYSQL常见出错mysql_errno()代码解析

    如题,今天遇到怎么一个问题, 在理论上代码是不会有问题的,但是还是报了如上的错误,把sql打印出來放到DB中却可以正常执行.真是郁闷,在百度里面 渡 了很久没有相关的解释,到时找到几个没有人回复的 & ...

  8. 【原创】大数据基础之Spark(5)Shuffle实现原理及代码解析

    一 简介 Shuffle,简而言之,就是对数据进行重新分区,其中会涉及大量的网络io和磁盘io,为什么需要shuffle,以词频统计reduceByKey过程为例, serverA:partition ...

  9. 【原创】大数据基础之Spark(4)RDD原理及代码解析

    一 简介 spark核心是RDD,官方文档地址:https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-di ...

随机推荐

  1. 桥接模式/bridge模式/对象结构型

    意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 动机 当一个抽象类有多个实现时,通常用继承来协调它们.但是继承机制将抽象和实现固定,难以对抽象部分和实现部分独立地进行修改.扩充和重用. ...

  2. 学习微信小程序之css11内外边距集合

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Java基础知识点4:继承

    继承是面向对象编程技术中非常重要的一个基本概念.它背后的基本思想就是:通过已有的类来创建一个新的类,这个新的类可以重用(或继承)已有的类方法:新的类也可以加入新的方法和属性. 在这里我们通过一个实例来 ...

  4. 提高ASP.net性能的十种方法

    提高ASP.net性能的十种方法 2014-10-24  空城66  摘自 博客园  阅 67  转 1 转藏到我的图书馆   微信分享:   今天无意中看了一篇关于提高ASP.NET性能的文章,个人 ...

  5. Java基础加强之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  6. Navicat备份远程Oracle数据库到本地

    公司的数据库是本地的,我只能在公司连,回家就不能跑项目了,一跑就报SQLException,所以希望可以把数据库复制到我的本地来. 因为一直在用Navicat操作数据库,这里就分享一下用Navicat ...

  7. Java IO 操作(一)

    (1)File 类的基础用法 // 1.创建 一个file 对象File file = new File("D:\\aaa");// 2.判断此 file 是否是一个文件夹file ...

  8. 【第三课】WEBIX 入门自学-Hello World

    在看官网教程时,入门的例子就是dataTable这个空间.So,遵循官网,一起来看一下入门的DataTable组件: WEB使用时固然是先引入相应的库文件: 代码如下 <html> < ...

  9. BZOJ2908: 又是nand

    Description 首先知道A nand B=not(A and B) (运算操作限制了数位位数为K)比如2 nand 3,K=3,则2 nand 3=not (2 and 3)=not 2=5. ...

  10. java中内存分配策略及堆和栈的比较

    Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...