ZYNQ-700呼吸灯
参考野火例程
实现呼吸灯即要调整led亮的占比时间,完成视觉上看起来由灭到亮或者由亮到灭的过程。
- 如果主频为50MHz,理论上一秒钟我们可以控制50_000_000次led的亮和灭,肉眼不可能分辨出来每一次亮灭,如果这50M我们设定为间隔一次亮一次,那么看起来led应该是常亮的,且亮度应该只有全亮的一半。通过这两种设定的比较,其实我们已经实现了pwm控制输出比,接下来需要考虑的是如何实现变化的过程。
- 上文所述的亮灭最小控制时间是1s/50_000_000(时间除以主频),下文所述方法把单次亮灭的持续时间设定为1us,也就是1us内灯是全亮或全灭的。
- 将led单次由灭到亮或由亮到灭的变换时间设定为1s。那么接下来就是设定亮的占比。
- 1s=1000ms=1000_000us,也即1s我们可以控制1_000_000次亮灭。
- 我们把1s分为1000个阶段,每个阶段可以控制1000次亮灭,那么只需要让第一个阶段亮1次,第二个阶段亮2次,第三个阶段亮3次·····第999个阶段亮999次,第1000各阶段亮1000次,那么这个过程就完成了从全灭到全亮的变化。也即1s的变化中,第1ms亮1us,第2ms亮2us······
design code:
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2024/04/13 09:31:22
// Design Name:
// Module Name: breath_led
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module breath_led#(parameter CNT_1US = 6'd49,parameter CNT_1MS = 10'd999,parameter CNT_1S = 10'd999
)
(input sys_clk,input sys_rst_n,output reg led
);reg [5:0] cnt_1us;//1us内灯全灭或全亮
reg [9:0] cnt_1ms;//1ms的1000个us,cnt_1s是多少就有多少个us亮
reg [9:0] cnt_1s;//1s内的第几个msreg led_state;//0:从灭到亮;1:从亮到灭,用于计算cnt_1s是加还是减//us计数
always @(posedge sys_clk or negedge sys_rst_n) beginif(sys_rst_n == 1'b0)cnt_1us <= 6'b0;else if(cnt_1us == CNT_1US)cnt_1us <= 6'b0;elsecnt_1us <= cnt_1us + 1'b1;
end
//ms计数
always @(posedge sys_clk or negedge sys_rst_n) beginif(sys_rst_n == 1'b0)cnt_1ms <= 10'b0;else if(cnt_1us == CNT_1US && cnt_1ms == CNT_1MS)//这里注意一定是同时满足才清零,下面的判定条件同理cnt_1ms <= 10'b0;else if(cnt_1us == CNT_1US)cnt_1ms <= cnt_1ms + 1'b1;
end
//s计数
always @(posedge sys_clk or negedge sys_rst_n) beginif(sys_rst_n == 1'b0)cnt_1s <= 10'b0;else if(cnt_1us == CNT_1US && cnt_1ms == CNT_1MS && led_state == 1'b0)cnt_1s <= cnt_1s + 1'b1;else if(cnt_1us == CNT_1US && cnt_1ms == CNT_1MS && led_state == 1'b1)cnt_1s <= cnt_1s - 1'b1;
end
//state转换
always @(posedge sys_clk or negedge sys_rst_n) beginif(sys_rst_n == 1'b0)led_state <= 1'b0;else if(cnt_1us == CNT_1US && cnt_1ms == CNT_1MS && cnt_1s == CNT_1S)led_state <= 1'b1;else if(cnt_1us == 6'b0 && cnt_1ms == 10'b0 && cnt_1s == 10'b0)led_state <= 1'b0;elseled_state <= led_state;
end
//led输出逻辑
always @(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0)led <= 1'b1;else if(cnt_1ms < cnt_1s)//当前是第几个ms则该ms内就有多少个us是亮的led <= 1'b0;elseled <= 1'b1;
endendmodule
simulation code
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2024/04/13 10:17:13
// Design Name:
// Module Name: vtf_breath_led_test
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module vtf_breath_led_test();reg sys_clk;
reg sys_rst_n;
wire led;initial beginsys_clk = 1'b0;sys_rst_n <= 1'b0;
#20sys_rst_n <= 1'b1;
endalways #10 sys_clk <= ~sys_clk;breath_led #(.CNT_1US(1'b1),.CNT_1MS(5'd19),.CNT_1S(5'd19)
) bled(.sys_clk(sys_clk),.sys_rst_n(sys_rst_n),.led(led)
);
endmodule相关文章:
ZYNQ-700呼吸灯
参考野火例程 实现呼吸灯即要调整led亮的占比时间,完成视觉上看起来由灭到亮或者由亮到灭的过程。 如果主频为50MHz,理论上一秒钟我们可以控制50_000_000次led的亮和灭,肉眼不可能分辨出来每一次亮灭,如果这50M我们设定为间隔一…...
UE5学习日记——制作多语言版本游戏,同时初步学习UI制作、多语言化、控制器配置、独立进程测试、打包配置和快速批量翻译等
所有的文本类,无论变量还是控件等都能实现本地化,以此实现不同语言版本。 在这里先将重点注意标注一下: 所有文本类的变量、控件等都可以多语言;本地化控制板中收集、编译时,别忘了编译这一步;支持批量复制…...
电脑重启后word文档空白或打不开,word无法自动修复,如何拯救
最近编辑word文档,写了好几个星期的内容随着电脑重启的一瞬间,灰飞烟灭,让我简直痛不欲生! 好在,天无绝人之路,以下两个方法拯救了地球 第一,普通的文档word自动修复不好使的时候,…...
MVC和MVVM这两种设计模式的区别
一、MVC和MVVM是什么? MVC是Model-View-Controller的简写,Model就是模型,对应后端数据,View就是视图对应用户界面,Controller就是控制器,对应页面的业务逻辑。 MVC的工作机制原理就是,用户操作…...
淘宝app端商品详情数据采集(商品价格,商品库存,商品销量,商品优惠券)
在淘宝App端采集商品详情数据,包括商品价格、库存、销量以及优惠券信息,可以通过多种方式实现。以下是几种常见的方法: 使用淘宝开放平台API: 淘宝开放平台提供了一系列API接口,这些接口允许开发者获取淘宝商品的详细…...
第42篇:随机存取存储器(RAM)模块<一>
Q:本期开始我们分期介绍随机存取存储器(RAM)模块及其设计实现方法。 A:随机存储器RAM,即工作时可以随时从一个指定地址读出数据,也可以随时将数据写入一个指定的存储单元。 DE2-115开发板上的Cyclone IV …...
在Java中实现记录1000万用户连续7天登录的功能,可以使用Redis的Bitmap来跟踪每个用户的登录状态
在Java中实现记录1000万用户连续7天登录的功能,可以使用Redis的Bitmap来跟踪每个用户的登录状态。以下是一个简化的Java示例,使用了Jedis库作为Redis的Java客户端。 首先,确保你已经在项目中添加了Jedis的依赖。如果你使用Maven,…...
深入探讨VIVE OpenXR:为Unity开发者的全面指南
随着虚拟现实(VR)和增强现实(AR)技术的迅速发展,开发者们对于能够简化和优化沉浸式应用开发的工具需求日益增长。HTC Vive 作为行业内的领先品牌,其最新推出的 VIVE OpenXR 插件为Unity开发者提供了一个强大…...
【Altium Designer 20 笔记】PCB线宽与过孔尺寸
电源线:40mil1A(一般翻倍给),地线比电源线粗一点即可;信号线:10-15mil 一、线宽 市电的火线和零线:80-100mil12V /24V 20mil~60mil 5V 20-30mil 3V 20-30mil GND 越宽越好20-30mil普通信号线 10mil-15mil…...
基于java的社区生活超市管理系统
开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclip…...
51单片机入门_江协科技_27~28_OB记录的自学笔记_AT24C02数据存储秒表
27. AT24C02(I2C总线) 27.1. 存储器介绍 27.2. 存储器简化模型介绍,存储原理 27.3. AT24C02介绍 •AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息 •存储介质:E2PROM •通讯接口:I2…...
LeetCode-热题100:169. 多数元素
题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: nums [3,2,3] 输出…...
汽车维修类中译英的英语翻译
近年来,随着全球化的加速和汽车市场的不断扩大,汽车维修领域的交流与合作也日益频繁。汽车维修类中译英的英语翻译在汽车行业中扮演着至关重要的角色。那么,针对汽车维修类翻译,中译英的英语翻译有何技巧? 业内人士指出…...
java中的List,ArrayList和LinkedList集合
List集合: void add(int index, E element) Inserts the specified element at the specified position in this list (optional operation). 在此集合中的指定位置插入指定元素 E remove(int index) Removes the element at the specified position in this list (…...
RESTful API与Web应用程序构建:原理与实践
在现代Web开发中,RESTful API已经成为构建应用程序的核心组件之一。RESTful API不仅为前后端分离的开发模式提供了强有力的支持,还使得不同服务和应用之间的数据交互变得简单高效。本文将深入探讨RESTful API的原理,并展示如何使用它来构建We…...
输了,腾讯golang一面凉了
本月正值4月,是金三银四的找工作的最佳时机。同时竞争也是很大,因为每年这个时候快要毕业的大学生也进去了找工作的潮水中。 今天分享我的一位大佬朋友CC,勇闯腾讯golang的面试经历。 这次面试问题的方向主要集中在计算机基础个网络方面。 下面是主要问到的问题。 第一个…...
如何通过代码签名证书加强安全防护?
在当今数字化时代,安全防护是用户和企业保护其数据和应用程序免受恶意攻击的关键。代码签名证书是一种通过数字签名来验证软件代码来源和完整性的安全工具。通过对软件代码进行数字签名,代码签名证书可以加强安全防护,防止恶意软件和篡改攻击…...
Docker速成:新手变专家!
Docker介绍 容器历史 1、Chroot Jail 就是常见的chroot命令的用法。它在1979年的时候就出现了,被认为是最早的容器化技术之一。它可以把一个进程的文件系统隔离起来。 2、The FreeBSD Jail (监狱)实现了操作系统级别的虚拟化,他…...
numpy/arrayobject.h: No such file or directory
catkin编译时出现,numpy/arrayobject.h: No such file or directory 错误表明编译过程中找不到 NumPy 相关的头文件。这通常是因为环境中的 NumPy 没有被正确配置到包含路径中,或者 NumPy 没有被安装。以下是几个解决步骤来帮助你解决这个问题: 确认 NumPy 已安装 首先,确保…...
前端大文件分块上传、断点续传
文章目录 前端分块上传流程分块上传代码重点1. let start currentChunk * chunkSize;2. let end Math.min(file.size, start chunkSize);3. let chunk file.slice(start, end); 结合断点续传注意事项 大文件上传是一个复杂的过程,尤其是在前端,我们需…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
