博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC
阅读量:5140 次
发布时间:2019-06-13

本文共 1973 字,大约阅读时间需要 6 分钟。

 

 

一、本实验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 }

 

 

@nRF51822基础实验系列:



 

 

 

@beautifulzzzz - 物联网&普适计算实践者

e-mail:beautifulzzzz@qq.com 
i-blog:blog.beautifulzzzz.com 

 

转载于:https://www.cnblogs.com/zjutlitao/p/5753079.html

你可能感兴趣的文章
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
OpenFire 的安装和配置
查看>>
ZJOI2018游记Round1
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
ios应用版本号设置规则
查看>>
海上孤独的帆
查看>>
error: more than one device and emulator 问题解决
查看>>
Java基础:容器
查看>>
YUV摘要格式
查看>>
【方法2】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录
查看>>
C# CheckedListBox控件的使用方法
查看>>
【HDOJ】2007平方和与立方和
查看>>
js中const,var,let区别
查看>>