• [nRF51822] 9、基础实验代码解析大全 · 实验12


    一、本实验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基础实验系列:


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

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


     

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

  • 相关阅读:
    POJ 1611 The Suspects(并查集)
    POJ 2485 Highways(最小生成树Prim算法)
    POJ 1062 昂贵的聘礼(最短路径Dijkstr的变形)
    SDUT 2374 || HDU 1803Cylinder(计算几何求体积)
    HDU 1804 || SDUT 2375 Deli Deli(简单题)
    POJ 3041 Asteroids(二分图的最大匹配)
    HDU 1802 || SDUT 2373 Black and white painting(规律)
    POJ 1035 Spell checker(字符串简单匹配)
    POJ 3080 Blue Jeans(KMP模式匹配)
    js中反斜杠\的一些研究
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/5753079.html
Copyright © 2020-2023  润新知