寒假在家一起练项目4
寒假在家非常有幸参加到电子森林的“寒假一起练”FPGA的项目,这个帖子主要分享项目实现的功能以及主要功能源码的介绍。
标签
FPGA
可乐可口
更新2021-02-28
1095

项目要求:

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程序的编写,逐步实现了全部的功能。如图三,最终结果图。

FmnflhSS13GKGYNaCxWt9OsQ1QTw

图三 最终结果图

附件下载
top_impl1.jed
团队介绍
团队采用分工的方式进行开发本次在家练习的FPGA的项目,我主要负责驱动程序部分的开发,宋志硕主要负责项目的规划统筹、QT上位机的开发;田鹏飞同学主要负责应用逻辑部分的编写。
团队成员
宋志硕
杭州涂鸦智能科技有限公司 嵌入式网络工程师
田鹏飞
哈尔滨工程学院 水声学院
徐加乐
黑龙江大学 电子工程学院
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号