【瑞萨RA4L1-SENSOR套件测评】LCD 实时显示 ADC 水位高度
【瑞萨RA4L1-SENSOR套件测评】LCD 水位显示
本文介绍了瑞萨 RA4L1 开发套件通过瑞萨 e2 Studio 灵活软件包(FSP)快速创建工程,ADC 读取水位传感器模拟信号电压,实现 LCD 段码屏实时显示水位高度的项目设计。
简介
在前三篇帖子中,我们介绍了瑞萨 RA4L1 开发套件通过 e2 studio 软件实现 ADC 水位监测计与串口打印、 LCD 显示工程测试、LCD 自定义数字显示 的主要流程。
这里我们将进一步实现 ADC 电压值的 LCD 显示 和 水位高度的 LCD 显示 的项目设计。
项目方案
- 创建 LCD 显示工程;
- 构建 LCD 显示函数库文件,实现自定义数字显示;
- 添加 UART 和 ADC 堆栈,将 A0 模拟通道采集的电压值通过串口打印,并输送至 LCD 显示;
- 连接水位传感器,通过 A0 读取模拟信号电压值,转换为水位高度,并输送至 LCD 显示。
代码
使用 e2 studio 软件和 FSP 快速创建目标工程,配置 UART、 ADC 和 LCD 堆栈,生成工程的基本架构;
添加 LCD 数字显示库文件和主函数代码;
电压 LCD 显示
添加串口打印和ADC电压采集关键代码;
#include "hal_data.h"
#include <stdio.h>
#include "LCD_ShowNum.h"FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTERfsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{if(p_args->event == UART_EVENT_TX_COMPLETE){uart_send_complete_flag = true;}
}
#ifdef __GNUC__ //串口重定向#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else#endifPUTCHAR_PROTOTYPE
{err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);if(FSP_SUCCESS != err) __BKPT();while(uart_send_complete_flag == false){}uart_send_complete_flag = false;return ch;
}int _write(int fd,char *pBuffer,int size)
{for(int i=0;i<size;i++){__io_putchar(*pBuffer++);}return size;
}volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{FSP_PARAMETER_NOT_USED(p_args);scan_complete_flag = true;
}void hal_entry(void)
{/* TODO: add your own code here *//* Open the transfer instance with initial configuration. */err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);assert(FSP_SUCCESS == err);printf("hello world!\n");/* 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);/* Open SLCDC driver */err = R_SLCDC_Open(&g_slcdc0_ctrl, &g_slcdc0_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);/* When using internal boost mode this delay is required to allow the boost circuit to charge. See RA4M1 User's* Manual (R01UH0887EJ0100) 8.2.18 "Segment LCD Source Clock Control Register (SLCDSCKCR)" for details. */R_BSP_SoftwareDelay(5, BSP_DELAY_UNITS_MILLISECONDS);/* Start SLCDC output */err = R_SLCDC_Start(&g_slcdc0_ctrl);assert(FSP_SUCCESS == err);while(1){uint16_t adc_data25 = 0;double a25;/* Enable scan triggering from ELC events. */(void) R_ADC_ScanStart(&g_adc0_ctrl);scan_complete_flag = false;while (!scan_complete_flag){/* Wait for callback to set flag. */}err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_25, &adc_data25);assert(FSP_SUCCESS == err);a25 = (double)(adc_data25/4095.0)*3.3;printf("P510(AN25) = %d, Voltage = %fV\n",adc_data25,a25);uint16_t Num = a25 * 100; // convert to uint16_t styleLCD_ShowNum(Num);R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);LCD_Clear();}#if BSP_TZ_SECURE_BUILDR_BSP_NonSecureEnter();
#endif
}
构建工程并调试、上传固件,即可实现 ADC 电压值的 LCD 显示。
水位 LCD 显示
添加水位高度与电压关系的转换代码
while(1)
{uint16_t adc_data25 = 0;double a25,wl;(void) R_ADC_ScanStart(&g_adc0_ctrl);scan_complete_flag = false;while (!scan_complete_flag){}err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_25, &adc_data25);assert(FSP_SUCCESS == err);a25 = (double)(adc_data25/4095.0)*3.3;wl = (double)(41.774 * a25 - 38.686); // water level definition equationprintf("P510(AN25) = %d, Voltage = %fV, Water Level = %fmm\n",adc_data25,a25,wl);uint16_t Num = wl * 100; // convert to uint16_t styleLCD_ShowNum(Num);R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);LCD_Clear();
}
构建工程并调试、上传固件,即可实现水位高度的 LCD 显示。
效果
这里分别展示了 ADC 电压值和水位高度的 LCD 显示以及串口输出效果。
ADC 电压的 LCD 显示
将 A0
分别连接 3V3
、GND
、悬空,LCD 显示结果分别如下
ADC 电压的串口发送
使用 Type-C 数据线连接开发板的UART接口,运行串口调试助手软件,打开对应的端口即可获得输出本文
水位传感器信号的 LCD 显示
将水位传感器的模拟信号输出引脚与开发板的 A0
排母接口相连,此时 LCD 实时显示其电压值(单位:V 伏特)
动态效果
水位高度的 LCD 显示
电压转换为水位高度(单位:毫米),实现 LCD 显示水位高度值
动态效果
可见 LCD 显示的水位高度值随水位传感器的上下移动不断发生变化,即实现了实时水位监测。
同时串口打印水位
总结
本文介绍了瑞萨 RA4L1 开发套件通过瑞萨 e2 Studio 软件和灵活软件包(FSP)快速创建工程,ADC 读取水位传感器的模拟信号电压,实现 LCD 段码屏实时显示水位高度的项目设计,为瑞萨 RA4L1 系列单片机的快速开发和应用提供了参考。