虽然是第一次总结项目经验,但我深知此重要性。近来接到了一个做简易电度表的项目,芯片是AT89C51,用proteus仿真实现。一路颇为曲折,但最后完美地实现了功能。
反思后发现所犯错误主要集中在这两个方面:、
目录
一、对proteus仿真软件的使用错误。
二、解决问题的思路匮乏
一、对proteus仿真软件的使用错误。
1.1、误用共阴/共阳数码管
在proteus中,7SEG-MPX4-CA是4位共阳极数码显示管,7SEG-MPX4-CC是4位共阴极数码显示管,两者的外形完全一样,名字的区别也仅在于尾部“CA”和”CC”的不同。
原来阳极的单词是“anode”,首字母A;阴极的单词是“cathode”,首字母C。
1.2、动态显示方式需要设置数码管的Minimum Trigger Time参数
Minimum Trigger Time顾名思义就是最短触发时间,这个玩意有待研究。我目前把它理解为数码管最快的刷新速度,也就是亮起到熄灭/熄灭到亮起的速度。
这个参数默认为1ms。
1ms显然是不行的,因为左边的数码管根本不亮。
简单测试后我发现,当时间设置
我程序中定时中断进入的间隔是1ms,也就是每1ms切换一次位选,循环选中4位,人眼无法分辨它闪烁的频率,达到多位显示的效果。这个时间和Minimum Trigger Time有什么关系,还没研究过。
1.3、没考虑三极管的开关速度
事实上我到现在都没弄清楚它有什么毛病。
出错的现象:当速度快了(1ms)之后,尽管满足条件,三极管依然不导通;当速度慢(1s)时,三极管正常工作。
当P0→P1→P2→P3……依次给予低电平,动态刷新数码管时,W0、W1、W2宛如死了,没有反应,三极管一直处于截止状态。我只得归因于它的开关速度太慢了。
最后只要把这部分电路去掉,单片机IO口直接接在数码管位选段上,才正常实现了功能。
它是用来当开关管更好的驱动数码管的,电路图如下:(这里我不理解,但是电路都是这样画的,有待研究)
1.4、不熟悉软件使用
说实话,犯这么二的错误真丢脸(困扰了我3小时左右),我说点了“开始仿真”咋没反应呢。
原来开始仿真后默认在暂停状态,需要点击左下角的持续运行按钮。
1.5、“虚焊”问题
有些点表面看上去没毛病,实际上你把器件拉开看看,就能发现实际并没有连上。当明明没有问题却没反应不起效的时候,就该怀疑是这个问题了。
虚焊
1.6、运行时 错问题
有时仿真久了,会 出一个有关单片机8051的错误。这个问题改一下兼容性后就再也没出现。
二、解决问题的思路匮乏
客户仅仅是要proteus的仿真文件,因此给了我一个程序。为了省事,我开始抱着“搭个电路,程序一加就完事”的想法搭建了电路。
结果哪哪都不对,我一直怀疑是程序的问题。最后绝望之下自己写程序,一个模块一个模块地调试,最后做完了项目。
如此简单的项目却让我获得了地狱级的体验感。
回顾这一路我犯的数个愚蠢错误。究其原因,一方面是项目经验不足,另一方面恐怕就是没有运用解决问题的策略。
高数中的“求极限”的思想是不断扩大“已知”来逼近“未知”,化用在项目中就是对模块逐个调试逐步完成项目,像是盖房子,先搭好地基,继续向上盖才有意义。
当这个过程倒过来时,我在此想让自己记住如下的策略:
倘若见楼顶在晃,我们就将房子砍掉一半的高度,看它是否平稳,如果还晃,就再砍掉一半。重复这个过程,找到不晃的高度,从这里向上搭起。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!