FPGA实现图像任意位置显示,串口协议控制显示位置,提供工程源码和技术支持

news2024/11/19 19:29:53

目录

  • 1、图像任意位置显示理论基础
  • 2、设计思路和架构
  • 3、OV5640图像采集
  • 4、图像DDR3三帧缓存
  • 5、图像任意位置输出显示
  • 6、串口协议控制显示位置
  • 7、vivado工程介绍
  • 8、上板调试验证
  • 9、福利:工程源码获取

1、图像任意位置显示理论基础

图像任意位置显示指的是在显示屏上的显示,既然是任意位置显示,必须满足以下条件:
1、要求显示的图像分辨率必须比显示背景的分辨率小,如果图像分辨率和显示背景分辨率一样大,就满屏了,还咋任意位置显示呢?
2、要求有能控制图像任意位置显示的方式,比如按键,遥控板之类的,本设计面向实际项目,采用串口控制,串口采用协议帧的方式收发,由帧头、数据、和校验、帧尾组成;关于串口协议帧,请参考我之前写的文章点击查看串口协议帧

2、设计思路和架构

架构如下:
在这里插入图片描述

3、OV5640图像采集

OV5640摄像头配置为1280x720分辨率,RGB565格式,采集后转换为24bit的RGB888;采集部分顶层接口如下:

module uiSensorRGB565(
	input         cmos_clk_i  ,//cmos senseor clock.
	input         rst_n_i     ,//system reset.active low.
	input         cmos_pclk_i ,//input pixel clock.
	input         cmos_href_i ,//input pixel hs signal.
	input         cmos_vsync_i,//input pixel vs signal.
	input [7:0]   cmos_data_i ,//data.
	output        cmos_xclk_o ,//output clock to cmos sensor.
    output [23:0] rgb_o       ,
    output        de_o        ,
    output        vs_o        ,
    output        hs_o        
    );

4、图像DDR3三帧缓存

图像三帧缓存采用FDMA方案,此方案简单粗暴好用,关于FDMA三帧缓存,请参考我之前写的文章点击查看:FDMA三帧缓存方案

5、图像任意位置输出显示

生成VGA时序,1080P分辨率,根据生成的图像x、y坐标来确定图像顶点的位置,VGA时序顶层接口如下:

module video_timing_control(
	input	wire		i_clk     ,	
	input   wire        i_rst_n   , 
	input   wire [10:0] i_start_x ,
	input   wire [10:0] i_start_y ,
	input   wire [10:0] i_disp_h  ,
	input   wire [10:0] i_disp_v  ,	
	input   wire [23:0] i_rgb     ,
	output	reg			o_hs      ,
	output	reg			o_vs      ,
	output	reg			o_de      ,
	output  wire [23:0] o_rgb     ,
	output  wire        o_data_req,
	output  wire [10:0] o_h_dis   ,
	output  wire [10:0] o_v_dis   ,
	output	reg  [10:0]	o_x_pos   ,
	output	reg  [10:0] o_y_pos   
);

6、串口协议控制显示位置

关于串口协议帧,请参考我之前写的文章点击查看串口协议帧
数据段32bit,高16bit为显示图像顶点x坐标位置;
数据段32bit,低16bit为显示图像顶点y坐标位置;

7、vivado工程介绍

开发板:Xilinx Artix7开发板;
开发环境:vivado2019.1;
输入:OV5640摄像头720P;
输出:HDMI视频1080P黑色背景叠加OV5640摄像头图像;
工程BD如下:
在这里插入图片描述
代码架构如下:
在这里插入图片描述
串口接收显示位置切换部分例化如下:

wire o_rx_done;
wire [31:0] o_rx_data;
reg  [31:0] _rx_data;

uart_rx_analysis_top #(
    .CLK_FREQ(100_000_000),  //系统时钟频率
    .UART_BPS(115200     )   //串口波特率
)
u_uart_rx_analysis_top(
	.clk       (ui_clk_100m),
	.rst_n     (pll_resetn ),
	.i_uart_rx (i_uart_rx  ),
	.o_uart_tx (o_uart_tx  ),
	.o_rx_done (o_rx_done  ),
	.o_rx_data (o_rx_data  )
);

always @(posedge ui_clk_100m) begin
	if(~pll_resetn) _rx_data<=32'd0;
	else if(o_rx_done) _rx_data<=o_rx_data;
end

video_timing_control vga(
	.i_clk     (clk_hdmi   ),	
	.i_rst_n   (pll_resetn ), 
	.i_start_x (_rx_data[26:16]), 
	.i_start_y (_rx_data[10: 0]),
	.i_disp_h  (1280),
	.i_disp_v  (720 ),	
	.i_rgb     (i_rgb      ),
	.o_hs      (o_hs       ),
	.o_vs      (o_vs       ),
	.o_de      (o_de       ),
	.o_rgb     (o_rgb      ),
	.o_data_req(o_data_req )
);

可以看到:图像的初始顶点坐标是(0,0);
也就是说上电后图像会默认显示在屏幕左上方;

8、上板调试验证

板子连接如下:
在这里插入图片描述
上电后默认图像显示在屏幕左上方,如下:
在这里插入图片描述
发送串口协议帧:aa bb 01 40 00 b4 f5 cc dd;
图像显示在屏幕正中间,如下:
在这里插入图片描述
发送串口协议帧:aa bb 02 7b 00 00 7d cc dd;
图像显示在屏幕右上方,如下:
在这里插入图片描述
发送串口协议帧:aa bb 00 00 01 63 64 cc dd;
图像显示在屏幕左下方,如下:
在这里插入图片描述
发送串口协议帧:aa bb 02 7b 01 63 e1 cc dd;
图像显示在屏幕右下方,如下:
在这里插入图片描述
视频动态演示如下:

视频动态演示如下

9、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料如下:获取方式:私。
网盘资料如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux新手渣渣上路史

时至2022年&#xff0c;IT行业的迅速发展大家也有目共睹&#xff0c;IT行业在社会的发展中起着举足轻重的作用。其中一角Linux系统&#xff0c;从诞生到开源&#xff0c;再到现在受大众的欢迎&#xff0c;是一个很好的例子。Linux和windows类似&#xff0c;是一个操作系统&…

java 微服务高级之分布式事务 Seata框架 CAP定理 BASE理论 XA模式 AT模式 TCC模式 SAGA模式

分布式事务问题 1.1.本地事务 1.2.分布式事务 一旦有一个失败了&#xff0c;其他两个不知情失败的情况&#xff0c;还是执行并成功 在分布式系统下&#xff0c;一个业务跨越多个服务或数据源&#xff0c;每个服务都是一个分支事务&#xff0c;要保证所有分支事务最终状态一致…

【JavaEE】线程安全的集合类

引言 在Java标准库中&#xff0c;大部分集合类都是线程不安全的。Vector(比ArrayList多了同步化机制就变得线程安全了)&#xff1b;Stack(继承Vector)&#xff1b;Hashtable(只比Hashmap多了线程安全)&#xff1b;以Concurrent开头的集合类&#xff1a;ConcurrentHashMap、Con…

Echarts 用图形纹理来填充颜色(color - pattern)

第006个点击查看专栏目录在上一篇文章中已经讲过 ECharts线性渐变色示例演示&#xff08;2种渐变方式&#xff09;&#xff0c;这个示例的颜色使用纹理来做填充&#xff0c;纹理填充&#xff1a; pattern color:{ //纹理填充 image: patternImg, repeat: ‘repeat’ } 示例效果…

禾川HCQ ModBUS+485主从站调试

硬件&#xff0c;485转usb&#xff0c;如果主站是plc&#xff0c;不需要这个线&#xff0c;我现在主站是电脑&#xff0c;调试用。 HCQ0 禾川控制器。 软件 modbus tools 调试软件&#xff0c;自行下载吧&#xff0c;社区传不上去。 硬件连接时注意交叉连接&#xff0c;HCQ0 A端…

MATLAB 逻辑数组

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

Java⽇志框架学习笔记

目录 1.⽇志概述 1.1 ⽇志是⽤来做什么的&#xff1f; 1.2 为什么要⽤到⽇志框架&#xff1f; 1.3 现有的⽇志框架有哪些&#xff1f; 1.4 ⽇志⻔⾯技术 2.logback 2.1 logback介绍 2.1.1 logback 模块 2.1.2 logback 组件 2.1.3 logback 配置 2.1.4 logback.xml 配…

2023网络爬虫 -- 获取动态数据

一、网站的正常界面1、网址https://movie.douban.com/typerank?type_name%E5%8A%A8%E4%BD%9C%E7%89%87&type5&interval_id100:90&action2、正常的页面二、爬取数据1、源代码import requests头{"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64…

首屏加载速度慢怎么解决?

一、什么是首屏加载 首屏时间&#xff08;First Contentful Paint&#xff09;&#xff0c;指的是浏览器从响应用户输入网址地址&#xff0c;到首屏内容渲染完成的时间&#xff0c;此时整个网页不一定要全部渲染完成&#xff0c;但需要展示当前视窗需要的内容 首屏加载可以说是…

分享156个ASP源码,总有一款适合您

ASP源码 分享156个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 156个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1Mc-zWjUyk9Lx8TXv5cvZTg?pwds2qi 提取码&#x…

Office 365用户登录审核

黑客访问端点设备&#xff0c;以窃取公司特定数据、员工个人数据或任何其他可能对他们有任何用处的有价值的信息。 为了帮助您防止这种攻击&#xff0c;我们编写了一个参数列表&#xff0c;可以帮助您识别异常日志&#xff0c;这通常是攻击的第一个标志。异常登录活动是安全漏洞…

Vue使用ElementUI的确认框进行删除操作(包含前后端代码)

前言 今天做自己项目的时候&#xff0c;有一个删除的业务&#xff0c;正好遇到了确认框&#xff0c;在此纪念一下。 这里我是使用的ElementUI的确认框&#xff01; 首先ElementUI的确认框是这么说明的&#xff1a; 从场景上说&#xff0c;MessageBox 的作用是美化系统自带的 …

Java程序员跳槽,三面全过,面试官:你这样的,我们招不起

程序员小李在沿海城市工作了8年&#xff0c;那里涨幅飞快的房价限制了程序员小李在一线城市安家的想法&#xff0c;再加上突然发生的疫情暴露了远在他乡工作的不便&#xff0c;在种种因素下&#xff0c;程序员小李决定回家工作。 既然已经下定决心告别一线城市回家乡发展&…

数据分析面试-sql练习

SQL汇总1. SQL执行顺序2. 开窗函数3. 经典SQL题3.0 数据准备3.1 ☆ 查询‘01’课程比‘02’课程成绩高的学生3.2 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩3.3 查询在SC表存在成绩的学生信息3.4 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总…

Github每日精选(第96期):微软的机器学习课程ML-For-Beginners

12 周&#xff0c;26 节课&#xff0c;52 道测验&#xff0c;适合所有人的经典机器学习。 添加链接描述 初学者机器学习 - 课程 Microsoft 的 Azure Cloud Advocates 很高兴提供为期 12 周、26 节课的全部关于机器学习的课程。在本课程中&#xff0c;您将了解有时称为经典机器…

【C++】面向对象:继承

&#x1f431;作者&#xff1a;傻响 &#x1f431;专栏&#xff1a;《C语法》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 C中的继承 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.3 继承关系和访问限定符 1.4 继承基类成…

ES6中扩展运算符的9种用法

1. 拷贝数组对象 const years [2018, 2019, 2020, 2021]; const copyYears [...years];console.log(copyYears); // [ 2018, 2019, 2020, 2021 ]扩展运算符拷贝数组&#xff0c;只有第一层是深拷贝&#xff0c;即对一维数组使用扩展运算符拷贝就属于深拷贝 2. 合并数组 先…

c++入门语法

文章目录1. 命名空间1.1 域的介绍1.2 命名空间的定义1.3 命名空间的三种使用方式2. C输入&&输出3. 缺省参数3.1 概念3.2 缺省参数分类4. 函数重载4.1 概念4.2 C支持函数重载的原理--名字修饰5. 引用5.1 概念5.2 特性5.3 常引用5.4 使用场景5.5 指针和引用的区别6. 内联…

OpenCV-PyQT项目实战(3)信号与槽机制

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …

健身大神都戴什么耳机、健身大佬的耳机清单分享

平时&#xff0c;我们总能看到许多运动健身的人群&#xff0c;在锻炼时都佩戴着耳机。但运动耳机的选择&#xff0c;同样是大有学问的。如果佩戴传统的真无线蓝牙耳机&#xff0c;有可能出现佩戴不稳、耳道肿胀等问题&#xff0c;影响运动体验。所以今天我们特意给大家带来几款…