搜索
bottom↓
回复: 3

请教马老师:M16中「ADC的单次转换并切换通道」和「USART的发送处理」的问题。

[复制链接]

出0入0汤圆

发表于 2010-10-19 16:36:39 | 显示全部楼层 |阅读模式
请问有关于ATmega16:

1. 在“单次转换”模式下,每次转换完成后切换新通道,让ADCSRA寄存器中的ADSC位置为“1”后,是否转换开始都算ADC第一次转换〈即完成转换总时间需要25个ADC时钟周期〉?

还是说,只有程序里第一次将ADSC位置“1”的时候,转换开始才会需要25个ADC时钟周期,此后的ADSC位置“1”,转换开始到完成都为13个ADC时钟周期?

2. 在USART发送数据的C代码例程中:
  void USART_Transmit( unsigned char data )
  {
      /* 等待发送缓冲器为空 */
      while ( !( UCSRA & (1<<UDRE)) )        -->  // 疑问处 //
      ;
      /* 将数据放入缓冲器,发送数据 */
      UDR = data;
  }
若更改为:
  void USART_Transmit( unsigned char data )
  {
      /* 等待发送缓冲器为空 */
      while ( !( UCSRA & ~(1<<TXC)) )        -->  // 疑问处 //
      ;
      /* 将数据放入缓冲器,发送数据 */
      UDR = data;
  }
仍可以正常发送数据,思考了很久依然想不通,能否详细说明这2段代码思路差异?

以上问题烦请指导,谢谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-10-19 18:33:13 | 显示全部楼层
1。切换通道后开始的第一次AD转换,以及工作在“单次转换”模式下都需要25CLK。只有在“连续转换”模式下的转换开始到完成为13个ADC时钟(第1次启动不包括)。在“连续转换”模式下是不能切换通道的。

2/3。一般应用中这两个区别不大,都可以。其差别在于效率。

     USART的发送过程如下,后面2步是硬件自动完成的

    写数据到UDR ===》UDR数据复制到发送缓冲器(当发送缓冲器空时,且UDR中有新数据) ===》发送缓冲器数据按位串出

    由于数据串出的时间比较长,比如9600BPS,一个字节串出大约需要100us。100us的时间CPU可以执行400条指令(4M),因此考虑效率问题,判断UDRE比较好。此时尽管发送缓冲器还在发送上个数据,把新数据放到UDR中排队就可以了,CPU可以去做其它事情。而判断TXC,可能需要多等100us。

    因此,判断UDRE可以节省时间,也就是相应的加快系统的代码执行效率。
      
    但是在一些应用中必须以TXC的判断为准,典型的为RS-485。RS-485是半工通信,发送方发送一个数据后,需要控制RS-485芯片的方向控制,转成接收方式。此时,就必须以TXC为准,UDRE为空并不表示数据真正发送的过程结束。过早的转换就会造成最后一个数据发不出去,使通信失败。网上许多人做RS-485,经常发现不稳定,尤其是最后一个字节,很关键的就是这里考虑不周到。

     必须对器件的特性,以及低层硬件工作过程非常了解,才能设计出一个好的稳定可靠的系统。国内大部分工程师都缺乏这些基本的东西,看不到其重要性。一旦出了问题,根本找不出问题的根本原因,随便加上个延时什么的,能过去就算了。下一次还是会出问题。

     你的2个代码,不管是判断TXC、还是UDRE,效率都是极差的,因为 while ( !( UCSRA & ~(1<<TXC)) )的浪费是巨大的。尤其现在的系统时钟都是十几M甚至几十M,让CPU  while 是悲剧。建议你购买我编写的《AVR单片机嵌入式系统原理与应用实践》教程,看看我是如何处理的。此书其它的设计思路、方法对你使用任何的MCU都有帮助。

     以上供参考。

出0入0汤圆

 楼主| 发表于 2010-10-20 20:46:16 | 显示全部楼层
回复【1楼】machao  
-----------------------------------------------------------------------


感谢马老师的指导!

故AD转换,依照马老师的释义:

『在“单次转换”模式下,不论有没有切换通道,每次AD转换从开始到完成,都需要25个CLK 。』

不知这样的观念解读对不对!?

谢谢。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-23 02:32

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

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