项目需求
-
实现一个可定时时钟的功能,用小脚丫FPGA核心模块的4个按键设置当前的时间,OLED显示数字钟的当前时间,精确到分钟即可,到整点的时候比如8:00,蜂鸣器报警,播放音频信号,最长可持续30秒;
-
实现温度计的功能,小脚丫通过板上的温度传感器实时测量环境温度,并同时间一起显示在OLED的屏幕上;
-
定时时钟整点报警的同时,将温度信息通过UART传递到电脑上,电脑上能够显示当前板子上的温度信息(任何显示形式都可以),要与OLED显示的温度值一致;
-
PC收到报警的温度信号以后,将一段音频文件(自己制作,持续10秒钟左右)通过UART发送给小脚丫FPGA,蜂鸣器播放收到的这段音频文件,OLED屏幕上显示的时间信息和温度信息都停住不再更新;
-
音频文件播放完毕,OLED开始更新时间信息和当前的温度信息
实现的思路
-
通过模块组件例化来实现 OLED 、 UART 与 FPGA 之间的连接。
-
60 秒计时直接采用时钟分频的方式,不使用求余和整除的操作,节省部分空间。
-
流水灯通过移位的方式,一组寄存器直接控制两个,无需多余算术操作,尽量降低空间占用。
-
发送音频使用类似于 MIDI 的思路,即发送音符。同时定义了音乐开始幻数与结束幻数。播放时长由上位机延时实现。
-
报警时采用音乐生成模块来生成一段任意长度的音乐,然后并发使用 PWM 模块来播放音乐。
完成的功能
-
实现一个可定时时钟的功能,用小脚丫FPGA核心模块的4个按键设置当前的时间,OLED显示数字钟的当前时间,精确到分钟即可,到整点的时候比如8:00,蜂鸣器报警,播放音频信号,最长可持续30秒;
-
实现温度计的功能,小脚丫通过板上的温度传感器实时测量环境温度,并同时间一起显示在OLED的屏幕上;
-
定时时钟整点报警的同时,将温度信息通过UART传递到电脑上,电脑上能够显示当前板子上的温度信息(任何显示形式都可以),要与OLED显示的温度值一致;
-
PC收到报警的温度信号以后,将一段音频文件(自己制作,持续10秒钟左右)通过UART发送给小脚丫FPGA,蜂鸣器播放收到的这段音频文件,OLED屏幕上显示的时间信息和温度信息都停住不再更新;
-
音频文件播放完毕,OLED开始更新时间信息和当前的温度信息
-
红色 LED 流水灯从上往下依次亮起。两组彩色 RGB 灯间隔亮起。
-
四个按键分别实现了复位,时钟归零、递减、递增等操作。
遇到的主要难题
-
音符间的间隔较难把握。真实乐器中音量大小会自动衰减,而 PWM 驱动中的音量保持一致。所以需要手动加入一段空白来分割停顿。
-
有时占用的资源量过大,导致无法成功编译。使用了一些优化手段后可以把占用降低到可接受的范围内。
- 有时候编译会遇到时序错误,修正代码和配置后解决。
未来的计划建议
-
实现 MIDI 的基本功能,增加 PWM 驱动的音量调节功能。
-
尝试使用 ADC 模块实现更多的操作。
使用资源及代码
演示图片