野火A7学习第十一次(驱动无源蜂鸣器)
1 理论学习
2 实战演练
任务:驱动do ra mi fa … 的发声,每个音调0.5s,占空比50%
2.1 设计规划
2.2 波形绘制
在duo一个周期内的波形变化,计数值小于占空比计数值的时候为低电平,大于占空比的时候为高电平。
2.3 程序编写与编译
module beep
#(parameter CNT_MAX = 25'd24_999_999;parameter DO = 18'd190839, parameter RE = 18'd170067,parameter MI = 18'd151514,parameter FA = 18'd43265,parameter SO = 18'd127550,parameter LA = 18'd113635,parameter XI = 18'd101213
)
(input wire sys_clk,inpot wire sys_rst_n,output reg beep
);reg [24:0] cnt;
// 最大值为6
reg [2:0] cnt_500ms;reg [17:0] freq_cnt;
reg [17:0] freq_data;wire [17:0] duty_data;always@(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)cnt <= 25'd0;else if(cnt == CNT_MAX)cnt <= 25'd0;elsecnt <= cnt + 1'b1;always@(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)cnt_500ms <= 3'd0;else if((cnt_500ms == 3'd6) && (cnt == CNT_MAX))cnt_500ms <= 3'd0;else if(cnt == CNT_MAX)cnt_500ms <= cnt_500ms + 1'b1;elsecnt_500ms <= cnt_500ms;always@(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)freq_cnt <= 18'd0;else if(freq_cnt == freq_data || cnt == CNT_MAX)freq_cnt <= 18'd0;elsefreq_cnt <= freq_cnt + 1'b1;always@(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)freq_data <= DO;else case(cnt_500ms)3'd0:freq_data <= DO;3'd1:freq_data <= RE;3'd0:freq_data <= MI;3'd1:freq_data <= FA;3'd0:freq_data <= SO;3'd1:freq_data <= LA;3'd0:freq_data <= XI;default:3'd1:freq_data <= DO;endcase // 数据左移一位 表示乘以2 右移一位表示 除以2
assign duty_data = freq_data >> 1;always@(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)beep <= 1'b0;else if(freq_cnt >= duty_data)beep <= 1'b1;elsebeep <= 1'b0;endmodule
tb beep 文件
`timescale 1ns/1nsmodule tb_beep();reg sys_clk;
reg sys_rst_n;initial beginsys_clk = 1'b1;sys_rst_n <= 1'b0;#20sys_rst_n <= 1'b1;
end always #10 sys_clk = ~sys_clk;// 实例化
beep beep_inst
#( // 这个数据可以改小一点parameter CNT_MAX = 25'd24_999_999;parameter DO = 18'd190839, parameter RE = 18'd170067,parameter MI = 18'd151514,parameter FA = 18'd43265,parameter SO = 18'd127550,parameter LA = 18'd113635,parameter XI = 18'd101213
)
(.sys_clk(sys_clk),.sys_rst_n(sys_rst_n),.beep(beep)
);endmodule
2.4 仿真和波形对比
2.5 绑定管教和上板验证
野火A7学习第十一次(驱动无源蜂鸣器)相关推荐
- 【春节歌曲回味 | STM32小音乐盒 】PWM+定时器驱动无源蜂鸣器(STM32 HAL库)
l STM32通过PWM与定时器方式控制无源蜂鸣器鸣响 l STM32小音乐盒,歌曲进度条图形显示与百分比显示,歌曲切换 l 编程使用STM32 HAL库 l IIC OLED界面编程,动画实 ...
- 51单片机驱动无源蜂鸣器
在学习过程中遇到如下例题:8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去. 流水灯的程序相对我个人来说比较简单,但是蜂鸣器有些难度,正 ...
- 树莓派 python 蜂鸣器_树莓派3b强行驱动无源蜂鸣器
有源蜂鸣器:自带高频振荡,直接上电并加信号即可蜂鸣,一般引线有3根 无源蜂鸣器:不带高频振荡,需要外加震荡才能工作,一般引线有两根. 如果你想给树莓派加上个蜂鸣器但是又不想购买,从贺卡或闹钟拆下的蜂鸣 ...
- 野火A7学习第十次(状态机相关)
1 状态机理论分析 FPGA是并行执行的,如果需要处理前后顺序的事件怎么办?就需要引入我们的状态机了. 共同点,状态的跳转只和输入有关.Moore型状态机,最后的输出只和当前的状态有关与输入无关.Me ...
- 【小月电子】安路国产FPGA开发板系统学习教程-LESSON10无源蜂鸣器驱动
无源蜂鸣器驱动实验例程讲解 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤.比如非常简单的项目,我们可以省去虚线框里面的步骤,但是我们的入 ...
- 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON10无源蜂鸣器驱动
无源蜂鸣器驱动实验例程讲解 若要观看该博客配套的视频教程,可点击此链接 开发板实物图 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤.比如 ...
- 如何让无源蜂鸣器响起来
今天来讲解如何让一个无源蜂鸣器响起来. 首先我们要了解蜂鸣器的种类,蜂鸣器分为无源和有源两种. 那么何为有源,何为无源? 有源在这里指的是: 蜂鸣器内部包含振荡电路. 无源指的是:蜂鸣器内部不包含振荡 ...
- stm32无源蜂鸣器定时器_STM32无源蜂鸣器播放音乐
1.STM32产生PWM波驱动无源蜂鸣器使其发声 1)查看原理图,找到对应引脚(我这里时PA1) 2)打开CubeMax,输入自己芯片的类型确定后,配置好系统时钟RCC,我这里是80Mhz,找到相应引 ...
- 如何利用无源蜂鸣器制作音乐
首先我们需要知道一个音调的发出是根据不同的高低频率来的,根据一个周期进行发声的. 而驱动无源蜂鸣器需要给他提供频率以及高低电平才能有效地进行音调的改变.下面就是一个示例,可以作为开音乐或者完成其他事项 ...
最新文章
- RunLoop的学习
- 对于我的博客的相关说明
- 798B. Mike and strings
- 清华学霸直博简历火了:CPU、操作系统、编译器全自己写
- 盘点2019年5G:商用大戏开唱 三大问题亟待解决
- oracle alert.log查找,oracle alert.log位置
- 图像局部特征(二)--Harris角点检测子
- Basic INFO: InstallShield 2012安装过程
- Linux IPC(Inter-Process Communication,进程间通信)之管道学习
- wince 错误 Error: failed PB timebomb check
- Notepad++无法修改中文解决办法
- 浏览器网页怎么实现文档、小票自动静默打印?【深度】
- 邮件系统安装配置(postfix + dovecot)
- JavaSE_day12:集合,泛型,增强for循环特性
- [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版javascript
- 利用jsp写输入表单制作简历
- 规范化git commit信息
- javaSE_中文转拼音
- 不知道;不知道;我知道了;那我也…
- 深入理解JVM—满足什么条件的对象才会进入老年代?