在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

小凌派-RK2206OpenHarmony開發板例程系列之一:ADC按鍵案例

福州市凌睿智捷電子有限公司 ? 2022-04-11 13:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、簡介
嵌入式系統產品開發中,按鍵板的設計是最基本的,也是項目評估階段必須要考慮的問題。其實現方式有很多種,具體使用那一種就需要結合可用IO數量,并綜合考慮成本,做出最終選擇。傳統的按鍵檢測方法是一個按鍵對應一個GPIO口,進行高低電平輸入檢測。可是在GPIO口緊缺的情況下,不得不需要一個有效的解決方案,其中ADC檢測實現按鍵功能是一種相對有效的解決方案。
ADC檢測實現簡單實用的按鍵方法:僅需要一個ADC和若干個電阻就可實現多個按鍵的輸入檢測。工作原理:按下按鍵時,通過電阻分壓得到不同的電壓值,ADC采集在各個范圍內的值來判定是哪個按鍵按下。
本文采用RK2206芯片自帶的逐次逼近寄存器模數轉換器(Successive-Approximation Analog to Digital Converter),是一種常用的A/D轉換結構,其較低的功耗表現,不錯的轉換速率,在有低功耗要求(可穿戴設備、物聯網)的數據采集場景下廣泛應用。
二、硬件電路設計
ADC檢測實現簡單實用的按鍵方法:僅需要一個ADC和若干個電阻就可實現多個按鍵的輸入檢測。工作原理:按下按鍵時,通過電阻分壓得到不同的電壓值,ADC采集在各個范圍內的值來判定是哪個按鍵按下。
模塊整體硬件電路如下圖所示,電路中包含了1根ADC引腳和4個按鍵。

凌智電子:小凌派-RK2206鴻蒙開發板例程系列之一ADC按鍵案例-OpenHarmony技術社區

圖1 硬件電路圖

其中,4個按鍵分別連接不同的電阻。當按鍵按下時,USER_KEY_ADC檢測到不同的電壓。具體如下所示:

表1 按鍵對應電壓表

凌智電子:小凌派-RK2206鴻蒙開發板例程系列之一ADC按鍵案例-OpenHarmony技術社區

USER_KEY_ADC引腳連接到RK2206芯片的GPIO0_C5,如下圖所示:

凌智電子:小凌派-RK2206鴻蒙開發板例程系列之一ADC按鍵案例-OpenHarmony技術社區

圖2 USER_KEY_ADC引腳的硬件電路圖

三、ADC接口
ADC相應接口頭文件在:
/device/rockchip/rk2206/adapter/include/lz_hardware.h
RK2206芯片提供以下兩大類接口:
(1)初始化、銷毀ADC;
(2)ADC讀操作。
具體接口如PPT所示。以下我們詳細講解這些接口。
(1)LzSaradcInit
該函數主要功能是SARADC設備初始化。
int LzSaradcInit(void);
成功返回LZ_HARDWARE_SUCCESS, 其余為失敗。
(2)LzSaradcDeinit
該函數主要功能是SARADC設備釋放。
int LzSaradcDeinit(void);
成功返回LZ_HARDWARE_SUCCESS, 其余為失敗。
(3)LzSaradcReadValue
該函數主要功能是SARADC設備讀取。
int LzSaradcReadValue(unsigned int chn, unsigned int *val);
參數chn:ADC通道id;
參數val:讀取值。
成功返回LZ_HARDWARE_SUCCESS, 其余為失敗。
四、程序設計
ADC按鍵程序每1秒通過GPIO0_PC5讀取一次按鍵電壓,通過電壓數值判斷當前是哪個按鍵被按下,并打印出該按鍵名稱。
如圖所示為ADC按鍵主程序流程圖,開機LiteOS系統初始化后,進入主程序先初始化ADC設備。程序進入主循環,1秒獲取一次ADC采樣電壓,判斷:
(1)采樣電壓在0.00~0.11V之間,則當前是按下Key1,打印Key1;
(2)采樣電壓在0.45~0.65V之間,則當前是按下Key2,打印Key2;
(3)采樣電壓在0.90~1.1V之間,則當前是按下Key3,打印Key3;
(4)采樣電壓在1.55~1.75V之間,則當前是按下Key4,打印Key4;
(5)當前無按鍵。

凌智電子:小凌派-RK2206鴻蒙開發板例程系列之一ADC按鍵案例-OpenHarmony技術社區

圖3主程序流程圖

void adc_process()
{
    float voltage;

    /* 初始化adc設備 */
    adc_dev_init();
    
    while (1)
    {
        printf("***************Adc Example*************\r\n");
        /*獲取電壓值*/
        voltage = adc_get_voltage();
        printf("vlt:%.3fV\n", voltage);

        if ((0.11 >= voltage) && (voltage >= 0.00))
        {
            printf("\tKey1\n");
        }
        else if ((0.65 >= voltage) && (voltage >= 0.45))
        {
            printf("\tKey2\n");
        }
        else if ((1.1 >= voltage) && (voltage >= 0.9))
        {
            printf("\tKey3\n");
        }
        else if ((1.75 >= voltage) && (voltage >= 1.55))
        {
            printf("\tKey4\n");
        }

        /* 睡眠1秒 */
        LOS_Msleep(1000);
    }
}

ADC初始化程序主要分為ADC初始化和配置ADC參考電壓為外部電壓兩部分:

static unsigned int adc_dev_init()
{
    unsigned int ret = 0;
    uint32_t *pGrfSocCon29 = (uint32_t *)(0x41050000U + 0x274U);
    uint32_t ulValue;

    ret = DevIoInit(m_adcKey);
    if (ret != LZ_HARDWARE_SUCCESS)
    {
        printf("%s, %s, %d: ADC Key IO Init fail\n", __FILE__, __func__, __LINE__);
        return __LINE__;
    }
    ret = LzSaradcInit();
    if (ret != LZ_HARDWARE_SUCCESS) {
        printf("%s, %s, %d: ADC Init fail\n", __FILE__, __func__, __LINE__);
        return __LINE__;
}

    /* 設置saradc的電壓信號,選擇AVDD */
    ulValue = *pGrfSocCon29;
    ulValue &= ~(0x1 << 4);
    ulValue |= ((0x1 << 4) << 16);
    *pGrfSocCon29 = ulValue;
    
    return 0;
}

RK2206芯片采用一種逐次逼近寄存器型模數轉換器(Successive-Approximation Analog to Digital Converter),是一種常用的A/D轉換結構,其較低的功耗表現,還不錯的轉換速率,在有低功耗要求(可穿戴設備、物聯網)的數據采集場景下廣泛應用。該ADC采用10bit采樣,最高電壓為3.3V。簡而言之,ADC采樣讀取的數據,bit[0~9]有效,且最高數值0x400(即1024)代表實際電壓差3.3V,也就是說1個數值等于3.3V / 1024 = 0.003222V。

static float adc_get_voltage()
{
    unsigned int ret = LZ_HARDWARE_SUCCESS;
    unsigned int data = 0;

    ret = LzSaradcReadValue(ADC_CHANNEL, &data);
    if (ret != LZ_HARDWARE_SUCCESS)
    {
        printf("%s, %s, %d: ADC Read Fail\n", __FILE__, __func__, __LINE__);
        return 0.0;
}

return (float)(data * 3.3 / 1024.0);
}

五、編譯過程
1、打開sdk下面路徑的文件
/vendor/lockzhiner/rk2206/samples/b1_adc/adc_example.c
注意:Gitee上的ADC案例為通用案例,請大家根據上述的需求修改相關源代碼。
2、修改編譯腳本
修改 vendor/lockzhiner/rk2206/sample 路徑下 BUILD.gn 文件,指定 adc_example 參與編譯。
“./b0_adc:adc_example”,
修改 device/lockzhiner/rk2206/sdk_liteos 路徑下 Makefile 文件,添加 -ladc_example 參與編譯。
hardware_LIBS = -lhal_iothardware -lhardware -ladc_example
3、編譯固件

hb set -root .
hb set
hb build -f

4、燒寫固件
5、通過串口查看結果
運行結果

***************Adc Example*************
vlt:3.297V
***************Adc Example*************
vlt:3.297V
***************Adc Example*************
vlt:3.297V
***************Adc Example*************
vlt:3.297V
***************Adc Example*************
vlt:3.297V
***************Adc Example*************
vlt:3.297V
……

好了,今天的課程就到這里,更多技術干貨請關注福州市凌睿智捷電子有限公司(凌智電子),持續更新中…

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式開發
    +關注

    關注

    18

    文章

    1075

    瀏覽量

    48721
  • OpenHarmony
    +關注

    關注

    29

    文章

    3847

    瀏覽量

    18377
  • 凌智電子
    +關注

    關注

    1

    文章

    26

    瀏覽量

    1287
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介 本實驗將演示如何在小-RK2206開發板上使用IOT庫的FLASH接口,進行FLASH編程開發
    發表于 04-22 15:02

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介本實驗將演示如何在小-RK2206開發板上使用IOT庫的FLASH接口,進行FLASH編程開發
    的頭像 發表于 04-22 14:49 ?312次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制FLASH外設

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制UART外設

    1、實驗簡介 本實驗將演示如何在小-RK2206開發板上使用IOT庫的UART接口,進行UART編程開發
    發表于 04-22 14:27

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制UART外設

    1、實驗簡介本實驗將演示如何在小-RK2206開發板上使用IOT庫的UART接口,進行UART編程開發
    的頭像 發表于 04-22 14:22 ?405次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制UART外設

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實驗簡介 本實驗將演示如何在小-RK2206開發板上使用IOT庫的GPIO中斷模式,進行GPIO編程開發
    發表于 04-21 11:08

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實驗簡介本實驗將演示如何在小-RK2206開發板上使用IOT庫的GPIO中斷模式,進行GPIO編程開發
    的頭像 發表于 04-21 10:39 ?412次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO中斷

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介 本案例主要是如何在小-RK2206開發板上使用IOT庫的GPIO接口,進行GPIO編程開發
    發表于 04-11 15:45

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介本案例主要是如何在小-RK2206開發板上使用IOT庫的GPIO接口,進行GPIO編程開發
    的頭像 發表于 04-11 15:36 ?1159次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO外設

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制ADC外設

    1、案例簡介 本案例主要講解如何在小-RK2206開發板上使用IoT庫的ADC接口,進行ADC
    發表于 04-10 16:20

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制ADC外設

    1、案例簡介本案例主要講解如何在小-RK2206開發板上使用IoT庫的ADC接口,進行ADC
    的頭像 發表于 04-10 16:00 ?388次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制<b class='flag-5'>ADC</b>外設

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制PWM外設

    1、案例簡介 本案例是在小-RK2206開發板上使用IoT庫PWM接口,進行PWM編程開發例程
    發表于 04-09 09:37

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制PWM外設

    1、案例簡介本案例是在小-RK2206開發板上使用IoT庫PWM接口,進行PWM編程開發例程
    的頭像 發表于 04-09 08:59 ?913次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制PWM外設

    【「OpenHarmony開發與實踐 | 基于紅莓RK2206開發板」閱讀體驗】+初體驗1

    愛好者沒有bug,「OpenHarmony開發與實踐 | 基于紅莓RK2206開發板」大賣吧!哦對了 你們的開發板是怎么準備的呢?【小
    發表于 09-18 18:30

    【「OpenHarmony開發與實踐 | 基于紅莓RK2206開發板」閱讀體驗】+初體驗2連發發

    啥也不說先上圖 對于《OpenHarmony開發與實踐 | 基于紅莓RK2206開發板》這本書的熱愛,簡直就像夏日里的股清泉,讓人忍不
    發表于 09-18 18:01

    基于OpenHarmony輕量級操作系統實現RK2206 WiFi-AP模式通信開發案例

    實驗內容本示例將演示如何在小-RK2206開發板上使用WiFi-AP模式(即將RK2206作為WiFi路由器),實現與PC端進行TCP通
    的頭像 發表于 08-08 08:23 ?887次閱讀
    基于<b class='flag-5'>OpenHarmony</b>輕量級操作系統實現<b class='flag-5'>RK2206</b> WiFi-AP模式通信<b class='flag-5'>開發</b>案例
    主站蜘蛛池模板: 午夜片 飘香香影院 | 黄色在线看网站 | 色综合久久天天综合绕观看 | a久久久久一级毛片护士免费 | 午夜看片影院在线观看 | 五月天伦理 | 一级特黄毛片 | 2019天天射干 | 国产高清在线观看 | 亚洲一区免费在线观看 | 欧美日韩亚洲国产一区二区综合 | 性色欧美xo影院 | 欧美一区二区不卡视频 | h在线观看免费 | 日本一区二区三区免费看 | 欧美大狠狠大臿蕉香蕉大视频 | 思思久99久女女精品 | 日本高清色视频www 日本高清色视频在线观看免费 | 九九热精品视频在线播放 | 婷婷六月激情在线综合激情 | 456性欧美欧美在线视频 | 午夜在线视频 | 亚洲一区二区三区四区五区六区 | 第四色亚洲 | 免费国产一区二区三区 | 免费高清一级欧美片在线观看 | 国产20岁美女一级毛片 | 久青草视频免费视频播放线路1 | 97超频国产在线公开免费视频 | 天堂网在线观看 | 欧美一级特黄乱妇高清视频 | 亚洲色图久久 | 国产精品三级在线 | 都市激情亚洲综合 | 天天插天天干天天射 | 午夜一区二区三区 | 美女扒开腿让男人桶尿口 | 国产1卡2卡三卡四卡网站 | 亚洲精品成人在线 | 亚洲视频入口 | 热九九精品 |