EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2007/1/10 9:02:44

5

关于投票

AVR应用经验

AVR应用经验

 
      AVR与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提

高和改善。
      但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统的硬件和软件设计思想和方

法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。
      功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1赛车,只有具备高超技术的驾驶员才能充分体会到车

的特点,并能最大限度的发挥出车的性能。
      AVR具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR的优点,还需要应用工程师本身的硬软件设计开发能力的不断学习

、实践提高。
     “外行看热闹,内行看门道”,对于有一定基础的嵌入式和单片机系统设计开发的工程师,不妨先简单尝试一下AVR。

开发环境与工具:PC+下载线+实际的系统板
PC上的开发软件:
      AVR Studio(Free)汇编+汇编调试+高级语言调试+软件仿真
      ICC、CVAVR、BASCOM-AVR  高级语言程序开发+程序下载。其中一个购买正版全功能,作为主要的开发环境,其它使用DEMO版,作为辅

助及参考。
      AVR ISP下载线:
       STK200 and STK200+ and STK300  ISP programmer。通过PC的打印机口,采用ISP技术将系统运行代码(HEX、BIN)和数据写入AVR芯

片的Flash和EEProm中,编程AVR的配置熔丝位和加密位。支持决大多数的AVR芯片、以及ATMEL的51兼容芯片89S8252、89S52等。在ICC、CVAVR

、BASCOM-AVR、BASCOM-8051中都内含对该下载线的支持程序。免费专用的下载程序:SLISP、PonyProg2000等。

尽量不使用仿真器的建议:
      在开发和调试系统程序时,有许多人完全依赖于仿真器,一旦离开了仿真器时就感觉无从下手。其实,由于AVR的Flash存贮器可方便的

使用ISP技术在线的多次擦写,因此建议尽量不使用(依赖)仿真器来开发和调试程序。
      在实际开发过程中,程序的调试可以从下几方面入手:
      现在的高级语言编译器(如C编译器)可以产生效率很高的机器代码,因此建议大家尽量使用高级语言编写系统程序。
      使用Atmel公司提供AVR Studio软件模拟仿真环境,以及其他的软件模拟仿真环境(BASCOM-AVR)。
      尽可能使用高级语言编写系统程序。
      利用目标板上的LED、LCD或异步串口。见附件“没有仿真器的情况下如何开发AVR”的介绍。

提高硬件设计的合理性:
      尽量合理和充分使用AVR片内的资源,如EEPROM、A/D、内部的RC振荡源。
      尽量采用串口通信连接的外围器件,大容量的存储器、LCD控制器、打印机、不用8279(LED数码管+键盘)而使用7279等。除了必须外

扩RAM(如语音和图象),一般不提倡使用并行扩展(573+译码电路),减小硬件和连线以及PCB板上错误的出现概率,同时也提高了系统的可

靠性。并行扩展向串行扩展是发展趋势。现在有大量的新的外围器件采用高速的串行接口,如A/D、D/A、RTC、存储器等。
      尽量使用以及在目标板上预留ISP程序下载接口,或使用IAP技术。
      优点:ISP接口与I/O的兼容性比JETAG好。
       缺点:不能在线调试

注意和掌握AVR配置熔丝位的使用:
     . 系统晶振的选择
      .BOD的使用
      .启动延时
      .Mega8的PC6引脚,RESET与通用I/O的转换
       .JETAG接口和通用I/O的转换
       .启动向量的转换,BOOT-LOAT区大小的设置

提高硬件可靠性的考虑:
    .尽量采用片内晶体、采用低频率的系统时钟、振荡电路的输出小幅度。
    .选择合适的启动延时参数
    .使用BOD、片内的看门狗
    .合理休眠方式的使用
    .不用I/O口设定输出低电平
    .利用内部的EEProm和寄存器MCUCSR判断复位标志,进行不同的处理

提高软件设计的能力和水平:
      尽量合理采用高级语言设计编写系统程序。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是

一种误解。对一个有经验的,而且非常熟悉某种单片机的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开发者、

或突然更换了一种新的单片机,您能保证一定可以写出比高级语言更简练的代码吗?
      高级语言的优越性是汇编语言不能比的:
      .程序移植方便
      .程序的坚固性
      .数学运算的支持
      .条理清晰的结构化编程,程序的可维护性。
      .可协同开发软件,开发周期短。
      现在的高级语言编译器(如C编译器)已可以产生代码效率很高的机器代码,因此建议大家能用高级语言实现的程序尽可能使用高级语

言写,在对速度和时序要求特严的场合可以采用混合编程的方法来解决。

更深入和全面的掌握各种串行通信协议的规程:
      嵌入式系统目前以大量的使用串行接口外围芯片和各种通信接口,如RS232、两线(I2C)、三线(SPI)、单总线、USB、CAN、TCP/IP

等。开发人员和程序员应了解低层协议,熟悉硬件怎样和如何实现低层协议,如何定义可靠的上层应用协议,以及低层协议驱动同上层应用协

议之间的接口设计(中间层软件的实现)等。
      硬件工程师的软件编写能力要提高,采用标准程序编写方式、完善的软件整体框架的设计、良好的数据结构和程序结构系统。(计算机

软件专业的程序设计员对硬件不熟悉、大部分是在操作系统支持下编写软件,对低层接口和协议的驱动层以及接口也不了解,往往也编写不出

好的单片机系统程序。)
      通信接口的编写应尽量 
      .采用中断+缓冲区,
      .分层+结构化设计,
      .尽量不使用轮循方式(降低AVR的效率)。参见URAT(RS232)驱动+中间层软件示例。

采用好的系统设计模式:
      尽量不使用传统的前后台(中断)系统设计模式,任务之间相互影响和干扰,无法定时操作。如设计一个采用动态扫描方式驱动的8位

LED数码管显示+动态扫描的4*4矩阵键盘。
      采用TimeTip+状态机设计+CASE结构,实现多任务并行运行系统设计方法。或时间触发式的系统设计。(见:《时间触发嵌入式系统设

计模式》中国电力出版社 2004.6)
      移植小型嵌入式操作系统,如UCOS-II。在网上有些免费的基于AVR的简洁的操作系统。

提高C语言的编程能力和软件应用水平:
      熟悉和用好C中的数据结构体、指针应用、内存管理等较高级的应用。
      熟悉和了解你所使用的高级语言开发平台的特点。这些平台是针对某一类处理器的,包含许多特殊的不兼容的语句和扩展的结构、语句

、函数等。尽管使用方便,但由于其不透明性和时间的不确定性,因此要合理使用。如C中的getchar()、putchar()等。

     AVR有多个开发平台,每个都有其特点和不足。能够综合使用这些平台,相互互补,能够提高开发效率。如通过ICC、CVAVR的程序生成器

CodeWizard学习和了解AVR的硬件设置,简化计算,快速的生成程序基本模块,如“一个URAT(RS232)低层驱动+中间层软件示例”。
 

 

系统分类: 单片机  |  用户分类: AVR  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(1420) | 回复(2)

发表于 2006/12/31 21:24:09

0

关于投票

AVR单片机的下载线资料

点击看大图

系统分类: 嵌入式  |  用户分类: AVR  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(898) | 回复(0)

发表于 2006/12/31 21:22:12

1

关于投票

AVR基本硬件线路设计与分析

AVR基本硬件线路设计与分析
 
发表于 2006-12-9 21:07:14
基本的AVR硬件线路,包括以下几部分:

1。复位线路
2。晶振线路
3。AD转换滤波线路
4。ISP下载接口
5。JTAG仿真接口
6。电源

  下面以本网站推荐的AVR入门芯片 ATmega16L-8AI 分析上述基本线路。(-8AI表示8M频率的TQFP贴片封装,工业级,更详细的型号含义资料,请参考:AVR芯片入门知识)


复位线路的设计

  Mega16已经内置了上电复位设计。并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路在上电时,可以设计得很简单:直接拉一只10K的电阻到VCC即可(R0)。

  为了可靠,再加上一只0.1uF的电容(C0)以消除干扰、杂波。

  D3(1N4148)的作用有两个:作用一是将复位输入的最高电压钳在Vcc+0.5V 左右,另一作用是系统断电时,将R0(10K)电阻短路,让C0快速放电,让下一次来电时,能产生有效的复位。

  当AVR在工作时,按下S0开关时,复位脚变成低电平,触发AVR芯片复位。

重要说明:实际应用时,如果你不需要复位按钮,复位脚可以不接任何的零件,AVR芯片也能稳定工作。即这部分不需要任何的外围零件。


晶振电路的设计

  Mega16已经内置RC振荡线路,可以产生1M、2M、4M、8M的振荡频率。不过,内置的毕竟是RC振荡,在一些要求较高的场合,比如要与RS232通信需要比较精确的波特率时,建议使用外部的晶振线路。

  早期的90S系列,晶振两端均需要接22pF左右的电容。Mega系列实际使用时,这两只小电容不接也能正常工作。不过为了线路的规范化,我们仍建议接上。

重要说明:实际应用时,如果你不需要太高精度的频率,可以使用内部RC振荡。即这部分不需要任何的外围零件。

 


AD转换滤波线路的设计

点击看大图

  为减小AD转换的电源干扰,Mega16芯片有独立的AD电源供电。官方文档推荐在VCC串上一只10uH的电感(L1),然后接一只0.1uF的电容到地(C3)。

Mega16内带2.56V标准参考电压。也可以从外面输入参考电压,比如在外面使用TL431基准电压源。不过一般的应用使用内部自带的参考电压已经足够。习惯上在AREF脚接一只0.1uF的电容到地(C4)。

重要说明:实际应用时,如果你想简化线路,可以将AVCC直接接到VCC,AREF悬空。即这部分不需要任何的外围零件。


ISP下载接口设计

点击看大图

  ISP下载接口,不需要任何的外围零件。使用双排2*5插座。由于没有外围零件,故PB5(MOSI)、PB6(MISO)、PB7(SCK)、复位脚仍可以正常使用,不受ISP的干扰。

重要说明:实际应用时,如果你想简化零件,可以不焊接2*5座。但在PCB设计时最好保留这个空位,以便以后升级AVR内的软件。


JTAG仿真接口设计

点击看大图

  仿真接口也是使用双排2*5插座。需要四只10K的上拉电阻。

重要说明:实际应用时,如果你不想使用JTAG仿真,并且不想受四只10K的上拉电阻的影响,可以将JP1-JP4断开。

 


电源设计

点击看大图

  AVR单片机最常用的是5V与3.3V两种电压。本线路以开关切换两种电压,并且以双色二极管指示(5V时为绿灯,3.3V时为红灯)。

  二极管D1防止用户插错电源极性。D2可以允许用户将电压倒灌入此电路内,不会损坏1117-ADJ。

  1117-ADJ的特性为1脚会有50uA的电流输出,1-2脚会有1.25V电压。利用这个特点,可以计算出输出电压:

当SW开关打向左边时,R6上的电流为 1.25/0.33 = 3.78ma 。R8上的电流为1117-ADJ 1脚电流加上R6上的电流,即0.05+3.78=3.83ma. 可以计算得R8上的电压为3.84V。 于是得出VCC=1.25+3.83=5.08V。误差在2%以内。

当SW开关打向右边时,R6上的电流为 1.25/0.62 = 2.02ma 。R8上的电流为1117-ADJ 1脚电流加上R6上的电流,即0.05+2.02=2.07ma. 可以计算得R8上的电压为2.07V。 于是得出VCC=1.25+2.07=3.32V。误差在1%以内。

  使用1%精度的电阻,可以控制整个输出电压误差在3%以内。

重要说明:实际应用时,视乎使用1117-ADJ的品牌,输入电压可以低至7伏甚至更低。(也可以同时使用低压降的二极管代替1N4007)。

系统分类: 嵌入式  |  用户分类: AVR  |  标签: AVR基本硬件线路设计与分析  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(911) | 回复(0)

发表于 2006/12/31 12:39:52

2

关于投票

一个avrjtag的原理图

 

 

 

rar

系统分类: 嵌入式  |  用户分类: AVR  |  标签: 一个avrjtag的原理图  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(818) | 回复(0)

发表于 2006/12/31 12:38:17

1

关于投票

介绍使用winavr的文章

 

介绍使用winavr的文章

rar

系统分类: 嵌入式  |  用户分类: AVR  |  标签: 无标签  |  来源: 无分类  | 

点击查看原文

发表评论 阅读全文(1441) | 回复(0)

Total , Page /