61011313于超凡
多功能音乐盒
与原计划差异:原计划通过算法,达到能在触摸屏上识别出1到8八个数字来分别代表八个音符,但经过几天的尝试觉得确实难度较大。在网上查找资料后,我尝试了两种方法:
第一种是计算手写输入的曲线斜率,通过快速的扫描计算,将斜率变化与提前建立的数据进行比对分析,从而识别输入的数字。我首先试验的是1和7,效果还可以,在较为清晰的手写笔迹下可以识别出来,不过当我再加入2后,我的算法就经常出现问题,不能很好的识别三个数字。
第二种方法是大量存储数字在触摸屏上显示的点的坐标,通过函数比对,将原数据库与手写输入进行比较识别。这种方法首先要用函数仿真笔迹,预先存储在ROM中。然后进行比较,我尝试了三天,很遗憾没有写出全部八个数字的轨迹函数(通过matlab),所以最后也只能放弃。
迫于时间压力只能更改了方案:在触摸屏的相关区域划分出八个小区域,分别代表八个音符,通过修改触摸屏的例程来识别触摸点的坐标,当在制定区域时便能识别出想要记录的音符,这样做降低了很多的难度,但从另一个方面上却也提高了触摸屏识别的准确度。
可以进一步发挥提高的部分:
手写输入识别部分:在我尝试的两种方法中,我觉得第一种更好一些,但可能由于我的算法问题,没能达到很好的识别效果(另一名同学也遇到了相同的问题,她也改变了自己的课题方案),但我坚信这种方法在理论上时没有问题的,在实用上也是可以实现的,暑假我会利用电设培训的时间再次尝试一下,争取能有所突破。
课程设计体会
这一次的数字系统课程设计,我感觉是我大二下学期众多实验课程里面的一次宝贵的体验。上学期的大系统设计,因为准备不充分,时间安排不合理等问题,最终只是把原理图设计出来了,实际程序调试成果一点都不好,这次的数字系统设计准备时间更充分,而且因为每个人都是不同的题目,所以更有挑战性。
在刚刚开始的一段时间里,首先做的是自学并熟悉硬件描述语言。要体现好的视觉效果,必须对点阵、VGA有很好的应用,而这两样应用还是比较麻烦的,如果不投入较多精力,做出的显示效果就会很粗陋,这就没有意义了。除了视觉,还可以从听觉方面着手。我想到利用FPGA的硬件条件做一个音乐盒。硬件方面没有太多要求,只要一个扬声器就可以了,这样我就可以把重点放到编写代码上。查找了很多书籍资料,发现电子琴这类的资料还是挺多的。但如果仅仅做一个普通的电子琴,则显得简单而没有新意了。所以我想加入触摸屏模块,这样项目变得很有挑战性,做出来的成品也会更加有趣。
基础部分进行较顺利,在中期检查时已经完成弹奏和播放音乐的功能。完成后面部分,显然要比前面部分费力的多。录音需要用到RAM, 以前从没用过,需要自己一步步摸索着学习去用。在编写VHDL代码方面,我最大的体会就是基础必须扎实,对常用语句的用法特性要足够熟悉。很多时候,自己认为逻辑完全没有错,可是仿真出来结果就是不正确,原因就是不够细致严谨,程序中常常存在细微的漏洞,容易使程序陷入死循环。比如说,在VHDL中常用的信号定义与变量定义是我最常出错的地方。信号总是在进程结束后才赋值的,所以在进程中间信号是一个不确定值或上一次进程结束时的值,而变量是在进程中间立即赋值的,但有效范围只在进程之内。我一开始不注意这些细小差别,结果出现了很多差错。
触摸屏模块是我遇到最多问题,耗时最多的一个部分,尝试了两种方法,感觉都还算可行,但具体操作起来确实很有难度,最后由于时间问题不得不放弃,改变了方案,用一种简单的方式完成既定的功能,这也是我这次课程中最大的遗憾,暑假我会花时间重新研究一下这方面的内容,争取有所突破。
经历了完整的设计调试过程,我感觉我的收获还是挺多的。只要认真对待,就一定能够得到有价值的体验,这是最值得高兴的。