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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

基于rt-thread studio的sdk開發(fā)adc的應(yīng)用詳解

MCU學(xué)習(xí)筆記 ? 來源:MCU學(xué)習(xí)筆記 ? 作者:MCU學(xué)習(xí)筆記 ? 2021-11-06 09:41 ? 次閱讀

本文將介紹基于 rt-thread studio的 sdk開發(fā) adc的應(yīng)用。本實(shí)驗(yàn)是在昨天的《中科藍(lán)訊 AB32VG1開發(fā)板OLED顯示實(shí)驗(yàn)》項(xiàng)目基礎(chǔ)上,增加ADC電壓采集的功能,將模擬量通道7采集到的電壓值顯示在OLED顯示屏。

《中科藍(lán)訊 AB32VG1開發(fā)板OLED顯示實(shí)驗(yàn)》文章的地址連接:中科藍(lán)訊 AB32VG1開發(fā)板OLED顯示實(shí)驗(yàn) 。

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

poYBAGGF3DeAQtW8AACkdUc63Zo583.png

從電路原理圖可知,:使用的是 ADC的第 7個(gè)通道,根據(jù)原理圖可知對(duì)應(yīng)的是 PE5管腳,所以這里需要用杜邦線將PE5接到3.3V電源上,開發(fā)板實(shí)物杜邦線連接如圖所示:其中白色是連接PE5與3.3V電源,其余接線為OLED相關(guān),詳見圖中標(biāo)注。

pYYBAGGF3EeAfU1-AAXhqRbffek426.png

I2C的 OLED屏,芯片 SSD1309.

poYBAGGF3FGAAIczAAMzaU-CzHQ397.png

步驟說明:

首先啟動(dòng)RT-Thread Studio,在工程項(xiàng)目中打開AB32VG1_IIC_OLED,(如果還沒有這個(gè)工程,請(qǐng)看中科藍(lán)訊 AB32VG1開發(fā)板OLED顯示實(shí)驗(yàn) (qq.com)完成工程創(chuàng)建),展開工程,雙擊打開RT-Thread Settings,如下圖所示

pYYBAGGF3GOAYOBwAADABvjJM0A313.png

雙擊任意軟件包或者點(diǎn)擊右側(cè)的“<<”,都可以進(jìn)入的配置界面,彈出軟件包和硬件配置界面,如下圖所示,這里切換到硬件選型,如圖所示開啟名字為ADC0的AD轉(zhuǎn)換設(shè)備,打?qū)μ?hào)即可。配置好后 ctrl+s?保存配置

pYYBAGGF3HWAbrO1AABW4M_psQ0649.png

2. ADC設(shè)備使用示例

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

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

/*查找設(shè)備 */

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;

}

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

如果設(shè)備存在,下一步就是使能設(shè)備后讀取 adc1設(shè)備對(duì)應(yīng)的通道 5的采樣值,

/*使能設(shè)備 */

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將轉(zhuǎn)換之后的數(shù)字量串口打印輸出。

最后根據(jù)讀取的數(shù)字量,做一個(gè)標(biāo)度變換,將數(shù)字量轉(zhuǎn)為為實(shí)際的電壓值。根據(jù)分辨率為 12位,參考電壓為 3.3V計(jì)算實(shí)際的電壓值。代碼如下:

vol = value * REFER_VOLTAGE / CONVERT_BITS;

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

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

最后關(guān)閉 ADC設(shè)備對(duì)應(yīng)通道。代碼如下:

ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);

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

MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);

3.修改main函數(shù)代碼

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

#defineADC_DEV_NAME "adc0" /* ADC設(shè)備名稱 */

#defineADC_DEV_CHANNEL 7 /* ADC通道 */

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

#defineCONVERT_BITS (1 << 10)? ?/*?轉(zhuǎn)換位數(shù)為12位 */

修改函數(shù)定義staticintadc_vol_sample(int argc,char*argv[])為staticintadc_vol_sample(),同時(shí)將程序最后一句代碼MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);刪除,因?yàn)橹苯釉谥鞒绦蛘{(diào)用,上電執(zhí)行ADC轉(zhuǎn)換,這個(gè)就不要了。修改之函數(shù)后代碼如圖所示:

pYYBAGGF3J6AGGi_AAFQ2RnHbC8804.png

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

poYBAGGF3KiALCznAAAYBfc1vqo591.png

編譯沒有錯(cuò)誤,就可以將程序下載到開發(fā)板運(yùn)行,打開downloader下載切換到開發(fā)模式,就可以看到ADC轉(zhuǎn)換的結(jié)果如下圖所示.

pYYBAGGF3LKAOLarAAK1T-h462c586.png

4.編寫OLED顯示代碼

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

pYYBAGGF3MGAbmqxAAGSENkswps380.png

main函數(shù)完整代碼如下,開發(fā)板實(shí)際運(yùn)行如最后圖片所示。

/*

* 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設(shè)備名稱 */

#defineADC_DEV_CHANNEL 7 /* ADC通道 */

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

#defineCONVERT_BITS (1 << 10)? ?/*?轉(zhuǎn)換位數(shù)為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);//添加代碼,設(shè)置顯示光標(biāo)位置

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;

/*查找設(shè)備 */

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;

}

/*使能設(shè)備 */

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);

/*轉(zhuǎn)換為對(duì)應(yīng)電壓值 */

vol = value * REFER_VOLTAGE / CONVERT_BITS;

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

/*關(guān)閉通道 */

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);//添加代碼,設(shè)置顯示光標(biāo)位置

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

ssd1306_SetCursor(40, 40);//添加代碼,設(shè)置顯示光標(biāo)位置

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測(cè)溫實(shí)現(xiàn)。

poYBAGGF3N6ATldMAAGXu1bueow489.png

編輯:fqj

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

    關(guān)注

    5

    文章

    355

    瀏覽量

    30447
  • adc
    adc
    +關(guān)注

    關(guān)注

    97

    文章

    6300

    瀏覽量

    542459
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4771

    瀏覽量

    96184
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1006

    瀏覽量

    45420
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39438
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread記錄(一、版本開發(fā)環(huán)境及配合CubeMX)

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

    【文章連載】RT-Thread創(chuàng)新應(yīng)用大賽文章匯總

    作者:RTT大賽學(xué)習(xí)經(jīng)驗(yàn)分享 基于 rt-thread studiosdk 開發(fā) adc 的應(yīng)用
    發(fā)表于 10-11 15:13

    基于RT-Thread StudioADC外設(shè)使用方案介紹

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

    如何使用RT-Thread Studio創(chuàng)建支持HPM6750開發(fā)板的RT-Thread項(xiàng)目

    使用RT-Thread Studio進(jìn)行支持HPM6750開發(fā)板的RT-Thread項(xiàng)目開發(fā)前,需要先下載HPM6750所需的幾個(gè)軟件包,具
    發(fā)表于 06-08 11:22

    RT-Thread Studio IDE使用的基礎(chǔ)介紹

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

    RT-Thread Studio 主要亮點(diǎn)功能

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

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘開發(fā)環(huán)境芯片:STM32F103RCT6RT-Thread Studio: V1.0.6(現(xiàn)在已經(jīng)更新到1.1.3,由于本人使用RTT
    發(fā)表于 12-14 18:45 ?14次下載
    <b class='flag-5'>RT-Thread</b> STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread Studio驅(qū)動(dòng)SD卡

    總結(jié)前言硬件平臺(tái):RT-Thread ART-Pi STM32H750XBH6開發(fā)板 H750開發(fā)開發(fā)軟件:RT-Thread
    發(fā)表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Studio</b>驅(qū)動(dòng)SD卡

    RT-Thread全球技術(shù)大會(huì):螢石EZloT SDK對(duì)RT-Thread的支持以及多芯片平臺(tái)管理策略

    RT-Thread全球技術(shù)大會(huì):螢石EZloT SDK對(duì)RT-Thread的支持以及多芯片平臺(tái)管理策略 ? ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 11:55 ?1606次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):螢石EZloT <b class='flag-5'>SDK</b>對(duì)<b class='flag-5'>RT-Thread</b>的支持以及多芯片平臺(tái)管理策略

    rt-thread studio安裝注意點(diǎn)

    - Bluetrum_AB32VG1-ab-prougen ,勾選,安裝資源包,至此 可以在 rt-thread studio 基于 AB32VG1 做開發(fā)了 還需要在 SDK 管理
    的頭像 發(fā)表于 08-21 09:57 ?2395次閱讀
    <b class='flag-5'>rt-thread</b> <b class='flag-5'>studio</b>安裝注意點(diǎn)

    RT-Thread文檔_ADC 設(shè)備

    RT-Thread文檔_ADC 設(shè)備
    發(fā)表于 02-22 18:33 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>ADC</b> 設(shè)備

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個(gè)賬號(hào)登陸,開啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?3497次閱讀
    基于<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Studio</b>學(xué)習(xí)

    使用RT-Thread Studio進(jìn)行智能家居終端的設(shè)計(jì)

    本次方案基于星火一號(hào)開發(fā)開發(fā),使用RT-Thread Studio進(jìn)行工程創(chuàng)建,代碼編輯,RT-Thread配置,調(diào)試配置,程序下載等功能
    的頭像 發(fā)表于 07-28 16:41 ?1711次閱讀
    使用<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Studio</b>進(jìn)行智能家居終端的設(shè)計(jì)

    試用RT-Thread Studio(VSCode)

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

    rt-studio潘多拉開發(fā)板最新rt-thread不能運(yùn)行解決辦法

    rt-studio 上 選擇基于開發(fā)板的項(xiàng)目,選擇潘多拉,rt-thread選擇lasted ,如下圖
    的頭像 發(fā)表于 10-16 14:50 ?1089次閱讀
    <b class='flag-5'>rt-studio</b>潘多拉<b class='flag-5'>開發(fā)</b>板最新<b class='flag-5'>rt-thread</b>不能運(yùn)行解決辦法