历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2020年02月07日 | AVR应用经验-经典

2020-02-07 来源:eefocus

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)低层驱动+中间层软件示例”。

推荐阅读

史海拾趣

Fujisoku Corporation公司的发展小趣事

随着全球化进程的加速,“未来电子”意识到单一市场已无法满足公司的长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,积极拓展国际市场。在欧洲、北美和亚洲等地,“未来电子”的产品和服务得到了广泛认可,市场份额逐年攀升。这一战略不仅提升了公司的国际影响力,还为公司的持续增长提供了强劲动力。

EG & G Inc公司的发展小趣事

EG & G Inc公司成立于20世纪早期,最初专注于电子设备的研发和生产。公司凭借其技术优势和创新能力,在电子行业中逐渐崭露头角。在成立初期,EG & G Inc就与多家知名企业和研究机构建立了合作关系,共同推动电子技术的发展和应用。这些合作关系不仅为公司带来了技术上的支持,也为其在市场上的扩张奠定了基础。

Cortina Systems Inc公司的发展小趣事

随着电子技术的不断发展,EG & G Inc公司不断进行技术创新和产品升级。公司投入大量资源进行研发,成功推出了一系列具有竞争力的电子产品。其中,某款高精度测量仪器在市场上获得了广泛认可,成为了公司的明星产品。此外,公司还积极开拓新的应用领域,将电子技术应用于医疗、环保等多个领域,为公司带来了新的增长点。

Elytone Electronics Co Ltd公司的发展小趣事

Elytone Electronics Co Ltd成立于XXXX年,最初是一家仅有几名员工的小型电子产品加工厂。公司创始人凭借对电子技术的热爱和对市场敏锐的洞察力,带领团队开始了艰苦的创业之路。在资源有限的情况下,他们不断研发新产品,优化生产工艺,逐步在行业内建立起了一定的知名度。

台湾丰宾(CapXon)公司的发展小趣事

随着全球环保意识的不断提高,CapXon公司积极响应绿色生产的号召,致力于实现可持续发展。公司采用环保材料和制造工艺,减少生产过程中的污染物排放,降低对环境的影响。同时,CapXon还积极参与各种环保活动和公益事业,为推动电子行业的绿色发展贡献自己的力量。

以上五个故事分别从初创与起步、市场拓展与品牌塑造、技术创新与产业升级、品质管理与生产优化以及绿色生产与可持续发展五个方面,展示了台湾丰宾(CapXon)公司在电子行业发展的历程和成就。这些故事不仅体现了公司的实力和魅力,也展现了公司在推动电子行业进步和可持续发展方面所做的努力和贡献。

B&B Electronics Manufacturing Company公司的发展小趣事

B&B公司成立于二战后的经济恢复期,最初是一家小型的电子制造公司。在创始人对电子技术的深厚兴趣和不懈追求下,公司逐渐在数据通信和商业应用领域找到了自己的定位。初步的产品线主要集中在转换器、控制器等基础电子设备上,为当时的工业自动化和过程控制提供了稳定可靠的解决方案。

问答坊 | AI 解惑

各大FPGA性能比较

国内用得较多的是xilinx, altera和lattice的片子。 xilinx的产品系列较多,还算好使,但开发环境稍显复杂。 XILINX的东东内部是用三态连线的,虽然实现总线容易,但延迟特性不太好。 altera的开发环境我感觉最为简洁,但片子 ...…

查看全部问答>

如何让编译的程序加载到qvfb中

安装了tmake 1.11       qt/Embedded2.3.7       QT2.3.2for x11 环境是redhat9 自带qmake3.1版本       发现qt/E下的例子可以加载到qvfb中运行。        ...…

查看全部问答>

vxworks环境下的CPU\内存\任务\异常 监控

任务运行状态监控 任务运行时的状态信息主要包括任务名、任务状态、当前占用CPU的比率、任务优先级等。VxWorks的Spy工具利用辅助时钟的中断服务程序,在指定的统计周期内,统计应用任务、Interrupt、Kernel、Idle状态等所获得的ticks总数,以此分 ...…

查看全部问答>

USB数据传输求助~~

我想写一个程序实现将开发板上的图像数据通过USB传输到电脑上,大概思路应该怎么样来实现呀,谢谢了~…

查看全部问答>

编码器如何算长度?速度?

电机连着主轴,主轴带个增量式旋转编码器,已知编码器为1600线,主轴直径为150mm, 主轴为变速转动。 求1、主轴的当前时刻转速是多少?2、编码器一个脉冲所对应的长度是多少?3、当长度为2000mm时,编码器输出多少个脉冲? 如果所列的已知条件不充分 ...…

查看全部问答>

OpenCV移植到WindowsCE的问题

初次接触WindowsCE开发, 使用的是eBox. 需要移植OpenCV到WindowsCE上. 请问除了http://blog.csdn.net/hellogv/archive/2010/07/08/5721129.aspx这个以外, 有没有移植高版本OpenCV的资料? 有哪些书籍可以参考?…

查看全部问答>

模拟电路反馈电阻取值

问一个弱弱的问题,在图里的放大电路,Vout=-(Rf/R1)*Vin,我不理解R1与Rf一般如何取值。如果是放大100倍,由公式只要使Rf/R1=100就行,根据P=U*U/R可以知道电阻越大消耗的功率就越小。可不可以由我这种分析使两个电阻越大越好呢,希望大家能给我讲 ...…

查看全部问答>

【征文】51,我的电子开山之物

51,我的电子开山之物 从小学三、四年级开始就非常喜欢电子了,可惜现在的教育制度没有提供相应条件。平时自己收集电路板,电机,LED灯,喇叭什么的东西,动手拆些电器,修一些电器。就到了大学。 大学我选的是电子信息科学与技术专业,就是冲着 ...…

查看全部问答>

主流的手机屏幕材质科普贴

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 手机屏幕作为手机组成中重要的一部分,其显示效果会直接影响到整机的体验。目前关于屏幕的概念名词非常多,让人难以区分。比如:IPS、 Retina、ASV等,很多人会认为它们代表屏幕的材质,其实不 ...…

查看全部问答>

求帮助,CCS3.3烧写F2812

大家好,我刚刚开始学习DSP,完成了F2812的硬件仿真,现在想尝试用CCS3.3给F2812烧写固化程序,遇到问题: 1.CCSv3.3的TOOLS菜单下没有on chip flash 28x的选项,请问这个是需要安装补丁软件吗? 这个是我电脑系统的问题还是其他的问题啊。。求大 ...…

查看全部问答>