系统设计总结

系统设计总结报告

许亚 张自洋 赵健 赵斌

一、 关于选题

在拿到实验题目后,进行了仔细的比较和研究,对各种类型题目特点及难易度有较深的理解,再结合小组成员自身特点,特长,初步论证得出选题如下:实现LED点阵屏的多样化显示功能。并通过无线信号的控制来操纵俄罗斯方块。即 无线信号控制LED-俄罗斯方块。 随着课程学习的深入,以及关于选题方面资料的查找,我们发现此选题较困难,但我们坚持做下去。我们从网上获得一些资料,得悉芯片和电路方面的知识,并决定改用51单片机进行我们的设计:

1. 控制信号输入:采用无线发射器,通过主板上接收芯片接收,转换为等价的键盘输入。

2. 控制部分:采用At89C51单片机芯片作为中控,处理键盘信号并控制LED点阵显示。虽然

51单片机性能低,但是方案成熟,应用丰富。

3. 显示部分:使用LED点阵屏幕显示。考虑到设计所需端口较多的问题,为减少资源占用,

使用74HC154译码器作为列驱动芯片。

经验总结:选题要趁早,并且要综合考虑各方面因素,不能凭感性喜好,而要充分掌握各方面材料,重点突出,有目的的选择。

二、 问题及解决问题

我们在整个项目的设计实验中,基本上是按照进度表的进程进行,但其间也遇到了不少没有预料到的问题。

1、 显示错误

实验中发现,输入频率后,显示结果并非自己想要的。经仔细查找,排除其他方面原因后,认为是键盘扫描过程有漏洞。

解决方法:我们找了老师写的程序,与我们自己的对照后发现,果然是程序方面的问题。采用了老师的程序后,问题得到解决。

2、 换档问题

进一步实验发现,频率检测与频率发生功能之间进行转换时,有时会出现错误。我们认定是程序方面的瑕疵。但这个错误比较隐蔽,我们花了大量时间才找到它。

解决方法:改进case语句运算方法。

3、 电路匹配问题

这是买硬件时遇到的问题。由于当时没有考虑周全,买来的计数器电压不匹配,直接影响焊接过程。

解决方法:在每次购买时,一定查数据手册,考虑整个电路的运行参数。

三、心得与建议

1、通过本项目的完成,我们深刻体会到实践的重要性。有很多看似简单的东西,真正运用时,就会有意想不到的问题。这告诉我们平时学东西一定要扎扎实实,并注重与实际联系,否则很容易犯眼高手低的毛病。

2、团队合作的重要性

要顺利完成一个项目,团队成员之间的合作是非常重要的。只有每个人都发挥自己的优势,积极完成自己分配到的任务,并注意与队友的交流,大家才能一直保持较高的热情,在遇到困难时也才能积极地去解决。

3、建议本课程的难度再降低一些。因为大家本身要学许多其他课程,特别对于初学者,要在短时期内学会这么多东西,并能熟练应用,不熬通宵几乎是不可能的。如果能增加学习课时或延长项目完成时间,我觉得大家的收获还会更大。

最后,还是要感谢这门课程的开设,使我们的视野真的得到了很大开阔,学会了很多实用的东西。

 

第二篇:系统设计总结报告

系统设计总结报告

                      *** *** ***

一、            所遇问题及解决方案

问题1:不能正常打开ICCAVR软件。

解决方案:由于用ICCAVR软件要进行破解,需要用到破解软件,因此要想正常运行ICCAVR就要先正确使用其破解软件。

问题2:我们自己写了一个源程序,仅仅有一个主函数,函数体中是空语句。程序如下:

void main()

{

}

用ICCAVR进行编译,结果出现了错误。

解决方案:原因是未将其添加到工程。将源程序添加到创建的工程中即可。

问题3:在ICCAVR中进行编译后,未生成“.cof”文件。

解决方案:原因是未将源程序保存为“.c”格式。只要将其保存为“.c”格式即可。

问题4:向ICCAVR中输入AVR课本上的一些源程序时,发现不能正常编译。

   解决方案:因为课本上的程序是针对CV的,而CV与ICCAVR的源程序不兼容。需要将CV中的程序移植到ICCAVR中才能正常编译。

问题5:第一次使用delay函数,在编译时总是出现错误。

解决方法:经同学提醒才知道这是老师着重指出的一个问题,我们需要自己编写一个延时函数;在cv中使用延时函数是必须在头文件中指出包含此函数所  在的文件。

问题6:相邻焊点很容易短路。

  解决方法:相邻焊点短路是由于焊点过大或形状不规则所致,焊接时应充分利用烙铁使焊锡融成球状,并使焊锡用量尽可能合适。

问题7:焊完后的焊锡表面发钨。

  解决方法:经过几次焊接后,我们发现焊锡发钨的主要原因是焊完一点后,我们急于使它冷却,用嘴去吹。发现这个现象之后,我们采用使其自然冷却的方法解决了这个问题。

问题8:使用后发现电烙铁头有被氧化现象。

  解决方法:合理的使用松香以及用焊锡保护都可以解决这个问题。

问题9:PORTA接LED后,编程PORTA=0x00使LED全亮不成功。

解决方法:仔细学习后发现缺少了PA口工作方式的设定,应加上DDRA=0Xff。

问题10:单个按键程序不工作。

解决方法:仔细分析后我们认为可能出问题的地方有两个,一是按键输入电平的读取有问题,二是按键程序有未知错误。第一个错误我们很快就发现了,是因为我们未设置上拉电阻,这个很容易就解决了;第二个错误我们经过很长时间的仔细检查和多方面调试最终发现是因为调用按键接口程序if(!readkey())应写为if(readkey())。

问题11:八个按键程序调用有问题。

解决方法:在程序调用过程中,反复调用接口函数会出现错误,所以我们将此过程改为一次调用按键程序,并将结果赋值到一个变量中解决了这个问题。

问题12:用实验室为每个实验桌所配备的下载器与电脑的串口、单片机的JTAG接口连接后,下载器的左指示灯不亮,Avrstudio显示找不到串口,无法连接到单片机。

解决:把在其他实验桌上找到的一个新下载器接上后,发现左指示灯正常点亮,Avrstudio不再显示找不到串口,成功连接到电脑。

问题13:我们用ICC创建了一个名为model的工程并写好一个命名为model的用于试验的小程序编译无误,当我们准备使用Avrstudio的在线仿真功能进行试验时,在启动Avrstudio后打开了一个名为model的以.c结尾的文件,但打开后点击Build却得到了很多报错信息,无法下载。找不到这个model的文件。

解决:我们用ICC重新进行编译,仍然显示无错误,但在Avrstudio中打开后点击Build还是得到报错信息。查阅实验讲义后我们知道了应该在Avrstudio中打开以.cof结尾的文件才能去点击Build烧入程序。但我们在model工程所在的文件夹中找不到以.cof结尾的文件又查阅实验讲义后我们才意识到应该把以.c结尾的源文件“add to project”然后再进行编译、连接,才会得到以.cof结尾的文件。我们按照上述方法进行操作后,下载器的右指示灯正常闪亮了一段时间,程序得以成功烧入。

问题14:使用Avrstudio的在线仿真功能时,学生先写了一个关于输出低电平的简单程序,仅包含输出端口的初始化和电平的输出,然后把输出端口与LED连接。但仿真的过程中发现LED未被点亮。

解决:首先,断开单片机端口与LED的连接,把VCC直接逐一接到各LED上,发现的确有几个LED失灵。

但是在将输出端口改到各工作正常的LED上并reset之后,LED仍不能按照预定要求被点亮。

然后,我们又对单片机的I/O端口的操作进行了检查,发现我们对I/O端口的初始化有误,应该从DDRA=0x00改为DDRA=0xFF。修改程序并重新下载后,LED被正常点亮。

问题15:面包板上许多元件引脚需要接地或VCC,接线非常麻烦,且很易出错。

解决方案:在面包板上选择一排孔单独作为地或VCC,焊上插针,并将其引脚焊接起来,接地的引脚用插线直接连接即可。  

问题16:两个焊点距离非常近,用导线接比较麻烦且容易出错。

解决方案:直接用焊锡将两点连起来即可,注意焊锡不要过多。

问题17:焊点之间需要用导线连接,但是把导线与焊点连接起来时容易焊不上,也很容易造成焊点过大,造成短路。

解决方案:将导线插到紧邻焊点的孔中焊上 ,然后用焊锡将两焊点连接起来。

问题18:有一排并列的焊点需要相接,用导线连接的话,容易导致相邻焊点接触,造成短路。

解决方案:尽量是需要连起来的点靠近一点,用焊锡直接相连。如果不允许靠的很近,就用焊锡焊成一导线连接。

问题19:在forward等四个运动函数中,我们原本通过中断,在相应执行时间到达后直接对PORT端口进行一次性电平操作,同时执行对全局变量v的修改以控制下一个中断到达的时间;然后到相应下一个执行时间后直接对PORT端口进行一次性电平操作而不考虑前一个操作,同时执行另一个对全局变量v的修改以控制再下一个中断到达的时间。另外还有一个小程序模块用来通过LED的亮与灭来标示v的当前数值(v在地图中只有两个可能值)但烧入程序后发现单个运动函数LED的亮与灭不符合原定设计。

解决:首先,我们直接用VCC与LED相连来测试LED是否有故障。LED经测无误后,我们使用Avrstudio对这一实验程序进行在线仿真,通过对该程序的单步运行,发现每次执行完一个运动函数后,程序未等到下一个中断到达的时间,随后就直接去执行下一个运动函数,从而直接在此改变了全局变量v的值,因而LED的亮与灭不可能符合原定的设计。于是我们开始设计这个关键的控制语句,最后想出了一个低技术但十分有效的办法——使用while(cx)(//x代表某个数字以区分各控制变量)。用一个cx来控制各个运动函数的执行时间,一个c3,每个运动函数先把总行驶函数对应的cx调为0,之后执行自身,到点执行完毕后会自动把该运动函数对应的cx调为0来停止执行并把总行驶函数对应的cx调为1。之后总行驶函数执行下一个运动函数。目前用暂用c来代表cx.

完成的运动函数如下:void forward(int i)

{int c=1;

v=(wlongth[i] /velocity);( wlongth[i]是路程信息)

PORTB=0xF9;

while(c)

{if(turningnode)

{turningnode=0;

       PORTB=0x00;

c=0;}; }

       c3=1;}

再次下载该程序,发现单个运动函数LED的亮与灭已经符合原定设计,可见使用while(cx)方法成功,该问题解决。

问题20:命令小车按预置地图{3,5,3,5,3,6,3}行驶的过程中,发现右转运动函数void turnright(int i)          

{int c=1;  

       PORTB=0xF5;  

v=wangle[i];

while(c)

{

if(turningnode)

{turningnode=0;

          PORTB=0x00;

c=0;};}

c3=1;}

不能运行。该运动函数被执行期间没有LED点亮。

解决:我们先是怀疑右转运动函数本身有误,但该程序经反复检查证明无误。随后对整个程序进行检查,发现各个行进标识符与各个运动函数的对应关系错位了:本应是3,4,5,6依次对应前后左右运动函数,实际写为4,5,6,7依次对应前后左右运动函数,而预置地图中根本没有7!自然该行进标识符对应的运动函数被执行期间也就不会有LED点亮。当然其他运动函数执行期间也有错误,只是我们数错了LED数,没有发现。于是我们把对应关系改回到3,4,5,6依次对应前后左右运动函数,LED的亮与灭立即符合地图设计。

问题21:在对按键输入部分调试的过程中,因为使用了基于中断的状态机法消抖,有10ms的延时,无法直接对后面的输入模块进行调试。

解决:经老师点拨指导,用设置断点的方法(后来这一方法多次发挥了关键作用)成功跳过这一大关,我们开始对后面的输入模块进行调试。

问题22:在下载整个完整的程序之后,我们先直接按下enter键,然后是run键,以命令小车按预置地图行驶。(试验阶段先用LED代替)但使用Avrstudio进行在线仿真发现,

单步执行函数void mapinput()

{ int j;             

int m=0;

while(d)

……

该程序几乎被直接跳过,while(d)以后的程序根本不执行。

解决:根据while(d)以后的程序不执行,不难想到是d的问题。果然,在全局变量d的定义处:

int v=12;/*计量行进*/   

int d=0;/*用于全局使能mapinput */

int c2=1;

int c3=1;           /*用于全局使能shift长度确定 */

int c4=1;

显然d的初值有误,改为int d=1;再重新下载,仿真,mapinput()函数得以正常执行。

问题23:使用按键输入地图的过程中,连续出现最后按下run键后小车不动的现象,有几次又按了几下run键后小车突然走了,不过所行驶的地图不是“输入的地图。

解决:我们反复对程序进行徒劳的检查后突然是按键工作不稳定的缘故。写入一个直接读按键然后点亮LED的程序后发现果然是按键工作不稳定。于是又加了一个读到按键然后响一下喇叭的程序后,我们在喇叭不响的情况下就再按一下,问题解决。

二、            团队管理的心得体会

   关于团队管理,我们最初阶段简直是一窍不通,认为只要大家都肯下功夫,都努力做,就可以了。所以一开始时我们整天凑在一起,商量怎么做,然后大家一起做,其实等大家商量好后,就成了一个人在那做,但是其他人在旁边看,这样极大的降低了团队的工作效率,而且也会降低其他同学的兴趣和积极性。大家就这样一起做了一个月后发现我们其实完成的任务很有限,而且原来有很大积极性做项目的同学也没有了兴趣和积极性。

我们意识到这个问题后,仔细的分析了出现这个问题的原因,我们认为原因是团队的分工不够明确。之后我们项目系统分成了几个模块,每个同学负责其中的一个或多个模块,提前完成自己任务的同学还可以去帮助其他同学。这样分工之后我们的工作效率有了明显的提升,而且因为有了自己明确的任务,组员的积极性也得到了极大的提高。

还有在团队一起工作讨论时,一定要保持轻松自由的气氛,这样大家的观点可以毫无保留的说出来,轻松幽默的讨论也会激发我们相处很多特别好的想法。

我们的团队工作到现在已经基本结束了,我们为此付出了很多,但也有了很大的收获,知道了团队应如何提高效率,如何讨论效果更好等等,更重要的是在这一段时间中,我们一起努力,一起面对困难,学会了团队合作,更获得了最珍贵的友谊。

三、课程设计的心得体会

 

总的说来,我们的课程设计可以总结为一句话:“山重水复疑无路,柳暗花明又一村。”其过程真可谓一波三折。

从开课选题热情高涨跃跃欲试,到中期困难重重迷茫无助,再到后期迎难而上锲而不舍,最后功夫不有心人最终成功,真是经历的太多太多,但是却从中也收获了很多。

有一段时间,我们遇到了前所未有的困难,几乎没有了继续下去的勇气,但是通过团队的努力,相互帮助,密切配合,终于挺过了难关。我们体会到只有艰苦奋斗,团结一致才能克服困难。这段时间,确实很辛苦,其间不知挥洒了多少汗水,但却很充实。

       我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。只有一个团队的成员紧密地团结在一起,才能更快更好的完成任务。

       通过这次课程设计使我们懂得了理论与实际相结合是很重要的,书本知识固然重要,但我们更要学会将书本知识应用到实际的工作中。实践中才会发现错误,也才能改进,才能达到学习的最终目的。

       另外,我们也体会到了创新与可行性要并重。有时一个看似非常有创新非常好的创意,但却并不一定能应用到实践中。一切都要以实际情况量力而行。

       任何时候都要相信自己,都要全力以赴去做,不要轻言放弃。

四、成员贡献排序

    汤彬:30%;崔龙:25%; 陈云程:25%; 陈广旭:20%;

五、课程改革的建议

这门课程采取“course project”的形式,培养了同学们的创新意识、团队意识以及动手能力。另外也极大地激发了同学们的学习热情,培养了对电子设计的兴趣。

在这里提几点建议:

1、开课比较突然,之前没有任何相应的单片机基础,直接在规定的时间内完成一件作品有点挑战。建议先开一些有关单片机理论的课程,下学期开实验课做东西

 2、项目报告等文档过于繁多,建议精简一些。

 3、实验课的报告过于频繁,一定程度上牵扯了做课程设计的精力。

4、尽早发实验电路板

5、尽量多一些实验指导

相关推荐