搜索
bottom↓
回复: 9

马老师,关于你讲的USART容差,不懂

[复制链接]

出0入0汤圆

发表于 2009-11-29 20:47:08 | 显示全部楼层 |阅读模式
老师,你们在这个帖子里(http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=340242&bbs_page_no=2&sub_kind_id=2065&bbs_id=1000)讨论的USART容差+/-4%,还有有容差的原因是因为检测停止位的时候到8、9、10采样完就完成改为采样,然后紧接着检测起始位。和手册上讲的一样,不是很懂啊。麻烦老师给讲下。:)

出0入0汤圆

发表于 2009-12-2 12:11:01 | 显示全部楼层
一个帧按10位计算(1个起始、8个数据、1个停止),每位需要16次采样,标准情况一帧10位需要160次采样周期。

AVR采样停止位的时候,到8、9、10完成,因此是提前6个采样周期开始对下一个起始位检测了,这样通信双方的时钟稍微有些不同的话,也没问题,这个就是容差比较大的原因。

深入讲,AVR接收停止位检测到8、9、10时,发送方必须在发送停止位的14、15、16(发送方快)----1、2、3(发送方慢)之间(当然如果也是8、9、10就完全同步了),这样AVR还能正确接收。两边大约6个采样周期。下一个起始位开始新的一次同步。

这样,在160个采样过程中,总的可以有6(快)或7(慢)个采样周期的容量,按一帧160个标准采样,平均6.5个误差计算:6.5/160 = 0.040625,大约为4%。

另外,AVR的USART接收还配备了一级缓冲器,当硬件收到一个字节后,软件不需要马上读掉,可以等一段时间(但必须小于下一个帧的接收时间的160个采样周期)再读,因此为程序员留出更多的考虑接收来不及处理的空间或时间(数据流控制)。这些优点51是没有的。从整体讲,AVR的USART比51要稳定的多,也更加方便使用。

实际上,AVR的USART还有比51更好的优点,比如校验位的计算就不需要程序员考虑了。只是通常大家不使用校验位,体会不到这个优点。在需要可靠的、高速、批量数据通信中,才能真正体会AVR的USART的优点所在。

出0入0汤圆

发表于 2009-12-2 12:19:08 | 显示全部楼层
学习

出0入0汤圆

 楼主| 发表于 2009-12-2 20:05:23 | 显示全部楼层
老师太热心了!写了这么多!
但还是不懂。

深入讲,AVR接收停止位检测到8、9、10时,发送方必须在发送停止位的14、15、16(发送方快)----1、2、3(发送方慢)之间(当然如果也是8、9、10就完全同步了),这样AVR还能正确接收。两边大约6个采样周期。下一个起始位开始新的一次同步。
——————————————————————————————————————————————————————————
你的意思是不是图中这样:

(原文件名:未命名.JPG)
图中3是同步的,1是慢的,2是快的。是这样理解么?然后可以左右浮动6个采样周期。

我的理解,假如发送的的速度快,那每一位持续的时间(宽度)会比采样的短(你的是一样长)。会是这样:

(原文件名:未命名2.JPG)
那不就全乱了。

很不懂啊,麻烦老师再讲讲。呵呵。
————————————————————————————————————————
“另外,AVR的USART接收还配备了一级缓冲器,当硬件收到一个字节后,软件不需要马上读掉,可以等一段时间(但必须小于下一个帧的接收时间的160个采样周期)再读,因此为程序员留出更多的考虑接收来不及处理的空间或时间(数据流控制)。这些优点51是没有的。从整体讲,AVR的USART比51要稳定的多,也更加方便使用。 ”

移位寄存器满了之后会把数据处理送到UDR、FE、RXB8,同时置位RXC,然后继续接收,程序就有把移位寄存器移满的时间来检测标志、处理数据,10*16。那个二级FIFO是什么意思?数据是从移位寄存器先进FIFO再进UDR么?
————————————————————————————————————————
“实际上,AVR的USART还有比51更好的优点,比如校验位的计算就不需要程序员考虑了。只是通常大家不使用校验位,体会不到这个优点。在需要可靠的、高速、批量数据通信中,才能真正体会AVR的USART的优点所在。 ”

校验位是不是这样的:数据各位异或,如果是偶校验,再异或个0,结果不变,所得就是校验位,如果是奇校验,结果再异或个1取反,一起送到接收方。接收方这样检测:加上校验位一起异或。结果和UPM[1:0]的0位比较,偶校验是0,奇校验时1,如果一样就对了。偶校验时就是让数据和校验位一样,奇校验时就是让数据和校验位相反,异或结果就会是0或者1。
—————————————————————————————————————————
看手册太累了,有些东西不容易理解,而且讲得很散。不知道老师说的这些在你那本《基于AVR的嵌入式系统……》里有没有讲,电子版的后边通信的没有,如果有讲解,我就去买本书看,后边的知识也可以好好学学。P.S.老师讲东西佷透彻,治学非常严谨,敬佩!

出0入0汤圆

发表于 2009-12-3 01:58:46 | 显示全部楼层
"看手册太累了,有些东西不容易理解"

手册不是教课书,它是说明自己是如何工作和实现功能的,至于基本和通用的原理它认为是常识,最多只做简单的介绍。因为作为工程师讲应该是知道的。如果讲原理,那手册要讲多少?每个功能模块都讲?

之所以“看手册太累”,说明你的基础比较差,好多基本的东西没有学习过,或掌握的不好。

这里还是说第1个问题。
你第1个图的意思是对的,它表示为最后的停止位检测的情况。1/2为发送方慢/快(相对接收方的时钟)的情况。如果发送方与接收方的时钟完全相同,那么应该与3对齐的。

1。异步通信方式是按帧实现同步的,接收方从起始位的下降沿开始,实现与发送方的同步。
2。由于双方都是按规定的波特率工作,所以一帧的周期也是确定的,比如采用10位帧,9600bps,那么一帧周期就是 (10*1)/9600。
3。但由于双方使用自己的晶体时钟工作,当然会有点误差,所以要考虑一定的容差,偏差太大的话,当然就不能正确接收了。
4。接收方对于一个位的检测使用16倍的采样频率,也就是说,在一个位的宽度中16次采样,使用第8、9、10三次采样结果,以大数原则确定该位是高还是低(2个或3个采样值为高,那么本位就是“1”)。

现在看图1,因为从起始位开始是对齐同步的,那么尽管双方时钟有些不同,只要最后一位停止位为图1的情况,那么前面的9位肯定都比停止位对的更好些,都能正确接收到的,这样这一帧就没有问题了。而下一帧从起始位的下降沿开始,接收方又开始保持同步,这样就把误差消除掉了。 这就是容差的作用。

你要首先知道接收方是如何检测起始位并首先同步的。对于10位的一帧数据,接收方需要160次的采样,那么第1次从什么时间开始确定?当检测到信号线上从高到底的跳变,此时这个作为第1次检测(开始同步),在8、9、10检测为低电平,确定为起始位。如果不是低电平,则此次同步放弃,继续检测下一次信号线上的下降跳变,然后再从1开始。

另外,双方时钟的差别不是突变的,误差是积累起来的(不是每一位都差别6个检测周期,是10位累计起来总的差别6个检测周期)。因此,如果发送慢的话,当第10位1/2/3对应接收方的8/9/10(图1),那么第9位的2/3/4就对应接收方的8/9/10,第8位的3/4/5对应接收方的8/9/10,第7位的4/5/6就对应接收方的8/9/10........第1位的(起始位)8/9/10就对应接收方的8/9/10。(为了说明问题,采用了整数,其实每一位只是慢了0.6的检测周期)

所以图1中第10位停止位能对上,前面的9位肯定能对上。而下一帧从起始位开始,AVR接收方又重新对齐同步了,当前这帧累计产生的6.5个检测周期误差被AVR自动调整掉了。所能调整的范围就是6.5/160(4%),如果时钟偏差大于4%,那当然就乱了。

出0入0汤圆

 楼主| 发表于 2009-12-3 15:18:12 | 显示全部楼层
累积误差。恩,懂了。谢谢老师!这么晚了,还来回答问题,而且写了这么详细!

出0入0汤圆

发表于 2009-12-3 15:30:39 | 显示全部楼层
马克

出0入0汤圆

发表于 2009-12-3 19:20:29 | 显示全部楼层
另外,AVR的USART接收还配备了一级缓冲器,当硬件收到一个字节后,软件不需要马上读掉,可以等一段时间(但必须小于下一个帧的接收时间的160个采样周期)再读,因此为程序员留出更多的考虑接收来不及处理的空间或时间(数据流控制)。这些优点51是没有的。从整体讲,AVR的USART比51要稳定的多,也更加方便使用。
-------------------------------------------------------------------------------
51也有这个功能。


=============================================================================
The Data OverRun (DOR) Flag indicates data loss due to a receiver buffer full condition. A Data OverRun occurs when the receive buffer is full (two characters), it is a new character waiting in the receive Shift Register, and a new start bit is detected. If the DOR
Flag is set there was one or more serial frame lost between the frame last read from UDR, and the next frame read from UDR. For compatibility with future devices, always write this bit to zero when writing to UCSRA. The DOR Flag is cleared when the frame
received was successfully moved from the Shift Register to the receive buffer.

AVR比51多了一级缓冲,
AVR是收到3个字节(缓冲器中2个, Shift Register中一个),当第4个起始位到时溢出。
51是收到2个字节(缓冲器中1个, Shift Register中一个),当第3个起始位到时溢出。

出0入0汤圆

 楼主| 发表于 2009-12-3 19:27:08 | 显示全部楼层
老师,那个FIFO是怎么回事?

就是上面的解释

出0入0汤圆

 楼主| 发表于 2009-12-4 14:30:56 | 显示全部楼层
明白了。谢老师。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 04:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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