如何用ATmega16A实现输入捕捉以及曼码解码实现?

2019-07-15 16:35发布

新人发帖,可能表达不好,各位前辈别见怪。(真正意义上的新人,新进入这个行业,新学习avr单片机。大学学的51,可我只玩过画板没接触过单片机开发且毕业一年专业基础早忘了)
最近刚入职,老大就给了一个项目,目的是让我接触学习(他也没指望我能完整的搞定吧,我也没那自信)

情况是这样的,我们是做酒店类控制系统的,然后一个方案上要用到别的公司(以下称为丙方)的产品,甲方当然就想我们将丙方产品的控制系统集成在一起啊(其实说白了就是山寨他们的控制模块吧,我是这样理解的)我们有试过联系丙方想要时序图(肯定不给的啦)所以老大就把这事扔给我学习了。

从示波器上看图形是有规律的(老大说很可能是曼码处理过的),然后他打算用m16单片机获取通信过程并做一个解码(这样表达没错吧,我也不是很懂)反正最终目的就是不用丙方的控制面板,将控制程序放在我们自己的面板里面。

我看了几天资料,m16的定时计数器1有输入捕捉的功能(所以我是不是应该往这个方向做)不过我还是有点不明白:我是应该用计数器的普通模式,获取占空比?然后把获得的数据归为0、1即可?(忘了说,丙方的产品用的是单线通讯)
可是这个只是没有任何操作的数据通信的情况吧(以后每个功能都要重新获取一次编码?)还有之后我们也要仿造波形输出吧(定时器1也有这个功能)

表达的有些乱,希望别介意。
恳请各位前辈特别是有这种项目经历的能提供下思路,我不奢求完全的代码什么的,只是要个思路,谢谢。
说实话我现在还是一头雾水,很多都搞不清楚,慢慢成长吧。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
AndyPeng2015
2019-07-16 00:08
本帖最后由 AndyPeng2015 于 2015-7-21 13:48 编辑
friend0720 发表于 2015-7-18 18:32
http://bbs.elecfans.com/forum.php?mod=viewthread&tid=486854&page=3&extra=#pid3648101

我认真看了前辈的《第十二节 高级定时器之输入捕获与红外解码》 无奈自己刚接触avr单片机,对代码也不敏感,所以有很多不明白的地方,望前辈不吝赐教。

nec初始化函数中,即代码78,79行
        DDRB &=~(1<<PD6);                 //PD6 (ICP1 单片机第20脚) 配置为输入
        PORTB|= (1<<PD6);                 //PD6 上拉电阻
————————————————————————————————————————
1.为什么这里是B而不是D?
2.79行能否写成 PORTD = 0?因为我想使PD6为低电平,然后上升沿触发(查资料得知avr内部没有下来电阻,那直接写成0可行不?)***********************这个我后面仔细想了下,应该用下降沿触发,所以这个不用解答了*******
————————————————————————————————————————
然后再有个问题,前辈代码中涉及nec的内容,那是前辈在已有nec时序图的情况下。
我现在这个问题就是我事先不知道丙方产品的时序图,而且数据头具体的高低电平时间也不知如何确定(示波器能获取精确的时间吗?)那这种前提下,我应该如何定位数据头的case跟后面数据的case呢?

一周热门 更多>