0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何操作ADC去讀取電壓

電子發(fā)燒友開源社區(qū) ? 來源:HarmonyOS官方合作社區(qū) ? 作者:HarmonyOS官方合作社 ? 2022-03-02 17:51 ? 次閱讀

摘要

本文簡單介紹如何操作ADC去讀取電壓,并且實現(xiàn)開發(fā)板上3個ADC按鍵檢測的功能。

適合群體

適用于潤和Hi3861開發(fā)板,L0輕量系統(tǒng)驅(qū)動開發(fā)

1、實驗效果

查看開發(fā)板,可以看到除了復位按鍵之外,還有3個按鍵。而查看原理,我們可以看到這個3個按鍵其實都是接的GPIO5 引腳,而GPIO5引腳又可復用為ADC2引腳。

如何操作ADC去讀取電壓

故而,我們可以猜測出來我們可以使用ADC檢測電壓,判斷出來是哪個引腳被按下了??聪滦Ч?/p>

當我按下 按鍵1 的時候串口會打印:

如何操作ADC去讀取電壓

當我按下 按鍵2 的時候串口會打?。?/p>

如何操作ADC去讀取電壓

當我按下 USER按鍵 的時候串口會打印:

如何操作ADC去讀取電壓

其中 vlt_min 表示讀取到ADC值的最小值,vlt_max 表示讀取到ADC值的最大值。

由此我們可以看到,按鍵1被按下的時候,ADC值得范圍在 0.563 ~ 0.577,按鍵2按下后,ADC值在 0.963 ~ 0.970,USER按鍵按下后 ADC值 在 0.197 ~ 0.204。

如果沒有按鍵按下,則ADC值在 3.227 ~ 3.241,vlt_min:3.227, vlt_max:3.241

2、代碼實現(xiàn)

代碼實現(xiàn)其實很簡單:

(1)引腳初始化

這里由于GPIO5默認被復用為串口引腳,這里我們重新修改為普通GPIO引腳。初始化代碼如下:

(hi_void)hi_gpio_init();    hi_io_set_func(HI_IO_NAME_GPIO_5, HI_IO_FUNC_GPIO_5_GPIO); /* uart1 rx */
  ret = hi_gpio_set_dir(HI_GPIO_IDX_5, HI_GPIO_DIR_IN);  if (ret != HI_ERR_SUCCESS) {    printf("===== ERROR ======gpio -> hi_gpio_set_dir1 ret:%d
", ret);    return;  }

向右滑動查看完整代碼

(2)讀取ADC值

讀取ADC值的代碼頁相對簡單,這里,我是重復讀取64次,減少誤判。

memset_s(g_adc_buf, sizeof(g_adc_buf), 0x0, sizeof(g_adc_buf));
  for (i = 0; i < ADC_TEST_LENGTH; i++) {    ret = hi_adc_read((hi_adc_channel_index)HI_ADC_CHANNEL_2, &data, HI_ADC_EQU_MODEL_1, HI_ADC_CUR_BAIS_DEFAULT, 0);    if (ret != HI_ERR_SUCCESS) {      printf("ADC Read Fail
");      return;    }    g_adc_buf[i] = data;  }

向右滑動查看完整代碼

(3)對讀出來的ADC值進行判斷處理

S1對應的是按鍵1 、 S2對應的是按鍵2 、 S3對應的是 USER按鍵

for (i = 0; i < data_len; i++) {    vlt = g_adc_buf[i];    float voltage = (float)vlt * 1.8 * 4 / 4096.0; /* vlt * 1.8 * 4 / 4096.0: Convert code into voltage */    vlt_max = (voltage > vlt_max) ? voltage : vlt_max;    vlt_min = (voltage < vlt_min) ? voltage : vlt_min;  }  //printf("vlt_min:%.3f, vlt_max:%.3f 
", vlt_min, vlt_max);
  vlt_val = (vlt_min + vlt_max)/2.0;
  if((vlt_val > 0.4) && (vlt_val < 0.6))  {    if(key_flg == 0)    {      key_flg = 1;      key_status = KEY_EVENT_S1;    }  }  if((vlt_val > 0.8) && (vlt_val < 1.1))  {    if(key_flg == 0)    {      key_flg = 1;      key_status = KEY_EVENT_S2;    }  }
  if((vlt_val > 0.01) && (vlt_val < 0.3))  {    if(key_flg == 0)    {      key_flg = 1;      key_status = KEY_EVENT_S3;    }  }
  if(vlt_val > 3.0)  {    key_flg = 0;    key_status = KEY_EVENT_NONE;  }

向右滑動查看完整代碼

(4)使用

編寫好上面代碼后,就可以直接在while循環(huán)中判斷按鍵值了。

while(1)  {    //讀取ADC值    app_demo_adc_test();
    switch(get_key_event())    {      case KEY_EVENT_NONE:      {              }      break;
      case KEY_EVENT_S1:      {        printf("KEY_EVENT_S1 
");      }      break;
      case KEY_EVENT_S2:      {        printf("KEY_EVENT_S2 
");      }      break;
      case KEY_EVENT_S3:      {        printf("KEY_EVENT_S3 
");      }      break;
    }
    usleep(30000);  }

向右滑動查看完整代碼

原文標題:OpenHarmony輕量系統(tǒng)開發(fā)【6】驅(qū)動之ADC按鍵

文章出處:【微信公眾號:HarmonyOS官方合作社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    98

    文章

    6394

    瀏覽量

    543781
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1818

    瀏覽量

    85110
  • 電壓
    +關(guān)注

    關(guān)注

    45

    文章

    5539

    瀏覽量

    115490

原文標題:OpenHarmony輕量系統(tǒng)開發(fā)【6】驅(qū)動之ADC按鍵

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在MSP430G2中使用ADC使用Energia IDE讀取模擬電壓

    在本教程中,我們將學習如何在MSP430G2中使用ADC使用Energia IDE讀取模擬電壓。我們將一個小電位計連接到MSP板,并向模擬引腳提供變化的電壓,
    的頭像 發(fā)表于 11-16 17:24 ?2165次閱讀
    如何在MSP430G2中使用<b class='flag-5'>ADC</b>使用Energia IDE<b class='flag-5'>讀取</b>模擬<b class='flag-5'>電壓</b>

    ESP8285 ADC可以讀取的最大電壓是多少?

    我想將溫度傳感器連接到ADC(TOUT)引腳。ADC可以讀取的最大電壓是多少?是1V嗎?如果是,向ADC施加2V
    發(fā)表于 07-08 06:55

    如何使用ADC讀取DAC輸出引腳的電壓值?

    如何使用STM32CubeMX配置STM32L431RCT6的ADC外設?如何使用ADC讀取DAC輸出引腳的電壓值?
    發(fā)表于 07-01 06:01

    中斷方式單通道ADC讀取電壓

    單端/差分ADC和三個內(nèi)部通道。學習內(nèi)容:1.輪詢方式單通道ADC讀取電壓2.中斷方式單通道ADC讀取
    發(fā)表于 08-11 07:22

    如何使用ADC采集電壓

    如何使用ADC采集電壓呢?有哪些操作流程?
    發(fā)表于 09-24 06:27

    新手求助怎樣讀取ADC的值

    GPIO的操作步驟有哪些?獨立看門狗的操作步驟有哪些?怎樣讀取ADC的值?
    發(fā)表于 09-24 06:57

    怎樣讀取基于stm32f030的ADC

    ADC設置的一般步驟有哪些?怎樣讀取ADC的值?如何對ADC的值進行分析?
    發(fā)表于 10-15 08:02

    怎樣計算STM32的ADC參考電壓與參照電壓

    STM32的ADC電壓輸入范圍是多少?怎樣計算STM32的ADC參考電壓與參照電壓呢?
    發(fā)表于 10-21 06:51

    如何利用基于STM32F407的單通道ADC讀取電壓

    ADC的功能有哪些?如何利用基于STM32F407的單通道ADC讀取電壓呢?
    發(fā)表于 01-25 06:44

    OpenHarmony輕量系統(tǒng)開發(fā)【6】驅(qū)動之ADC按鍵

    摘要:本文簡單介紹如何操作ADC讀取電壓,并且實現(xiàn)開發(fā)板上3個ADC按鍵檢測的功能適合群體:適
    發(fā)表于 01-25 10:25

    STM32單片機基礎21——使用ADC讀取電壓

    title: 【STM32Cube-21】使用ADC讀取電壓值tags: STM32CubeMX ADCcategories: STM32CubeMXabbrlink: 862377868date
    發(fā)表于 11-19 09:51 ?35次下載
    STM32單片機基礎21——使用<b class='flag-5'>ADC</b><b class='flag-5'>讀取</b><b class='flag-5'>電壓</b>值

    51單片機讀取JY61陀螺儀的數(shù)據(jù)操作方法

    51單片機讀取JY61陀螺儀的數(shù)據(jù)操作方法
    發(fā)表于 11-23 16:20 ?13次下載
    51單片機<b class='flag-5'>去</b><b class='flag-5'>讀取</b>JY61陀螺儀的數(shù)據(jù)<b class='flag-5'>操作</b>方法

    利用51單片機讀取JY901的陀螺儀和磁力計數(shù)據(jù)操作

    利用51單片機讀取JY901的陀螺儀和磁力計數(shù)據(jù)操作
    發(fā)表于 11-23 16:20 ?18次下載
    利用51單片機<b class='flag-5'>去</b><b class='flag-5'>讀取</b>JY901的陀螺儀和磁力計數(shù)據(jù)<b class='flag-5'>操作</b>

    【GD32】GD32讀取ADC數(shù)據(jù)

    讀取ADC值4.將ADC值轉(zhuǎn)換成電壓值我這里采用PA5進行ADC的channel_5通道1.初始IO引腳/*初始化時鐘*/rcu_perip
    發(fā)表于 12-02 15:06 ?28次下載
    【GD32】GD32<b class='flag-5'>讀取</b><b class='flag-5'>ADC</b>數(shù)據(jù)

    APM32F030C8T6_ADC_ADC Vref參考電壓數(shù)值讀取出錯

    APM32F030C8T6_ADC_ADC Vref參考電壓數(shù)值讀取出錯
    發(fā)表于 11-09 21:04 ?2次下載
    APM32F030C8T6_<b class='flag-5'>ADC_ADC</b> Vref參考<b class='flag-5'>電壓</b>數(shù)值<b class='flag-5'>讀取</b>出錯