[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 }

 

 

@nRF51822基礎實驗系列:


[nRF51822] 7、基礎實驗代碼解析大全(前十)

[nRF51822] 8、基礎實驗代碼解析大全 · 實驗11 - PPI


 

 

 

@beautifulzzzz - 物聯網&普適計算實踐者
e-mail:beautifulzzzz@qq.com 
i-blog:blog.beautifulzzzz.com 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM