amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 6008|回复: 45

MCU特种兵入门考核题

  [复制链接]
发表于 2013-12-14 22:36:45 | 显示全部楼层 |阅读模式
几个简单的练手题目,考察是否可以进入特种兵训练。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-12-14 23:04:01 | 显示全部楼层
我来给马老师顶一顶!
发表于 2013-12-14 23:09:08 | 显示全部楼层
看一下。。。。
发表于 2013-12-14 23:10:09 | 显示全部楼层
本帖最后由 error_dan 于 2013-12-15 00:23 编辑

我来献个丑~只有思路木有代码~
设计题一
1:这个不难,关键在于方波的频率跨度比较大,从1M到10Hz跨度达到了100K,STC有PCA,16bit分辨率,时基2M,直出前面四路压力不大,正常比较输出搞定.后面两路构造近似1ms时基中断,计数翻转IO搞定.
2:正常向:外部中断(双向)触发检测起始(家里电脑木有visio就不画流程图了),关闭中断防止重复触发,开延时定时器,延时定时器溢出复检输入IO,并处理输出.(其实电平触发就行了吧~
   偷懒向:上面已经构造了1ms时基了,按键这种长任务ms级别的复检应该够了~中断里面检测输入IO放置标志位,前台程序跑输出就行了~
设计题二
(突然发现掉坑里了,不是纯软件啊...
这个没怎么看明白...考试的规矩是写了就有分对吧(已经开始丧失了...
思路:以音符1为例,近似认为是输出"频率"个以"周期"为周期的方波,可以通过设置定时器的计数器溢出数字控制周期,中断计数获取个数.按照题目里面这段谱子把定时器的溢出时间和中断计数的个数编码进去然后跑起就可以了(下面带*号的俩参数没看懂干嘛的...音乐老师死的早???

设计题三
按键检测还是老办法,充分利用单片机的中断资源并且合理安排时间,把一个需要长时间采样的问题抽象成采样若干点并处理状态的模式,此处不重复.
显示是一个比较麻烦的问题,这里首先分离逻辑层和驱动层.

1)逻辑层负责数据填充,根据不同的任务填充不同的数据.这里需要算一下,16*16 = 256bit也就是32字节(没看明白"16*16单双点阵"到底是单色还是双色的,偷懒当单色的),逻辑层的任务就是管理这32byte的显存,在合式的时候填充合适的数据.
2)驱动层负载具体的数据输出,也就是俗称的刷屏.数据的输出方式需要与硬件一起确定,但是因为这个数据量比较小,就随便用SPI+IO的方式输出,SPI一次输出一行八个点共两个字节由两个74X595级联锁存,16个IO直接直接输出列信号,因为反正要扫描这里也可以用decoder节约一点IO.这样每扫描一整屏幕需要c帧=(cSPI+cIO+cDelay)*16这么多时间(cSPI指SPI输出2个字节的时间根据波特率和发送方式来,cIO指IO输出时间,这个基本上忽略,cDelay指给LED通电产生余晖的时间),要人眼看起来不闪烁,需要24帧取整为25,如果要更好的效果就需要提高帧率但是算法是一样的,这里的c帧 = 1s/25 = 40ms这是很长的时间啊,能干很多事情了.然后根据前面的式子把cDelay算出来,这里Delay()可以用查询定时器到位标志并阻塞程序的方式也可以直接数nop,不重要.

通过两个层级的解耦,需要同步刷新的刷屏任务和异步的数据填充就分开了,老规矩,异步式或者消息式任务放后台,通过其他任务或者硬件触发.例如要求显示向上运动的箭头,按键检测通知显示逻辑层进入task up,up的任务是(假定)每2秒显示一个完整的16列16行大小的箭头从最下面跑到最上面,并且跟着后面再来一个中间还要有四个空行.

其实逻辑层的任务很简单,按点把箭头数据table里面的数据取出来放到显存里面就行了,要实现滚动的效果就实时更新显存里面的数据,同时把四个空行作为数据一起遍到table里面去简化程序逻辑这种教坏小孩子的办法我也是会用的.现在就更简单了,总共有20行数据,2秒分20份,每100ms更新一次显存中的数据,把table中的数据向后推移16个点,也就是一行.很明显这个任务适合放到定时器中断里面去跑,考虑到节约资源的问题,可以和按键共用一个定时器.

明确逻辑层的任务之后,驱动层的任务就更简单了,刷数据就完了,没其他的事情了.因为时间尺度相对于其他任务来说非常大,即使被打断,甚至多次打断也无所谓的.

设计题四
如果题三种的Delay采用查询定时器到位标志位(还可以继续使用按键定时器,加一个软定时器变量就行了)的话,俩工程代码直接改个函数名确认一下调用关系拉一起编译就行了.几乎全是事件触发的任务,相互影响非常小.

(PS,么检查,感觉有点怕怕的,不知道能不能过~60分万岁~
发表于 2013-12-14 23:12:21 | 显示全部楼层
基础         
 楼主| 发表于 2013-12-15 00:08:00 | 显示全部楼层
本帖最后由 machao 于 2013-12-15 00:14 编辑
error_dan 发表于 2013-12-14 23:10
半个小时了还木有沙发?
我来献个丑~只有思路木有代码~
设计题一


第1题,有那么点意思,但不完整
第2题,其实也是MCU运用,外围接个三极管驱动蜂鸣器,产生方波就行
16*16,需要看硬件驱动的,不过也是“基础”的硬件。


需要完整的设计报告,代码也要。还要看时间的。

建议看一看2011年的电视连续剧“我是特种兵”。
什么是特种兵?特种兵是兵中之王!一个军区各个侦察连选拔一百多个优秀的士兵参加特种兵训练,最后就剩下10个左右能成为特种兵的。

5楼的,直接淘汰!
发表于 2013-12-15 00:24:58 | 显示全部楼层
machao 发表于 2013-12-15 00:08
第1题,有那么点意思,但不完整
第2题,其实也是MCU运用,外围接个三极管驱动蜂鸣器,产生方波就行
16*16 ...

马老师这么晚还在线?没写完,按了一下enter就直接提交了~请看更新过的完整答卷~
发表于 2013-12-15 00:37:08 | 显示全部楼层
顶一下,今晚先确定了思路,明早起来赶马老师的报告!
 楼主| 发表于 2013-12-15 00:48:20 | 显示全部楼层
本帖最后由 machao 于 2013-12-15 00:50 编辑
error_dan 发表于 2013-12-15 00:24
马老师这么晚还在线?没写完,按了一下enter就直接提交了~请看更新过的完整答卷~ ...


看过了,思路有对的地方,也有不好的地方。如果你手边有开发板,最好实际试一下,作出可能不难,但你会发现效果可能不佳,会产生这样或那样的问题。16*16是单色的。
因为是说道特种兵入门考核,所以60分肯定淘汰的,至少需要80分以上才能进入训练营。
不过以学校的标准衡量,从你的那些描述看,水平是可以达到80分以上,但对于是否达到“特种兵”入门线,还要看更具体的东西。
 楼主| 发表于 2013-12-15 01:06:44 | 显示全部楼层
题目一本身来自一个小小小小的课题。改造一个学校作逻辑电路实验的实验箱(把箱改成板,让学生人手一块,拿到宿舍作实验),上面有一个产生8路信号源的部分,使用了4片逻辑电路组成的,我希望用一片16脚或20脚的MCU实现,故才有这个题。

我给研究生上MCU嵌入式系统设计的课程,已经3届了,每届都有10-20人左右,每次这个都是第一个测试练手题,没有一届学生开始就作出的。实际上使用标准的MCS-51比如89S51就根本作不到的。

为什么说4楼还不错,就是因为他知道STC有PCA,现在就看他怎么用了。如果是MAGE16,那时没有问题的,不过也需要方法对头,否则也不能实现的。

只学过标准51MCU的朋友,作这些题会碰到很大的困难,要看你使用的是什么样的51了。
发表于 2013-12-15 08:49:43 | 显示全部楼层
看到特种兵这三个字就想吐
发表于 2013-12-15 10:32:04 | 显示全部楼层
看看,顺便顶一下
发表于 2013-12-15 10:56:01 | 显示全部楼层
mega16的 定时器 中断的 使用  按键 状态机的思想   
 楼主| 发表于 2013-12-15 11:27:56 | 显示全部楼层
本帖最后由 machao 于 2013-12-15 11:36 编辑
北回归线 发表于 2013-12-15 10:56
mega16的 定时器 中断的 使用  按键 状态机的思想


后面当然是特种兵训练的部分科目,也是基本的科目。
但定语不准确,只要是新型的MCU,如:51系列(当然必须是改进性兼容51的)、AVR、STM8、STM32等,都行。

主要是思路和方法,不局限AVR。有兴趣可以过些时间来看我贴上的参考,是用51芯片的。
发表于 2013-12-15 11:39:15 | 显示全部楼层
人眼看点阵屏的刷新频率闪不闪并不是24帧/秒,而是闪光临界融合频率(是视觉心理物理学中的一个概念),只有高于这个频率人眼才不感觉到闪,这个频率有个公式:
CCF = a * lg(I) + b
其中CCF是闪光临界融合频率,a和b为系数,I为亮度均值
这个频率不是绝对值,是个统计值。因此实际要确定刷新频率,最好实际调试下,并且高于这个临界频率使用(不同人感受不同),当然对于16*16的小屏刷新频率应该要求不会太高
市面上的大LED屏,240帧/秒、400帧/秒,960帧/秒,甚至有4800帧/秒的!
发表于 2013-12-15 12:06:49 | 显示全部楼层
帮顶
发表于 2013-12-15 12:33:04 来自手机 | 显示全部楼层
Vmao 发表于 2013-12-15 08:49
看到特种兵这三个字就想吐

不能这么说。经过层层选拨,最后出来的会是精英。
发表于 2013-12-15 14:04:56 | 显示全部楼层
这里是学生的答卷,请马老师过目

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2013-12-15 14:06:22 | 显示全部楼层
本人是14届毕业的应届毕业生,不过还希望能跟老师多多学习!
发表于 2013-12-15 16:28:04 | 显示全部楼层
我只关心特种x的待遇如何?
发表于 2013-12-15 16:34:24 | 显示全部楼层
myemcu 发表于 2013-12-15 16:28
我只关心特种x的待遇如何?


等你的水平达到了特种兵的时候,再来关心待遇吧。

我相信能入选特种兵,以后出去找工作,只要简历上有这一条经历,你想进什么公司,就基本不会有问题。



另外,帖子标题置成红色。 有水平的网友,不防将自己的答案上传上来。
发表于 2013-12-15 16:35:18 | 显示全部楼层
状态机 状态机 状态机
发表于 2013-12-17 09:51:17 | 显示全部楼层
armok 发表于 2013-12-15 16:34
等你的水平达到了特种兵的时候,再来关心待遇吧。

我相信能入选特种兵,以后出去找工作,只要简历上有这 ...

是诶,如果老板想跟这种人扯皮,就有意思了。。
发表于 2013-12-17 11:22:24 | 显示全部楼层
关注一下,向马老师学习!
发表于 2013-12-23 14:27:04 | 显示全部楼层
学习马老师这种跟实践紧密相连的教学思路。
发表于 2013-12-23 17:01:24 | 显示全部楼层
第1题,用AVR或者改进型的51还有点难度,如果用上STM32,基本上没什么难度了,IO速度能到10M以上,主频72M,就是直接用定时器都能输出了。
 楼主| 发表于 2013-12-24 11:22:39 | 显示全部楼层
xjmlfm1 发表于 2013-12-23 17:01
第1题,用AVR或者改进型的51还有点难度,如果用上STM32,基本上没什么难度了,IO速度能到10M以上,主频72M ...

你已经被淘汰了。就是6个方波的输出,还要用STM32?
发表于 2014-1-2 23:25:12 | 显示全部楼层
马老师,您好!我是孙军(就是这学期在上您的嵌入式系统课程但没有选课的那个同学),您周二送了我一套开发板,但是那张光盘好像坏了,读不出来。如果您有光盘的资料可以麻烦发我一下(邮箱1410632767@qq.com),谢谢马老师!
发表于 2014-1-3 11:38:55 | 显示全部楼层
对这个片子不熟悉,说说大概设计吧
第一个题,高频率的方波可以用定时器来完成,低频率的就直接控制IO口,定时器在产生PWM的同时也开启定时器中断,如果只有一个定时器的话,将定时器设置成PWM输出1Mhz,如果定时器是那种自动比较寄存器的值来翻转IO口的话,每进入5次定时器中断就翻转一个IO口,就能得到100K,进入50次翻转一次,就是10K。。。
如果有两个定时器,就把1Mhz和100K都用定时器,然后低频率的就从100K的中断里分,这样高频率的输出是硬件完成,受指令执行时间影响几乎没有,如果是两个定时器,100K的中断频率对系统负担也不大。主要的影响就在于后面低频率的需要用软件反转IO口,软件的判断计数和执行反转都是需要时间的,但是因为输出频率低,影响较小。
按键的话,可以用按键扫描,放在主循环里,每检测到按键被按下,一个counter计数,如果下次循环到这个位置,按键还是按下的,counter++,否则counter清零,当counter加到n时,就是在循环中已经确认了n次,这个按键是按下的了,就可以认为这个按键确实按下了,就反转IO口。。


第二题的话就使用一个定时器。宏定义ABCDEFG七个音高对应的产生该频率中断的定时器值,然后再宏定义出音长,因为定时器的频率根据音高不一样,所以同样长度的音,在不同的音高下计数次数也不一样,可以直接写成宏,最好写个宏函数让编译的时候编译器来算。
然后依次加载音高,音长,等待音长计数完成后,加载下一个音高,音长。。。

第三题,按键扫描就用上面的方法,因为没有原地等待,所以不会影响刷屏。
显示的点阵显示一个二维数组,比如那个箭头,定义成一个16*20的点阵图像,其中20里面有四行是空行,在显示向上的时候,定义一个row变量,这个变量可以放在主循环或者中断中,它的变化速度就是箭头的移动速度,显示的时候从这个16*20的点阵中取16行,定义一个row_counter变量,该变量指示刷新的时候该刷哪一行了,row_counter=row,得到现在该从哪一行开始刷,刷完一行, row_counter++,if(row_counter >=20)说明一个箭头刷完了,row_counter = 0,开始刷一个新的箭头。要向上移动箭头的话,就row++,这样就改变了刷屏从箭头的哪个位置开始刷,定义成16*(16+4个空行),就省掉了空行的单独处理流程。
横着竖着显示原理都差不多了。

题四,如果要融入的话,还需要考虑片上的资源,对这个片子不太熟悉。。。
发表于 2014-1-3 16:59:53 | 显示全部楼层
产生6路方波输出信号:M16在12M下使用T2,TO分别产生1M和100KHZ方波,不分频,不用中断,硬件使OC2和OC0翻转输出。T1采用8分频,OC1产生10KHZ方波,同时开比较匹配中断,软件计数定时翻转P0.0,P0.1,P0.2分别产生1K,100,10HZ方波。请马老师看看我的这个方案行不?如果行我再继续往下做

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2014-1-3 19:03:32 | 显示全部楼层
请问马老师,这个训练什么时候有消息??
发表于 2014-2-11 14:44:08 | 显示全部楼层
看看能做出一道题不,呵呵
发表于 2014-3-3 20:51:07 | 显示全部楼层
去年的帖子,凑个热闹。
12M晶振,单指令周期就是0.083uS。1M的方波,周期就是1uS,0.5uS就得翻转一次,而0.5uS只能运行6条指令,就算是用定时器我感觉也做不出来吧!不知道马老师有什么方法可以做到。
 楼主| 发表于 2014-3-6 18:05:56 | 显示全部楼层
夜尽天明 发表于 2014-3-3 20:51
去年的帖子,凑个热闹。
12M晶振,单指令周期就是0.083uS。1M的方波,周期就是1uS,0.5uS就得翻转一次,而0 ...

参考33楼的思路
发表于 2014-3-6 19:51:10 | 显示全部楼层
马老师 我在30楼做的那个答案行不行啊?
 楼主| 发表于 2014-3-23 15:33:54 | 显示全部楼层
sbk100 发表于 2014-3-6 19:51
马老师 我在30楼做的那个答案行不行啊?

思路是对的,所以让别人参考学习。
不过你最好说明为什么采用这样的思路,仔细分析为什么不能使用溢出中断。
另外使用51架构的MCU可以吗?哪些可以,哪些不行,为什么?
有些人用STM32,但采用溢出中断的方法,被我贬过,基本功不行,方法不对,使用什么芯片都是浮云。
发表于 2014-8-14 19:38:58 | 显示全部楼层
本帖最后由 sbk100 于 2014-8-14 22:18 编辑
machao 发表于 2014-3-23 15:33
思路是对的,所以让别人参考学习。
不过你最好说明为什么采用这样的思路,仔细分析为什么不能使用溢出中 ...


采用OC0 OC1 OC2自动翻转产生的方波应该没有误差,因为是纯硬件工作;用CTC比较匹配翻转IO口产生的方波我不知道怎么计算误差,请马老师指教。不用溢出中断是因为触发中断后,计数器还在计数,在中断里重新给计数器赋初值造成了延迟,时间不准了,变长了。另外请马老师看看我产生两路脉冲信号的方法对不对?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2014-8-18 22:34:58 | 显示全部楼层
mark一下,测试题
发表于 2014-8-19 07:21:03 | 显示全部楼层
马老师是不是考虑加入测试题的产品使用场景描述。
发表于 2014-8-19 08:32:17 | 显示全部楼层
马老师帮我看看啊
发表于 2014-8-19 08:41:57 | 显示全部楼层
帮顶,然后练习下。
发表于 2014-8-19 08:43:06 | 显示全部楼层
哇 有人挖坟了啊
发表于 2014-8-19 12:24:02 | 显示全部楼层
记号先,有空再下来看看。
发表于 2014-8-21 08:36:29 | 显示全部楼层
青马老师帮我看看37楼的作业 谢谢
发表于 2014-11-24 13:21:29 | 显示全部楼层
提交测试题三作业,由于没有16x16点阵,所以用马老师开发板上的8x8点阵做的,降低了难度,功能已经实现,请马老师点评

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2015-1-26 17:28:16 | 显示全部楼层
学习学习
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-8-26 03:08

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表