[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函数:

复制代码
 1 int main(void)
 2 {
 3     nrf_gpio_cfg_output(LED_1);//配置P0.21~P0.24为输出驱动LED指示灯D1~D4
 4     nrf_gpio_pin_set(LED_1);   //LED初始状态为熄灭
 5 
 6     adc_config();
 7     uart_config();
 8     nrf_adc_start();//每次调用这个函数就会触发ADC一次采样,当采样完毕后会触发ADC_IRQHander,下面ADC_IRQHander内部获取采样值并保存在adc_sample中,同时最后又调用start函数,进行下一次采样
 9 
10     while (true)
11     {
12         nrf_delay_ms(200);
13         printf("V%d", (int)adc_sample);
14         nrf_gpio_pin_toggle(LED_1);
15 
16         __SEV();  //设置事件
17         __WFE();  //进入睡眠,等待事件唤醒
18         __WFE();
19     }
20 }
复制代码

 

ADC初始化:

复制代码
 1 void adc_config(void)
 2 {
 3     const nrf_adc_config_t nrf_adc_config = NRF_ADC_CONFIG_DEFAULT;
 4 
 5     // Initialize and configure ADC
 6     nrf_adc_configure( (nrf_adc_config_t *)&nrf_adc_config);
 7     nrf_adc_input_select(NRF_ADC_CONFIG_INPUT_5);
 8     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);
11 }
复制代码

 

ADC事件中断:

复制代码
 1 /**
 2  * @brief ADC interrupt handler.
 3  */
 4 void ADC_IRQHandler(void)
 5 {
 6     nrf_adc_conversion_event_clean();
 7     adc_sample = nrf_adc_result_get();
 8     // trigger next ADC conversion
 9     nrf_adc_start();//
10 }
复制代码


相关文章
|
10天前
|
存储 算法 Java
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(二)
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(二)
19 1
|
10天前
|
存储 算法 Java
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(一)
必会的10个经典算法题(附解析答案代码Java/C/Python看这一篇就够)(一)
20 0
|
15天前
|
JSON 监控 网络协议
局域网管理软件的DNS解析代码实践
本文介绍了如何使用Python实现DNS解析,通过示例代码展示了构建和解析DNS请求的过程。此外,还讨论了网络流量监控,利用psutil库获取网络接口的流量数据。最后,探讨了自动将监控数据提交到网站的方法,使用requests库将网络数据以JSON格式发送到指定网站。这些自动化工具提升了局域网管理效率和安全性。
404 1
|
26天前
|
机器学习/深度学习 存储 并行计算
深入解析xLSTM:LSTM架构的演进及PyTorch代码实现详解
xLSTM的新闻大家可能前几天都已经看过了,原作者提出更强的xLSTM,可以将LSTM扩展到数十亿参数规模,我们今天就来将其与原始的lstm进行一个详细的对比,然后再使用Pytorch实现一个简单的xLSTM。
54 2
|
29天前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结
|
1月前
|
机器学习/深度学习 编解码
【论文笔记】图像修复MPRNet:Multi-Stage Progressive Image Restoration 含代码解析2
【论文笔记】图像修复MPRNet:Multi-Stage Progressive Image Restoration 含代码解析
30 2
|
1月前
|
机器学习/深度学习 计算机视觉
【论文笔记】图像修复MPRNet:Multi-Stage Progressive Image Restoration 含代码解析1
【论文笔记】图像修复MPRNet:Multi-Stage Progressive Image Restoration 含代码解析
30 1
【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
|
1月前
|
C++
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
|
1月前
|
Serverless C++ 容器
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】

推荐镜像

更多