板级调试小助手(3)基于PYNQ的OLED视频显示
一、前言
在之前的文章中介绍了《板级调试小助手》的系统结构和DDS自定义外设的搭建。这篇文章主要介绍一下如何在PYNQ中驱动平时长剑的OLED12864显示屏,并显示BadApple(毕竟有屏幕的地方就要有BadApple)。效果如下:
BadApple
本项目完全开源,开源地址请查看《板级调试小助手(1)系统结构和原理》文章最后
二、OLED驱动设计
OLED显示屏使用了IIC协议,为了能方便PS端控制,我们需要将其设计成自动读取BRAM中的数据,并显示,OLED驱动的顶层如下所示。
module oled_top #
(parameter SLAVE_ADDR = 7'b0111100, //从机地址parameter CLK_FREQ = 26'd100_000_000, //系统时钟(Hz)parameter I2C_FREQ = 19'd350_000, //IIC频率parameter BIT_CTRL = 1'b0 //字地址位控制(16b/8b)
)
(input sysClk, //系统时钟input sysRst, //全局复位//RAM数据接口output [9:0]rd_addr, //读RAM地址input [7:0]ram_rd_data, //读RAM数据//IIC接口output oled_scl,inout oled_sda
);wire i2c_dir_clk ;
wire i2c_exec ;
wire [15:0] i2c_data ;
wire i2c_done ;i2c_dri #(.SLAVE_ADDR (SLAVE_ADDR ) ,.CLK_FREQ (CLK_FREQ ) , .I2C_FREQ (I2C_FREQ )
)
i2c_dri_u (//global clock.clk (sysClk ), .rst_n (~sysRst ), .i2c_exec (i2c_exec ), .bit_ctrl (BIT_CTRL ), .i2c_rh_wl (1'b0 ), .i2c_addr (i2c_data[15:8]), .i2c_data_w (i2c_data[7:0] ), .i2c_data_r ( ), .i2c_done (i2c_done ), .scl (oled_scl ), .sda (oled_sda ), .dri_clk (i2c_dir_clk ) );oled_ctrl oled_ctrl_u(.I_sys_clk (i2c_dir_clk),.I_reset_n (~sysRst ),.I_i2c_done (i2c_done ),.O_i2c_data (i2c_data ),.O_i2c_exec (i2c_exec ),.O_rd_addr (rd_addr ),.I_ram_rd_data(ram_rd_data)
);endmodule
可以看到顶层代码中,除了IIC接口,也具有一个RAM数据读接口。 i2c_dri 模块是OLED驱动模块,oled_ctrl模块用于读取BRAM数据写入OLED的控制模块,具体代码这里就不展示了,需要请移步第一章最后的开源地址。
三、PS端的python代码处理
PL端设计好之后PS端就很好设计的,主要分为一下几个步骤:
1、调用OpenCV库读取.mp4文件,逐帧解析;
2、将解析后的视频帧转换成OLED可以显示的数据;
3、将数据通过AXI总线写入BRAM
PS端代码如下:
#显示开机动画
video_path = '123.mp4';
cap = cv2.VideoCapture(video_path); #创建VideoCapture对象
while True:ret, frame = cap.read() #读一帧数据# 如果正确读取帧,ret为Trueif not ret:print("Error: No more frames to read.")breakgray_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)_, binary_image = cv2.threshold(gray_image, 170, 255, cv2.THRESH_BINARY)#变成numpy可以处理的数组numpy_image = np.array(binary_image)#获取转换后的数据re_Addr,re_Data = oled.oled_show(numpy_image)#写入oled显示缓存for i in range(0, 256):bram_ip.write(re_Addr[i],re_Data[i])
相关文章:
板级调试小助手(3)基于PYNQ的OLED视频显示
一、前言 在之前的文章中介绍了《板级调试小助手》的系统结构和DDS自定义外设的搭建。这篇文章主要介绍一下如何在PYNQ中驱动平时长剑的OLED12864显示屏,并显示BadApple(毕竟有屏幕的地方就要有BadApple)。效果如下: BadApple 本项…...
git批量删除本地包含某字符串的特定分支
git批量删除本地包含某字符串的特定分支 git branch -a | grep 分支中包含的字符串 | xargs git branch -D git删除本地分支_git查看删除本地分支-CSDN博客文章浏览阅读989次。git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字,然后删…...
Android中RecyclerView使用详解(一)
目录 概述优点列表布局RecyclerView一、创建RecyclerView并且在布局中绑定二、实现RecyclerView单个item的布局三、给RecyclerView写一个对应的适配器Adapter1.创建自定义的ViewHolder2.继承Adapter,泛型使用我们自定义的ViewHolder3.重写Adapter的三个方法onCreate…...
坑3.上传图片(阿里云空间,oss验证)(未验证)
笔记 20240710 未验证,现在还没有阿里云空间,等买个sit环境就可以验证一下。 前端 页面 <!--页面--> <el-form-item label"优惠券图片" prop"couponImg"><single-upload v-model"dataForm.couponImg"&g…...
注册登录后上传文件到本地数据库项目
在上一篇的基础上我有添加了登录注册功能文件上传 更新一下代码添加登录注册功能 app.js // app.js const express require(express); const bodyParser require(body-parser); const cors require(cors); const db require(./models/db); const User require(./models…...
【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十三)-更换无人机控制器
引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…...
react 组件通信 —— 父子传值 【 函数式/类式 】
1、函数式组件通信 父子间通信 —— 父传子 父组件 export default function father() {return (<div style{{width:400px,height:200px,background:pink,marginLeft:500px}}>我是父组件<hr /><Son name{"韩小刀"}/></div>) } 子组件 ex…...
【SpringBoot】95、SpringBoot中使用MyBatis-Plus实现自动加密存储和查询自动解密
有的业务需要将敏感数据加密存储到 DB,如果我们每个都手动去加密,再设值,再保存 DB,不仅麻烦,还对开发者不友好,在 MyBatis-Plus 中我们可以使用 BaseTypeHandler 来解决这个问题 1、新增 TypeHandler import com.baomidou.mybatisplus.core.toolkit.AES; import com.b…...
[数仓]十二、离线数仓(Atlas元数据管理)
第1章 Atlas入门 1.1 Atlas概述 Apache Atlas为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能。 Atlas的具体功能如下: 元数据分类 支持对元数据进行分类管理,例…...
机器学习——决策树(笔记)
目录 一、认识决策树 1. 介绍 2. 决策树生成过程 二、sklearn中的决策树 1. tree.DecisionTreeClassifier(分类树) (1)模型基本参数 (2)模型属性 (3)接口 2. tree.Decision…...
翁恺-C语言程序设计-08-1. 求一批整数中出现最多的个位数字
08-1. 求一批整数中出现最多的个位数字 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中…...
ROM修改进阶教程------深度解析小米设备锁机型不解锁bl 刷写特殊类固件的步骤
在玩机过程中会遇到很多自己机型忘记密码或者手机号不用导致机型出现账号锁。无法正常使用。那么此类机型如果无法正常售后解锁。只能通过第三方渠道。例如在早期小米机型有强解bl锁资源。然后刷入完美解锁包。这种可以登陆新账号。但后期新机型只能通过修改分区来屏蔽原设备锁…...
论文翻译 | LEAST-TO-MOST: 从最少到最多的提示使大型语言模型中的复杂推理成为可能
摘要 思维链提示(Chain-of-thought prompting)在多种自然语言推理任务上展现了卓越的性能。然而,在需要解决的问题比提示中展示的示例更难的任务上,它的表现往往不佳。为了克服从简单到困难的泛化挑战,我们提出了一种新…...
【区块链 + 智慧政务】都江堰区块链公共服务应用平台 | FISCO BCOS应用案例
都江堰区块链公共服务应用平台是四川开源观科技有限公司运用 FISCO BCOS 区块链技术为都江堰市建设的市级 区块链节点平台,该平台上线运营一年以来已在政务服务、社区养老和慈善公益领域落地 3 个应用,上链数据超 过 30 万条。 区块链 政务服务应用&am…...
Python从0到100(三十九):数据提取之正则(文末免费送书)
前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...
redis redisson(仅供自己参考)
redis 通过setnx实现的分布式锁有问题 如图: 解决的新的工具为(闪亮登场):redisson redisson可重入锁的原理 实现语言lua: 加锁实现脚本语言: 释放锁的脚本语言: 加锁的lua -- 首先判断这个锁…...
【C语言初阶】探索编程基础:深入理解分支与循环语句的奥秘
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言入门 🌹🌹期待您的关注 🌹🌹 ❀分支与循环语句 📒1.…...
ERP基础知识
ERP 一、概述 ERP是Event-related Potentials的简称。外加一种特定的刺激,作用于感觉系统或脑 的某一部位,在给予刺激或撤销刺激时,或和当某种心理因素出现时在脑区所产生的电位变化,成为事件相关电位,是一种特殊…...
C++是否可以使用.获取union、struct中的成员变量的地址
C可以使用.获取union、struct中的成员变量的地址 示例代码如下所示 #include <stdio.h> #include <stdint.h>struct u128 { uint64_t v64; uint64_t v0; };int main() {union { unsigned __int128 ui; struct u128 s; } union_temp_m128;void* p1 &union_te…...
【前端】包管理器:npm、Yarn 和 pnpm 的全面比较
前端开发中的包管理器:npm、Yarn 和 pnpm 的全面比较 在现代前端开发中,包管理器是开发者必不可少的工具。它们不仅能帮我们管理项目的依赖,还能极大地提高开发效率。本文将详细介绍三种主流的前端包管理器:npm、Yarn 和 pnpm&am…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
