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"//包含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

    文章

    345

    浏览量

    30257
  • adc
    adc
    +关注

    关注

    95

    文章

    5646

    浏览量

    539411
  • 开发板
    +关注

    关注

    25

    文章

    4422

    浏览量

    93936
  • SDK
    SDK
    +关注

    关注

    3

    文章

    966

    浏览量

    44682
  • RT-Thread
    +关注

    关注

    31

    文章

    1148

    浏览量

    38865
收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(一、版本开发环境及配合CubeMX)

    RT-Thread 学习记录的第一篇文章,RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio
    的头像 发表于 06-20 00:28 4475次阅读
    <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 4402次阅读
    <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 5357次阅读

    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 2576次阅读
    基于<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 1365次阅读
    使用<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 561次阅读
    试用<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 617次阅读
    <b class='flag-5'>rt-studio</b>潘多拉<b class='flag-5'>开发</b>板最新<b class='flag-5'>rt-thread</b>不能运行解决办法