一、本实验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. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  2. F#之旅0 - 开端

    F#之旅0 - 开端 UWP的学习告一段落,CozyRSS的UWP版本并没有做.UWP跟wpf开发几乎一模一样,然后又引入了很多针对移动设备的东西,这部分有点像android.没啥太大的意思,不难,估 ...

  3. 用opencsv文件读写CSV文件

    首先明白csv文件长啥样儿: 用excel打开就变成表格了,看不到细节 推荐用其它简单粗暴一点儿的编辑器,比如Notepad++, csv文件内容如下: csv文件默认用逗号分隔各列. 有了基础的了解 ...

  4. 工作中常用的awk命令

    http://man.linuxde.net/awk 1.为一列id加逗号 awk 'BEGIN {ORS=","}{print $1}' test.txt 2.统计一列id中重复 ...

  5. 学习微信小程序之css10外边距

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

  6. python 爬虫(二)

    python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...

  7. oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式

      数字字典表 --查看当前用户下面有哪些张表 select * from user_tables; select table_name from user_tables;   --查看当前用户下面有 ...

  8. java合并pdf

    一.开发准备 下载pdfbox-app-1.7.1.jar包;下载地址:http://download.csdn.net/detail/yanning1314/4852276 二.简单小例子 在开发中 ...

  9. android 开发 gradle 自己会容易混淆的东西

    使用intellij idea 开发android ,关于 gradle 和 android gradle plugin 容易混淆地方,做下记录: 一. build.gradle 文件有两个地方存在, ...

  10. mac 终端常用命令

    1.复制文件内容到剪贴板:pbcopy < ~/.ssh/id_rsa.pub. 2.ssh key 的生成,参考mac ssh key 的获取. 3.sourcetree 需要输入的密码,指的 ...