【RA-Eco-RA2L1-48PIN】ADC 電壓表與OLED顯示

【RA-Eco-RA2L1-48PIN】ADC 電壓表與OLED顯示

本文介紹了 RA-Eco-RA2L1-48PIN 開發板通過瑞薩 e2 Studio 靈活軟件包(FSP)編程實現 ADC 串口采集電壓和OLED顯示電壓數值的項目設計,包括串口電壓值串口打印、硬件 IIC 通信協議配置、 OLED顯示、效果展示等流程。

項目介紹

  • 使用 FSP 靈活軟件包和 e2 studio 軟件創建工程;
  • 配置串口和 ADC,實現串口printf重定向,打印 ADC 電壓值;
  • 配置硬件 IIC 并實現 OLED 驅動和框架顯示;
  • OLED 顯示 ADC 采集電壓值,實現電壓表項目設計。

驅動 OLED

介紹了通過配置硬件 IIC 實現與 SSD1306 通信進而驅動 OLED 顯示屏的主要流程。

工程創建

  • 打開 e2 studio 軟件,依次點擊 文件 - 新建 - 瑞薩 C/C++ 項目 - Renesas RA

  • 依次進行工程命名,路徑設置,FSP版本,目標開發板選擇,Device 選擇 R7FA2L1AB2DFL ,工具鏈選擇 GNU ARM Embedded ,調試器選擇 J-Link

  • 完成工程創建

IIC 配置

  • 設置目標串口對應的 GPIO 引腳

    • 依次選擇 Pins - Peripherals - Connectivity:IIC - IIC0 - 使能該模式 - 可見 P401 和 P400 引腳分別對應 SDA 和 SCL ;
  • 新建 IIC 通信堆棧

    • Stacks - New Stack - Connectivity - I2C Master (r_iic_master)
  • 選中 iic 堆棧方框,打開屬性標簽,配置 IIC 參數

在這里插入圖片描述

  • 屬性設置: 屬性 - Module g_i2c_master0 I2C Master (r_iic_master)

  • Slave Address 設置為 0x3C

  • 回調函數設置為 IIC_master_callback

  • 點擊 Generate Code 按鈕,生成工程代碼。

漢字取模

  • 下載 并運行 PC2LCD2018 軟件 ;

  • 菜單欄模式設置為 字符模式

  • 點擊工具欄中的 設置 按鈕,配置字模選項:列行式取模、低位在前等,設置完成后點擊 確定 保存配置;

在這里插入圖片描述

  • 在文字輸入選框輸入目標漢字,點擊 生成字模
  • 選中復制或保存字模,代碼添加至 oledfont.h 文件。

工程代碼

驅動基于 SSD1306 的 OLED 屏幕顯示框架。

oled.c 文件、oled.h 文件、oledfont.h 文件下載鏈接:

【免費】Renesas單片機OLED驅動文件資源-CSDN文庫

hal_entry.c 關鍵代碼如下

#include "hal_data.h"
#include "oled.h"FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTERFSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTERi2c_master_event_t i2c_event = I2C_MASTER_EVENT_ABORTED;
void IIC_master_callback(i2c_master_callback_args_t *p_args)
{i2c_event = I2C_MASTER_EVENT_ABORTED;if (NULL != p_args){/* capture callback event for validating the i2c transfer event*/i2c_event = p_args->event;}
}
fsp_err_t err = FSP_SUCCESS;
int  timeout_ms = 100;void hal_entry(void)
{/* TODO: add your own code here *//* Initialize IIC OLED */err = R_IIC_MASTER_Open(&g_i2c_master0_ctrl, &g_i2c_master0_cfg);assert(FSP_SUCCESS == err);OLED_Init();OLED_Clear();OLED_ShowString(0,0,"A D C ",16,1);OLED_ShowCHinese(48,0,0,1);//電OLED_ShowCHinese(64,0,1,1);//壓OLED_ShowCHinese(80,0,2,1);//表OLED_ShowString(4,3,"ADC",16,0);OLED_ShowCHinese(32,3,3,0);//值OLED_ShowChar(48,3,':',16,0);OLED_ShowCHinese(0,6,0,0);//電OLED_ShowCHinese(16,6,1,0);//壓OLED_ShowCHinese(32,6,3,0);//值OLED_ShowChar(48,6,':',16,0);OLED_ShowChar(100,6,'V',16,0);
#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}

保存代碼,重新構建工程。

硬件連接

  • SWDIO -> J-Link (DIO)
  • SWCLK -> J-Link (CLK)
  • P400 -> OLED (SCL)
  • P401 -> OLED (SDA)

工程調試

  • 點擊上方工具欄 小錘子 按鈕(或右鍵工程選擇 調試方式 - 調試配置);
  • 選擇 Renesas GDB Hardware Debugging ,選擇構建的相應的 Flat ;
  • 確保調試器已正確連接,點擊調試按鈕,進入調試模式;
  • 點擊左上角綠色三角形啟動按鈕,再次點擊啟動調試;
  • 打開串口調試助手,配置串口信息,打開串口,可獲得相應的字符串輸出。

效果

首行顯示 A D C 電壓表,后面兩行分別顯示 ADC 值和電壓值及單位。

在這里插入圖片描述

ADC 顯示

在前面工作的基礎上,介紹了結合 ADC 模擬輸入信號的電壓轉換和串口打印與 OLED 顯示,實現了實時讀取 ADC 值和電壓值的電壓表項目。

工程創建

在前面驅動 OLED 顯示框架的基礎上,加入 UART 和 ADC 堆棧配置,并將數值同時輸出至 OLED 顯示和串口,即可實現電壓值的實時顯示。

這里簡述相應的流程。

串口配置
  • 設置目標串口對應的 GPIO 引腳

    • 依次選擇 Pins - Peripherals - Connectivity:SCI - SCI9 對應 P109 (TXD9) 和 P110 (RXD9) 引腳;
  • 新建串口通信堆棧

    • New Stack - Connectivity - UART (r_sci_uart)
  • 選中 uart 堆棧方框,打開屬性標簽,配置串口參數

  • 屬性設置: 屬性 - Module g_uart9 UART (r_sci_uart) - GeneralBaudInterrupts 設置回調函數

ADC 配置
  • 設置 ADC 通道對應的 GPIO 配置

    • 依次選擇 Pins - Peripherals - Analog:ADC - ADC0 - 右側通道選項 AN000 打開對應值 P000 引腳;
  • 新建 ADC 堆棧

    • New Stack - Analog - ADC (r_adc)
  • 屬性配置

    • General 選項下設置 ADC 單次掃描

    • Input 選項下勾選 Channel0,配置中斷與回調函數;

  • ADC 及串口配置完成后,構建工程,確保無誤。

工程代碼

hal_entry.c 關鍵代碼如下

#include "hal_data.h"
#include "oled.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;
}/*------------- IIC 初始化 -------------*/
i2c_master_event_t i2c_event = I2C_MASTER_EVENT_ABORTED;
void IIC_master_callback(i2c_master_callback_args_t *p_args)
{i2c_event = I2C_MASTER_EVENT_ABORTED;if (NULL != p_args){/* capture callback event for validating the i2c transfer event*/i2c_event = p_args->event;}
}int  timeout_ms = 100;/*------------- main -------------*/
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);/* 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);/* Initialize OLED screen */err = R_IIC_MASTER_Open(&g_i2c_master0_ctrl, &g_i2c_master0_cfg);assert(FSP_SUCCESS == err);OLED_Init();OLED_Clear();OLED_ShowString(0,0,"A D C ",16,1);OLED_ShowCHinese(48,0,0,1);//電OLED_ShowCHinese(64,0,1,1);//壓OLED_ShowCHinese(80,0,2,1);//表OLED_ShowString(4,3,"ADC",16,0);OLED_ShowCHinese(32,3,3,0);//值OLED_ShowChar(48,3,':',16,0);OLED_ShowCHinese(0,6,0,0);//電OLED_ShowCHinese(16,6,1,0);//壓OLED_ShowCHinese(32,6,3,0);//值OLED_ShowChar(48,6,':',16,0);OLED_ShowChar(100,6,'V',16,0);while(1){uint16_t adc_data0 = 0;double a0;/* 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_0, &adc_data0);assert(FSP_SUCCESS == err);a0=(double)(adc_data0/4095.0)*3.3;printf("P510(AN0)=%d,voltage=%f\n",adc_data0,a0);OLED_ShowNum(60, 3, adc_data0, 4, 16, 0);OLED_ShowDecimal(60, 6, a0, 1, 2, 16, 0);R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);}
#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}

保存代碼,重新構建工程。

硬件連接

  • SWDIO -> J-Link (DIO)
  • SWCLK -> J-Link (CLK)
  • P109 -> J-Link (RXD)
  • P110 -> J-Link (TXD)
  • P400 -> OLED (SCL)
  • P401 -> OLED (SDA)

效果展示

OLED 實時顯示 ADC 引腳采集的電壓值,刷新間隔為 500 毫秒。

在這里插入圖片描述

動態刷新

在這里插入圖片描述

同時串口打印電壓值

在這里插入圖片描述

總結

本文介紹了 RA-Eco-RA2L1-48PIN 開發板通過瑞薩 e2 Studio 靈活軟件包(FSP)編程實現 ADC 串口采集電壓和OLED顯示電壓數值的ADC電壓表的項目設計。

項目包括串口電壓值串口打印、硬件 IIC 通信協議配置、 OLED顯示、效果展示等流程,為瑞薩單片機串口通信、IIC 通信、OLED 顯示和 ADC 相關產品的開發設計和快速應用提供了參考。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906568.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906568.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906568.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GraphQL在.NET 8中的全面實踐指南

一、GraphQL與.NET 8概述 GraphQL是一種由Facebook開發的API查詢語言&#xff0c;它提供了一種更高效、更靈活的替代REST的方案。與REST不同&#xff0c;GraphQL允許客戶端精確指定需要的數據結構和字段&#xff0c;避免了"過度獲取"或"不足獲取"的問題。…

Elasticsearch 寫入性能優化有哪些常見手段?

Elasticsearch 寫入性能優化常見手段主要有以下 10 個方向&#xff0c;建議根據具體業務場景組合使用&#xff1a; 批量寫入優化 使用_bulk API 批量提交文檔建議每批次 5-15MB 數據量并發執行多個批量請求 索引配置調優 PUT /my_index {"settings": {"inde…

【圖像大模型】基于深度對抗網絡的圖像超分辨率重建技術ESRGAN深度解析

基于深度對抗網絡的圖像超分辨率重建技術ESRGAN深度解析 一、技術背景與核心創新1.1 圖像超分辨率技術演進1.2 核心技術創新對比 二、算法原理深度解析2.1 網絡架構設計2.1.1 RRDB模塊結構 2.2 損失函數設計2.2.1 對抗損失&#xff08;Adversarial Loss&#xff09;2.2.2 感知損…

第八天 搭建車輛狀態監控平臺(Docker+Kubernetes) OTA升級服務開發(差分升級、回滾機制)

前言 在智能網聯汽車快速發展的今天&#xff0c;車輛狀態監控和OTA&#xff08;Over-The-Air&#xff09;升級已成為智能汽車的核心能力。本文將手把手帶你從零開始搭建基于云原生技術的車輛狀態監控平臺&#xff0c;并開發完整的OTA升級服務系統。無論你是剛接觸容器技術的開…

五分鐘學會如何封裝Jsckson工具類

前言&#xff1a;在 Java 開發中&#xff0c;JSON 是一種非常常見的數據格式&#xff0c;而 Jackson 是處理 JSON 的主流庫之一&#xff0c;為了提高代碼的復用性、可維護性&#xff0c;我們通常會將 Jackson 的操作封裝成一個工具類&#xff0c;簡化使用。 ???這里是秋刀魚…

InternLM 論文分類微調實踐(XTuner 版)

1.環境安裝 我創建開發機選擇鏡像為Cuda12.2-conda&#xff0c;選擇GPU為100%A100的資源配置 Conda 管理環境 conda create -n xtuner_101 python3.10 -y conda activate xtuner_101 pip install torch2.4.0cu121 torchvision torchaudio --extra-index-url https://downloa…

軟考中級軟件設計師——設計模式篇

一、設計模式核心分類 設計模式分為 3 大類&#xff0c;共 23 種模式&#xff08;考試常考約 10-15 種&#xff09;&#xff1a; 分類核心模式考試重點創建型模式工廠方法、抽象工廠、單例、生成器、原型單例模式的實現&#xff08;懶漢、餓漢&#xff09;、工廠模式的應用場…

小米2025年校招筆試真題手撕(一)

一、題目 小A每天都要吃a,b兩種面包各一個。而他有n個不同的面包機&#xff0c;不同面包機制作面包的時間各不相同。第i臺面包機制作a面包 需要花費ai的時間&#xff0c;制作b面包則需要花費bi的時間。 為能盡快吃到這兩種面包&#xff0c;小A可以選擇兩個不同的面包機x&…

【微信小程序 + 高德地圖API 】鍵入關鍵字搜索地址,獲取經緯度等

前言 又到熟悉的前言&#xff0c;接到個需求&#xff0c;要引入高德地圖api&#xff0c;我就記錄一下&#xff0c;要是有幫助記得點贊、收藏、關注&#x1f601;。 后續有時間會慢慢完善一些文章&#xff1a;&#xff08;畫餅時間&#xff09; map組件自定義氣泡、mark標記點…

uni-app(2):頁面

1 頁面簡介 uni-app項目中&#xff0c;一個頁面就是一個符合Vue SFC規范的 vue 文件。 在 uni-app js 引擎版中&#xff0c;后綴名是.vue文件或.nvue文件。 這些頁面均全平臺支持&#xff0c;差異在于當 uni-app 發行到App平臺時&#xff0c;.vue文件會使用webview進行渲染&…

Axure實戰:智慧水務管理系統原型設計速覽

本原型通過Axure構建覆蓋生產到服務的全流程交互模型&#xff0c;聚焦"數據驅動智能決策"核心價值&#xff0c;助力水務企業實現管理效率提升與運營成本優化。 系統采用"13N"架構&#xff1a; 1個統一入口&#xff1a;集成單點登錄與角色動態權限&#xff…

十二、Linux實現截屏小工具

系列文章目錄 本系列文章記錄在Linux操作系統下&#xff0c;如何在不依賴QT、GTK等開源GUI庫的情況下&#xff0c;基于x11窗口系統&#xff08;xlib&#xff09;圖形界面應用程序開發。之所以使用x11進行窗口開發&#xff0c;是在開發一個基于duilib跨平臺的界面庫項目&#x…

藍橋杯分享經驗

系列文章目錄 提示&#xff1a;小白先看系列 第一章 藍橋杯的錢白給嗎 文章目錄 系列文章目錄前言一、自我介紹二、經驗講解:1.基礎知識2.進階知識3.個人觀點 三、總結四、后續 前言 第十六屆藍橋杯已經省賽已經結束了&#xff0c;相信很多小伙伴也已經得到自己的成績了。接下…

XC3588H搭載國產麒麟系統可用于政務/社保一體機嗎?

答案是肯定的。 向成電子XC3588H搭載的國產銀河麒麟系統和國產星光麒麟系統已完成適配&#xff0c;適用于政務服務、社保服務一體機的所有外設&#xff0c;運行穩定流暢。 在數字化政務快速發展的今天&#xff0c;政務服務終端的穩定性、安全性與高效性成為提升群眾辦事體驗的關…

如何排查服務器 CPU 溫度過高的問題并解決?

服務器CPU溫度過高是一個常見的問題&#xff0c;可能導致服務器性能下降、系統穩定性問題甚至硬件損壞。有效排查和解決服務器CPU溫度過高的問題對于確保服務器正常運行和延長硬件壽命至關重要。本文將介紹如何排查服務器CPU溫度過高的問題&#xff0c;并提供解決方法&#xff…

物聯網、云計算技術加持,助推樓宇自控系統實現智能高效管理

在建筑智能化發展的進程中&#xff0c;樓宇自控系統作為實現建筑高效管理的核心載體&#xff0c;正面臨著數據海量復雜、設備協同困難、管理響應遲緩等挑戰。而物聯網與云計算技術的深度融合&#xff0c;為樓宇自控系統的升級提供了全新的解決方案&#xff0c;賦予其智能感知、…

uni-app使用大集

1、手動修改頁面標題 uni.setNavigationBarTitle({title: 修改標題 }); 2、單選 不止有 radio-group&#xff0c;還有 uni-data-checkbox 數據選擇器 <!-- html部分 --> <uni-data-checkbox v-model"sex" :localdata"checkboxList"></u…

(6)python爬蟲--selenium

文章目錄 前言一、初識selenium二、安裝selenium2.1 查看chrome版本并禁止chrome自動更新2.1.1 查看chrome版本2.1.2 禁止chrome更新自動更新 2.2 安裝對應版本的驅動程序2.3安裝selenium包 三、selenium關于瀏覽器的使用3.1 創建瀏覽器、設置、打開3.2 打開/關閉網頁及瀏覽器3…

基于OpenCV的人臉微笑檢測實現

文章目錄 引言一、技術原理二、代碼實現2.1 關鍵代碼解析2.1.1 模型加載2.1.2 圖像翻轉2.1.3 人臉檢測 微笑檢測 2.2 顯示效果 三、參數調優建議四、總結 引言 在計算機視覺領域&#xff0c;人臉檢測和表情識別一直是熱門的研究方向。今天我將分享一個使用Python和OpenCV實現…

Java 大視界 -- 基于 Java 的大數據分布式存儲在視頻會議系統海量視頻數據存儲與回放中的應用(263)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…