<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

基于rt-thread studio的sdk開發adc的應用詳解

MCU學習筆記 ? 來源:MCU學習筆記 ? 作者:MCU學習筆記 ? 2021-11-06 09:41 ? 次閱讀

本文將介紹基于 rt-thread studio的 sdk開發 adc的應用。本實驗是在昨天的《中科藍訊 AB32VG1開發板OLED顯示實驗》項目基礎上,增加ADC電壓采集的功能,將模擬量通道7采集到的電壓值顯示在OLED顯示屏。

《中科藍訊 AB32VG1開發板OLED顯示實驗》文章的地址連接:中科藍訊 AB32VG1開發板OLED顯示實驗 。

根據說明書,AB32VG1開發板上有 16個通道的 10 bit的 ADC模塊,最大采樣速度是 78k/s; ADC模塊時鐘的最大速度是 1MHz,有內部 100k的上拉電阻。本文通過 RT-Thread Studio配置 ADC驅動,完成ADC7通道的電壓采集,并顯示在OLED工作,使開發板上電,自動采集電壓,OLED顯示兩行字符串:第一行顯示“The Voltage”,第二行顯示電壓值“0.00V”。電路原理如圖所示,

poYBAGGF3DeAQtW8AACkdUc63Zo583.png

從電路原理圖可知,:使用的是 ADC的第 7個通道,根據原理圖可知對應的是 PE5管腳,所以這里需要用杜邦線將PE5接到3.3V電源上,開發板實物杜邦線連接如圖所示:其中白色是連接PE5與3.3V電源,其余接線為OLED相關,詳見圖中標注。

pYYBAGGF3EeAfU1-AAXhqRbffek426.png

I2C的 OLED屏,芯片 SSD1309.

poYBAGGF3FGAAIczAAMzaU-CzHQ397.png

步驟說明:

首先啟動RT-Thread Studio,在工程項目中打開AB32VG1_IIC_OLED,(如果還沒有這個工程,請看中科藍訊 AB32VG1開發板OLED顯示實驗 (qq.com)完成工程創建),展開工程,雙擊打開RT-Thread Settings,如下圖所示

pYYBAGGF3GOAYOBwAADABvjJM0A313.png

雙擊任意軟件包或者點擊右側的“<<”,都可以進入的配置界面,彈出軟件包和硬件配置界面,如下圖所示,這里切換到硬件選型,如圖所示開啟名字為ADC0的AD轉換設備,打對號即可。配置好后 ctrl+s?保存配置

pYYBAGGF3HWAbrO1AABW4M_psQ0649.png

2. ADC設備使用示例

ADC設備的具體使用方式可以參考rt-thread官方開發文檔,官網連接:ADC設備 (rt-thread.org),從官方demo看,示例代碼的主要步驟如下:

首先根據 ADC設備名稱 “adc1”查找設備獲取設備句柄,代碼如下:

/*查找設備 */

adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);

if(adc_dev == RT_NULL)

{

rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);

returnRT_ERROR;

}

這里如果設備不存在,rt_device_find函數將返回NULL(RT_NULL),串口控制臺會看到打印adc sample run failed! can't find字樣,程序執行結束。

如果設備存在,下一步就是使能設備后讀取 adc1設備對應的通道 5的采樣值,

/*使能設備 */

ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);

/*讀取采樣值 */

value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);

rt_kprintf("the value is :%d \n", value);

這里rt_kprintf將轉換之后的數字量串口打印輸出。

最后根據讀取的數字量,做一個標度變換,將數字量轉為為實際的電壓值。根據分辨率為 12位,參考電壓為 3.3V計算實際的電壓值。代碼如下:

vol = value * REFER_VOLTAGE / CONVERT_BITS;

rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);

這里rt_kprintf將標度變換之后的采樣電壓值串口打印輸出。

最后關閉 ADC設備對應通道。代碼如下:

ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);

demo例程的最后一行代碼是導出到 msh命令列表中,這樣需要在 finsh命令行輸入 tab鍵,彈出支持的命令,輸入 adc_vol_sample,才可以啟動AD轉換。

MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);

3.修改main函數代碼

在了解了官方ADC設備示例代碼之后,下面對main函數修改。首先將官方代碼拷貝到main函數中,然后修改ADC設備名稱、ADC通道、參考電壓、轉換位數如下所示:這里設備為ADC0,模擬量通道為7,采集3.3V電壓,轉換位數為10位。

#defineADC_DEV_NAME "adc0" /* ADC設備名稱 */

#defineADC_DEV_CHANNEL 7 /* ADC通道 */

#defineREFER_VOLTAGE 330 /*參考電壓 3.3V,數據精度乘以100保留2位小數*/

#defineCONVERT_BITS (1 << 10)? ?/*?轉換位數為12位 */

修改函數定義staticintadc_vol_sample(int argc,char*argv[])為staticintadc_vol_sample(),同時將程序最后一句代碼MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);刪除,因為直接在主程序調用,上電執行ADC轉換,這個就不要了。修改之函數后代碼如圖所示:

pYYBAGGF3J6AGGi_AAFQ2RnHbC8804.png

主程序調用adc_vol_sample,就可以了。要在主程序添加變量staticintadvlue;

poYBAGGF3KiALCznAAAYBfc1vqo591.png

編譯沒有錯誤,就可以將程序下載到開發板運行,打開downloader下載切換到開發模式,就可以看到ADC轉換的結果如下圖所示.

pYYBAGGF3LKAOLarAAK1T-h462c586.png

4.編寫OLED顯示代碼

上一篇文章,通過OLED實現了字符串顯示,要實現電壓值的顯示,這里首先要將整型的電壓值,分解出每一位,然后轉化為字符輸出顯示。轉換顯示代碼如下所示。

pYYBAGGF3MGAbmqxAAGSENkswps380.png

main函數完整代碼如下,開發板實際運行如最后圖片所示。

/*

* Copyright (c) 2020-2021, Bluetrum Development Team

*

* SPDX-License-Identifier: Apache-2.0

*

* Change Logs:

* Date Author Notes

* 2020/12/10 greedyhao The first version

*/

/**

* Notice!

* All functions or data that are called during an interrupt need to be in RAM.

* You can do it the way exception_isr() does.

*/

#include

#include

#include

#include

#include"board.h"

#include"ssd1306.h"http://包含SSD1306的頭文件

#defineADC_DEV_NAME "adc0" /* ADC設備名稱 */

#defineADC_DEV_CHANNEL 7 /* ADC通道 */

#defineREFER_VOLTAGE 330 /*參考電壓 3.3V,數據精度乘以100保留2位小數*/

#defineCONVERT_BITS (1 << 10)? ?/*?轉換位數為12位 */

voiddisplay(inttmp)

{

//330

unsignedcharcount;

unsignedchardatas[] = {0, 0, 0, 0, 0};

datas[0] = tmp / 100;

datas[1] = tmp % 100 / 10;

datas[2] = tmp % 100 % 10;

ssd1306_SetCursor(40, 40);//添加代碼,設置顯示光標位置

ssd1306_WriteChar('0'+datas[0], Font_11x18,White);

ssd1306_WriteChar('.', Font_11x18,White);

for(count = 1; count != 3; count++)

{

ssd1306_WriteChar('0'+datas[count], Font_11x18,White);

}

ssd1306_WriteChar('V', Font_11x18,White);

ssd1306_UpdateScreen();////添加代碼,更新顯示屏信息

}

staticintadc_vol_sample()

{

rt_adc_device_t adc_dev;

unsignedcharTemp_Disp_Buff[17];

rt_uint32_t value, vol;

rt_err_t ret = RT_EOK;

/*查找設備 */

adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);

if(adc_dev == RT_NULL)

{

rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);

returnRT_ERROR;

}

/*使能設備 */

ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);

/*讀取采樣值 */

value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);

rt_kprintf("the value is :%d \n", value);

/*轉換為對應電壓值 */

vol = value * REFER_VOLTAGE / CONVERT_BITS;

rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);

/*關閉通道 */

ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);

display(vol);

returnret;

}

intmain(void)

{

uint8_t pin = rt_pin_get("PE.1");

staticintadvlue;

rt_pin_mode(pin, PIN_MODE_OUTPUT);

rt_kprintf("Hello, world\n");

ssd1306_Init();//添加代碼,顯示屏初始化

ssd1306_SetCursor(2, 6);//添加代碼,設置顯示光標位置

ssd1306_WriteString("The voltage", Font_11x18,White);//添加代碼,設置顯示內容

ssd1306_SetCursor(40, 40);//添加代碼,設置顯示光標位置

display(0);

ssd1306_UpdateScreen();////添加代碼,更新顯示屏信息

while(1)

{

rt_pin_write(pin, PIN_LOW);

rt_thread_mdelay(500);

rt_pin_write(pin, PIN_HIGH);

rt_thread_mdelay(500);

advlue=adc_vol_sample();

}

}

pYYBAGGF3NKANZAQAAlXYI8wsT4118.png

下一期文章,等電路板返回,做一下DS18B20測溫實現。

poYBAGGF3N6ATldMAAGXu1bueow489.png

編輯:fqj

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

    關注

    5

    文章

    346

    瀏覽量

    30259
  • adc
    adc
    +關注

    關注

    95

    文章

    5652

    瀏覽量

    539489
  • 開發板
    +關注

    關注

    25

    文章

    4434

    瀏覽量

    94032
  • SDK
    SDK
    +關注

    關注

    3

    文章

    966

    瀏覽量

    44714
  • RT-Thread
    +關注

    關注

    31

    文章

    1149

    瀏覽量

    38900
收藏 人收藏

    評論

    相關推薦

    RT-Thread記錄(一、版本開發環境及配合CubeMX)

    RT-Thread 學習記錄的第一篇文章,RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio
    的頭像 發表于 06-20 00:28 ?4488次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(一、版本<b class='flag-5'>開發</b>環境及配合CubeMX)

    RT-Thread記錄(二、RT-Thread內核啟動流程)

    在前面我們RT-Thread Studio工程基礎之上講一講RT-Thread內核啟動流程.
    的頭像 發表于 06-20 00:30 ?4421次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(二、<b class='flag-5'>RT-Thread</b>內核啟動流程)

    RT-Thread Studio 文檔導航

    ;line-height:30px; } .lastIntroduction{margin-bottom:80px; } RT-Thread Studio 概覽RT-Thread Stud
    發表于 03-29 06:53

    如何使用RT-Thread studio開發STM32應用

    1.摘要本篇筆記主要介紹,在RT-Thread環境下,如何使用RT-Thread studio開發 STM32應用,以STM32H43為例介紹.2. 準備工作1, 安裝
    發表于 08-13 07:00

    【文章連載】RT-Thread創新應用大賽文章匯總

    作者:RTT大賽學習經驗分享 基于 rt-thread studiosdk 開發 adc 的應用
    發表于 10-11 15:13

    基于RT-Thread StudioADC外設使用方案介紹

    1、基于RT-Thread Stduio使用ART-Pi的ADC外設1. 打開 RT-Thread Stduio,左上角新建 RT-Thread 項目,選擇基于
    發表于 03-28 16:57

    如何使用RT-Thread Studio創建支持HPM6750開發板的RT-Thread項目

    使用RT-Thread Studio進行支持HPM6750開發板的RT-Thread項目開發前,需要先下載HPM6750所需的幾個軟件包,具
    發表于 06-08 11:22

    RT-Thread Studio IDE使用的基礎介紹

    ;gt; Bluetrum_AB32VG1-ab-prougen ,勾選,安裝資源包,至此可以在rt-thread studio基于AB32VG1做開發了還需要在 SDK 管理器中安裝
    發表于 07-01 11:41

    RT-Thread開發,如何有效學習RT-Thread的五個步驟

    RT-Thread推出RT-Thread Inside戰略開放RT-Thread開發平臺授權合作,與硬件十萬個為什么合作首次推出第一款RT-
    的頭像 發表于 09-25 09:55 ?3.4w次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>開發</b>,如何有效學習<b class='flag-5'>RT-Thread</b>的五個步驟

    RT-Thread Studio 主要亮點功能

    RT-Thread Studio V1.1.0 快速上手體驗 RT-Thread Studio 主要包括工程創建和管理,代碼編輯,SDK管理
    的頭像 發表于 06-19 11:45 ?5361次閱讀

    RT-Thread Studio驅動SD卡

    總結前言硬件平臺:RT-Thread ART-Pi STM32H750XBH6開發板 H750開發開發軟件:RT-Thread
    發表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Studio</b>驅動SD卡

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?2594次閱讀
    基于<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Studio</b>學習

    使用RT-Thread Studio進行智能家居終端的設計

    本次方案基于星火一號開發開發,使用RT-Thread Studio進行工程創建,代碼編輯,RT-Thread配置,調試配置,程序下載等功能
    的頭像 發表于 07-28 16:41 ?1385次閱讀
    使用<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Studio</b>進行智能家居終端的設計

    試用RT-Thread Studio(VSCode)

    想嘗試RT-Thread studio (VSCode),先下載安裝VSCode,再搜索RT-Thread
    的頭像 發表于 10-12 10:58 ?573次閱讀
    試用<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Studio</b>(VSCode)

    rt-studio潘多拉開發板最新rt-thread不能運行解決辦法

    rt-studio 上 選擇基于開發板的項目,選擇潘多拉,rt-thread選擇lasted ,如下圖
    的頭像 發表于 10-16 14:50 ?629次閱讀
    <b class='flag-5'>rt-studio</b>潘多拉<b class='flag-5'>開發</b>板最新<b class='flag-5'>rt-thread</b>不能運行解決辦法
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>