项目要求:
1、实现一个可以定时的时钟的功能,用小脚丫FPGA核心模块的四个按键设置当前时间,OLED显示数字时钟的当前时间,精确到分钟即可,到整点的时候比如8 :00,蜂鸣器报警,播放音频信号,最长持续30S。
2、实现温度计的功能,小脚丫通过开发板上的温度传感器实时测量环境温度,并同时间一起显示在OLED屏幕上。
3、定时时钟整点报警的同时,将温度信息通过串口UART传递到电脑上,电脑能够显示当前板子上的温度信息(任何形式都可以),要与OLED显示的温度相一致。
4、PC收到报警的温度信号以后,将一段音频(自己制作,持续十秒钟左右)通过UART发送给小脚丫FPGA,蜂鸣器播放收到的音频文件,OLED屏幕上显示的时间信息和温度信息都停止更新。
5、音频文件播放完毕,OLED开始更新时间和当前的温度的信息。
由于初次接触FPGA,对该项目进行详细的思考和分析。发现为了实现这个FPGA项目,首先针对我这个刚接触FPGA的小白,首先要熟悉verilog的语法格式,一些特点;其次就是自己学习时钟分频、按键消抖、SPI协议、单总线、异步串口、蜂鸣器驱动等在FPGA上用verilog的实现。
接着,将本次项目进行分析,我发现本次项目起始可以分成3个小项目,首先第1个项目是实现一个可定时可设定的时钟,当这个时钟到达我们设定的时间之后,会播放音乐并且把温度信息传给电脑;第二个就是实时检测环境温度,之后显示在OLED上;第3个是,FPGA内部检测温度,如果温度超过上限,就由PC发送报警信号,之后由PC发送音频数据给FPGA,在蜂鸣器收到音频的时候不在更新时间信息和温度,当音频文件播放完之后才会更新OLED屏幕上的信息。
之后就是一步一步的编写程序,在刚入手FPGA的时候,我还是处于并没有接触过的阶段,仅仅是看过一些verilog的语法,在网上做过一些加法器,选择器的小模块编程题。当然就是因为不了解FPGA所以才更锻炼我们编写程序和搜集资料的能力。
最后,就是把实现的功能程序,使用模块进行封装,编写程序。
因为OLED显示在本项目中发挥的作用比较大,所以决定先调试OLED,之后发现电子森林有驱动彩色液晶屏TFT-LCD的程序,就直接拿过来修改,中间因为没玩过OLED还对操作指令有些迷茫,甚至在使用OLED的页地址模式的时候,忘记起始地址的高四位和低四位是分开写的,导致OLED显示一直不正常。
在这个项目的开发过程中,我和本团队其他两个成员,遇到了许许多多的问题。而最大的问题就是在在编写OLED字库的时候,为了更加清楚的可以看到OLED显示的信息,我们就打算把字体大小设定为12*32,在建立字体库的时候,资源的利用与就倾向于100;如图一所示。后来参考电子森岭的0.91寸的OLED程序,完成了OLED驱动程序的开发,如图二所示。
图一 资源占用超
图二 参考电子森林OLED驱动程序
然后就是思维逻辑上,我也是和本科编写单片机的逻辑类似,是一条直线,总是很不适应verilog程序的编写,同时还不适应在不是同一个always块中,变量只能判断,可以作为右值,但是却不能改变得事实。
随着编写程序的增多,期间也看过很多优秀的程序,让我逐渐适应了verilog程序的编写,逐步实现了全部的功能。如图三,最终结果图。
图三 最终结果图