当前位置: 首页 > news >正文

RA4M2开发IOT(11)----ADC检测电压

RA4M2开发IOT.11--ADC检测电压

  • 概述
  • 视频教学
  • 样品申请
  • 硬件准备
  • 参考程序
  • ADC配置
  • ADC属性配置
  • R_ADC_Open()函数原型
  • R_ADC_ScanCfg()函数原型
  • R_ADC_ScanStart()函数原型
  • 回调函数adc_callback ()
  • OLED显示

概述

在上一章基础上,项目再接入一个 10 kΩ 线性滑动变阻器 并利用 RA4M2 片上 12-bit ADC 测量滑柄输出电压。

最近在瑞萨RA的课程,需要样片的可以加qun申请:925643491。

视频教学

https://www.bilibili.com/video/BV1TrN2zzEst

RA4M2开发IOT(11)----ADC检测电压

样品申请

https://www.wjx.top/vm/rCrkUrz.aspx

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为R7FA4M2AD3CFL#AA0

在这里插入图片描述
同时添加RA4M2_IOT扩展版。

在这里插入图片描述

参考程序

https://github.com/CoreMaker-lab/RA4M2_IOT

https://gitee.com/CoreMaker/RA4M2_IOT

ADC配置

开IOT板中有个滑动变阻器,需通过跳线帽进行接线,最后由P015进行检测。

在这里插入图片描述

CN14不接,CN13接上面2个排针,CN16短接。

在这里插入图片描述

点击Stacks->New Stack->Driver->Analog -> ADC (r_adc)。

在这里插入图片描述

ADC属性配置

● Name:g_adc0该 ADC 实例的名称,在代码中用于引用此 ADC 设备。
● Unit:0表示使用的是 ADC0 设备(MCU 可能有多个 ADC 单元,如 ADC0、ADC1 等)。
● Resolution:12-Bit选择 ADC 分辨率为 12 位,即转换后的数值范围为 0~4095(2^12 = 4096)。
● Alignment:Right选择数据右对齐,即 ADC 结果存储时,低 12 位有效,高位填充 0。
● Clear after read:On每次读取 ADC 结果后,寄存器会自动清除,防止旧数据干扰新采样。
● Mode:Single Scan单次扫描模式,即每次触发 ADC 转换后,仅采样一次选中的通道。

在这里插入图片描述

● Normal/Group A Trigger:SoftwareADC 触发方式为软件触发,即需要手动调用 API R_ADC_ScanStart() 来启动转换。
● Callback(回调函数):指定回调函数 adc_callback,用于 ADC 转换完成后的事件处理。
● Scan End Interrupt Priority(扫描结束中断优先级):Priority 2ADC 扫描结束中断的优先级设置为 2(数值越小,优先级越高)。
● AN013 → P015 :ADC 通道 13(AN013)映射到 P015 引脚,即 ADC 采样的模拟信号输入在 P015 引脚。

在这里插入图片描述

R_ADC_Open()函数原型

在这里插入图片描述
故可以用R_ADC_Open() 函数进行配置,开启和初始化ADC模式。

R_ADC_ScanCfg()函数原型

在这里插入图片描述

配置ADC扫描参数,赋能ADC通道。在此函数中设置通道特定设置。

R_ADC_ScanStart()函数原型

在这里插入图片描述
启动扫描,若设置为单次扫描,每次扫描完一次都需要重新开启。

在app_peripheral_init函数中添加ADC初始化。

    /* Initializes the module. */err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);/* Enable channels. */err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);assert(FSP_SUCCESS == err);/* Enable scan triggering from ELC events. */(void) R_ADC_ScanStart(&g_adc0_ctrl);

在这里插入图片描述

回调函数adc_callback ()

每次扫描完之后都会进入回调函数中。

volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{//宏将告知编译器回调函数不使用参数 p_args,从而避免编译器发出警告,FSP_PARAMETER_NOT_USED(p_args);scan_complete_flag = true;
}

在这里插入图片描述

OLED显示

在OLED_DrawPage_TUYA函数中,添加对应下面代码,主要在Page-0页显示ADC值和电压值。

        /* ─────────────────── OLED 行标签 ────────────────────────── */OLED_ShowString(0,  48, (u8 *)"ADC:", 16, 1);   // 第  6 行左侧:显示 “ADC:”OLED_ShowString(64, 48, (u8 *)"VOL:", 16, 1);   // 第  6 行偏右:显示 “VOL:”/* ─────────────────── ADC 采样并换算 ─────────────────────── */uint16_t adc_data13 = 0;     // 存放通道 AN013 原始 12-bit 数据double   a13;                // 转换后的电压值 (单位 V)uint32_t t100;               // 小数两位 ×100 的临时变量R_ADC_ScanStart(&g_adc0_ctrl);     /* 启动一次软件触发扫描            */scan_complete_flag = false;        /* 在 ADC 回调中置位                */while (!scan_complete_flag)        /* 等待扫描完成                     */{/* Wait for callback to set flag. */}/* 读取通道 13 (对应 P015) 原始值 --------------------------- */err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_13, &adc_data13);assert(FSP_SUCCESS == err);/* 将 0-4095 映射到 0-3.3 V ---------------------------------- */a13=(double)(adc_data13/4095.0)*3.3;
//        printf("P014(AN12)=%d,voltage=%f\n",adc_data13,a13);/* ─────────────────── OLED 数值显示 ─────────────────────── *//* ADC 原码:4 位十进制,例如 0000–4095                       */OLED_ShowNum(32, 48, adc_data13, 4, 16,1);/* 电压整数位:0–3(3.3 V 情况下最大为 3)                    */OLED_ShowNum (96, 48,(uint32_t)fabs(a13),1,16, 1);/* 小数点 '.'                                                 */OLED_ShowChar (104, 48, '.',16, 1);/* 小数后两位:把电压 ×100 再取低 2 位                         */t100=(uint32_t)(fabs(a13)*100);OLED_ShowNum (112, 48,(uint32_t)t100%100,2,16, 1);

在这里插入图片描述

http://www.lryc.cn/news/573736.html

相关文章:

  • 如何用AI开发完整的小程序<10>—总结
  • webRTC源码配置和编译 + Vscode Intelligence配置
  • 9大策略深度解析MySQL多表JOIN性能优化
  • Python-break、continue与else语句
  • 实战记录:minapp框架下跨机型接口调用顺序引发的兼容性问题
  • 如何仅用AI开发完整的小程序<6>—让AI对视觉效果进行升级
  • AAudio:Android 低延迟音频处理的核心组件
  • WEB3开启 Hardhat 自动验证有什么意义
  • 【设计模式】策略模式 在java中的应用
  • 排序算法-python实现
  • docker私有仓库部署配置学习
  • 深度解析云计算网络架构:VLAN+OVS+Bonding构建高可靠虚拟化平台
  • LINUX 622 SAMBA
  • Macbook M4芯片 MUMU模拟器安装使用burpsuit抓包教程APP
  • SpringCloudGateway(spel)漏洞复现 Spring + Swagger 接口泄露问题
  • 【DataWhale组队学习】AI办公实践与应用
  • 探索尝试-ai编程-01-使用ai编程处理单文件的特定文本内容筛选
  • 核心概念解析:AI、数据挖掘、机器学习与深度学习的关系
  • 从零理解鱼眼相机的标定与矫正(含 OpenCV 代码与原理讲解)
  • mp.set_start_method(“spawn“)
  • 可理解性输入:洗澡习惯
  • 时序数据库IoTDB的架构、安装启动方法与数据模式总结
  • Linux 服务器运维:磁盘管理与网络配置
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十六) -> 配置构建(三)
  • 面试150 加油站
  • 7.4.1_1B树
  • 如何仅用AI开发完整的小程序<5>—让AI制作开始页面
  • 如何用AI开发完整的小程序<8>—让AI制作具体功能
  • Spark教程1:Spark基础介绍
  • C# Quartz.net 定时任务