精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    1006

    瀏覽量

    47349
  • OpenHarmony
    +關注

    關注

    25

    文章

    3545

    瀏覽量

    15728
  • 凌智電子
    +關注

    關注

    1

    文章

    21

    瀏覽量

    1040
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發。本案例已在OpenHarmony
    的頭像 發表于 09-15 08:09 ?59次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用<b class='flag-5'>開發</b>:Hello<b class='flag-5'>Openharmony</b>

    瑞芯微RK3568鴻蒙開發板OpenHarmony系統修改cfg文件權限方法

    本文適用于OpenHarmony開源鴻蒙系統修改cfg文件權限方法,深圳觸覺智能研發的RK3566、RK3568、RK3588等開發板、主板
    的頭像 發表于 09-11 13:26 ?345次閱讀
    瑞芯微<b class='flag-5'>RK</b>3568鴻蒙<b class='flag-5'>開發板</b><b class='flag-5'>OpenHarmony</b>系統修改cfg文件權限方法

    樹莓和arm開發板的區別

    樹莓(Raspberry Pi)和ARM開發板都是基于ARM架構的微型計算機,但它們之間存在些關鍵區別。 、歷史背景 樹莓(Rasp
    的頭像 發表于 08-30 15:36 ?261次閱讀

    linux開發板與樹莓的區別

    定義和用途 Linux開發板:Linux開發板種基于Linux操作系統的嵌入式開發板,通常用于工業自動化、物聯網、智能家居等領域。 樹莓
    的頭像 發表于 08-30 15:34 ?184次閱讀

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

    實驗內容本示例將演示如何在小-RK2206開發板上使用WiFi-AP模式(即將RK2206作為WiFi路由器),實現與PC端進行TCP通
    的頭像 發表于 08-08 08:23 ?169次閱讀
    基于<b class='flag-5'>OpenHarmony</b>輕量級操作系統實現<b class='flag-5'>RK2206</b> WiFi-AP模式通信<b class='flag-5'>開發</b>案例

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

    實驗內容 本示例將演示如何在小-RK2206開發板上使用WiFi-AP模式(即將RK2206作為WiFi路由器),實現與PC端進行TCP
    發表于 08-07 15:50

    基于Openharmony輕量級操作系統的分布式數據管理開發案例

    實驗內容本例程演示如何在小-RK2206開發板上使用OpenHarmony輕量級操作系統進行
    的頭像 發表于 08-07 08:23 ?614次閱讀
    基于<b class='flag-5'>Openharmony</b>輕量級操作系統的分布式數據管理<b class='flag-5'>開發</b>案例

    鴻蒙OpenHarmony南向/北向快速開發教程-迅為RK3568開發板

    大家期待已久的迅為RK3568開發板終于迎來了鴻蒙4.1系統的強勢支持!想知道如何實現快速開發學習嗎?跟著我們起來探索吧! 迅為RK356
    發表于 07-23 10:44

    名單公布!【書籍評測活動NO.38】OpenHarmony開發與實踐 | 基于紅莓RK2206開發板

    圖文并茂。 4、試讀報告發表在電子發燒友論壇>>社區活動專版標題名稱必須包含【「OpenHarmony開發與實踐 | 基于紅莓RK2206開發板」閱讀體驗】+自擬標題
    發表于 07-19 10:57

    【七】Purple Pi OH開發板帶你7天入門OpenHarmony

    OpenHarmonyOS。.PurplePiOH開發板的使用體驗1.1USB首先,讓我們談談PurplePiOH開發板。作為款與樹莓
    的頭像 發表于 03-22 08:31 ?268次閱讀
    【七】Purple Pi OH<b class='flag-5'>開發板</b>帶你7天入門<b class='flag-5'>OpenHarmony</b>!

    OpenHarmony鴻蒙實戰】在RK3399開發板實現智能門禁人臉識別

    基于RK3399開發板,使用OpenHarmony3.0-LTS開發的應用。通過定時獲取攝像頭數據,實現人臉識別比對等功能。
    的頭像 發表于 03-20 17:38 ?929次閱讀
    【<b class='flag-5'>OpenHarmony</b>鴻蒙實戰】在<b class='flag-5'>RK</b>3399<b class='flag-5'>開發板</b>實現智能門禁人臉識別

    OpenHarmony C++公共基礎類庫應用案例:HelloWorld

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的簡單案例:HelloWorld。該應用案例已在OpenHarmony-RK
    的頭像 發表于 11-23 08:22 ?589次閱讀
    <b class='flag-5'>OpenHarmony</b> C++公共基礎類庫應用案例:HelloWorld

    OpenHarmony C++公共基礎類庫應用案例:Thread

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的線程處理:Thread。該應用案例已在OpenHarmony-RK
    的頭像 發表于 11-23 08:22 ?744次閱讀
    <b class='flag-5'>OpenHarmony</b> C++公共基礎類庫應用案例:Thread