打印
[AVR单片机]

关于ATMEGA16输入捕捉中断模拟串口接收的问题

[复制链接]
2272|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lbdyxk|  楼主 | 2013-3-14 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
还是资源不够闹得,发送问题解决了,现在又遇上接收问题,好不容易接收时序搞定了,又发现了离奇现象:
首先介绍一下模拟思路:
由于自带3个定时计数器功能被用于3个PWM功能,因此只有使用ICP这个办法了——下降沿捕捉。当接收到起始位时先判断是否低电平然后开始接收,但是经过一番尝试后出现了这个现象
待接收数据为
0C 04 00 0F 20 94 00 09 09 E5
实际接收到变成了
0C 04 00 0F 20 14 00 09 09 65
请看我标记的两个对应数字,很明显第一位高电平被错读为低电平。
曾经怀疑过延时有误,但是尝试微调后要么现象依旧,要么全部数据错误;去掉判断首位低电平后接收到的就是一堆7F,这个也容易理解,而且和上边的现象也相吻合;检查过T/C1初始化确实已经禁止了噪声抑制功能,排除了将首位滤除的可能性(本身也几乎不可能在这种场合有效吧)。

......
无语了,不知道有没有哪位高手帮忙再提点一下,看还有没有什么原因会造成这种丢失。
PS:其他串口模拟方法就免了,毕竟已经到这一步,就差那么一点点了:(

相关帖子

沙发
qin552011373| | 2013-3-14 23:47 | 只看该作者
模拟的串口没有用过呢  帮顶

使用特权

评论回复
板凳
lbdyxk|  楼主 | 2013-3-15 10:17 | 只看该作者
每次都要自己回答自己的问题,唉
还好今天搞定了,问题还是出在影响时序的延时上。
问题原因:之前数据位接收循环外单独调用了精确延时用于等过起始位,在有效的0-8位接收时调用了另一个延时,这样不但把接收过程复杂化,还使延时入参的确定变成了两个,精度要求更高了,以至于试了半天都没有保持接收稳定的参数。
解决方法:在数据接收循环内部调用循环,先延时,后读值。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!
地板
qin552011373| | 2013-3-18 09:47 | 只看该作者
因为你的项目你理解肯定是最深的  论坛只能提供经验呢

使用特权

评论回复
5
yhhsky| | 2013-3-30 18:58 | 只看该作者

使用特权

评论回复
6
wentao0100| | 2013-4-3 13:02 | 只看该作者
:D

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

0

粉丝