ATmega128在开发应用中应注意的问题

分享到:

ATmega128是AVR系列中功能最强的单片机,具有如下主要特点:

  (1)先进的RISC精简指令集结构:ATmega128具有133条功能强大的指令,大部分指令在单时钟周期内执行;有32b×8个通用工作寄存器;片内带有执行时间为2个时钟周期的硬件乘法器。

  (2)非易失性程序和数据存储器:ATmega128具有128KB在线可重复编程Flash、4KB的E2PROM以及4KB内部SRAM。在其BOOT区具有独立的加密位,可通过片内的引导程序实现在系统编程,写操作时真正可读。

  (3)具有JTAG接口:通过JTAG接口对Flash、E2PROM熔丝位和加密位编程。

  (4)增强的硬件功能:ATmega128具有2个带预分频器和一种比较模式的8位定时/计数器;2个扩充的带预分频器和比较模式、捕获模式的16位定时/计数器;独立振荡器的实时计数器;2通道8位PWM;6通道2~16位精度PWM;8通道10位A/D转换;输出比较调节器;8个单端通道;7个微分通道;2个增益为1x、10x或200x的微分通道;二线(I2C)串行接口;2路可编程串行UART接口;主/从SPI串 行接口;带内部振荡器的可编程看门狗定时器等。

  (5)独有的特点:上电复位和可编程的低电压检测;内部可校准的RC振荡器;5种睡眠模式,即空闲模式、ADC噪声抑制模式、省电模式、掉电模式、待命模式和扩展待命模式;可通过软件选择时钟频率;通过1个熔丝选定ATmega103兼容模式;全局上拉禁止。

  笔者通过使用ATmega128单片机,总结出在使用ATmega128过程中应注意的问题,希望能给即将使用该单片机的读者提供有用的信息。

1 ATmega128的开发工具及其应注意问题

  随着用户对编译器的要求越来越高,开发商也在不断地提高编译器对用户的方便程度。目前的大趋势是从用汇编语言开发单片机发展到用C语言开发。笔者在对开发ATmega128编译器的选择时,考虑到时间上的局限以及开发的方便性等问题,最终选择了ImageCraft的ICCAVR工具。

  ICCAVR是一种使用符合ANSI标准的C语言开发微控制器程序的工具。它集合了编译器和工程管理器的集成工作环境(IDE),可以编译生成INTEL HEX格式文件。

  ICCAVR和人们通常所用的编译器的使用的方法大同小异,故本文不再详述。本文主要对使用中应当注意的问题作一介绍。

    (1)该编译器在设置中有一项“Return Stack Size”,默认值为16,但在程序量很大而且子函数较多的情况下,该默认值就不适合了,编译时会出错。碰到这种情况建议将该选项的值改大。

    (2)在经过一段时间的使用后,发现该编译器对C语言的编译效率不是很理想。但设置当中有一编译优化选择项“Enable Code Compression”,使用它在一定情况下可以减少程序所占的空间。不过当程序在“default”编译优化选择的情况下所占的程序空间达到95%以上时,使用“Enable Code Compression”编译就会出错。所以笔者认为,虽然ATmega128具有128KB的程序空间,但在使用过程中也应当考虑到数据结构方面的问题。

  应用ICCAVR生成hex文件以后,下一步就是将hex文件烧录到ATmega128中去。笔者选用的软件是PonyProg2000。这是一款操作简单但功能强大的烧录软件,它支持包括AVR、PIC在内的多种单片机型。作者是通过PC机的并口以串行方式连接到ATmega128的JTAG接口的。在烧录的整个过程当中,最关键的问题是芯片晶振的选择以及熔丝的配置。晶振的选择较为简单,只要注意使用外部晶振还是内部晶振,并设置好相应的选项就可以了。由于ATmega128具有IAP(应用中编程)及用户可以在应用程序中对Flash块、加密位等实现擦除和编程等操作功能,而熔丝位的设置正是实现IAP功能的必要条件,因此可以通过ATmega128的用户手册再根据自己需要的实际情况来进行设置。正确的晶振和熔丝设置都是必不可少的,否则不能正确下载。这一步非常重要应特别注意,以免走弯路。下面介绍使用晶振和熔丝的设置方法。

  这里采用PonyProg2000中“configruation and security bits”菜单命令来进行设置,其界面如图1所示。

  (1)晶振的设置方法

  菜单中CKSEL0~CKSEL3是设置晶振的选项。ATmega128由于有内部晶振,所以首先要确定是外部晶振还是内部晶振。表1给出了内、外部晶振的范围。表2和表3给出了内、外部晶振频率的设置方法。

  (2)熔丝位的设置方法

通过JTAG接口来实现对熔丝的设置,只要设置好如图1所示的相应位,就可以实现不同的功能。关于熔丝每一位的功能,首先需要说明的是,在对熔丝位进行设置时,如果读出该位为“0”,说明该位已被设置;该位为“1”则未被设置。ATmega128中一共有3个字节是有关熔丝的设置。其中第1个字节只用到了低2位,分别是WDTON(看门狗始终开)和M103C(ATmega103兼容模式);第2个字节的低4位是CLK0~CLK3,高4位分别是SUT0、SUT1(启动时间选择)、BODEN(低功耗检测使能)、BODLEVEL(低功耗检测触发程度);第3个字节的每一位分别是:BOOTRST(复位向量选择)、BOOTSZ0、BOOTSZ1(BOOT区大小选择)、EESAVE(芯片擦除过程中E2PROM内容保持)、CKOPT(选择晶振操作)、SPIEN(串行下载程序使能,在PonyProg2000中没有这一位是因为PonyProg2000本身通过串行下载程序,故不能修改)、JTAGEN(JTAG使能)、OCDEN(OCD使能,OCD即ON CHIP DEBUG)。

  ATmega128有6个位锁位,其中BOOTLOCK12、BOOTLOCK11、BOOTLOCK02、BOOTLOCK01是关于BOOT区的4个位锁位,而LOCK2和LOCK1则是熔丝位的位锁位。可以通过设置熔丝位锁位来选择使用相应的功能。所以在使用熔丝位功能以前一定要先设置相应的“解锁”,即将LOCK2和LOCK1都设置为“1”。

  若用ICCAVR来开发编译软件,再通过PonyProg2000将程序直接下载到ATmega128芯片中去,可以即时地将程序思想反映到要实现的功能上来,便于即时地修改程序中的错误,大大缩短产品的开发时间。

2 使用ATmega128芯片本身应注意的问题

  ATmega128和51系列单片机基本上是2种不同的开发方式,在笔者使用过程中,总结出了以下一些常见的但必须重视的问题。

  (1)管  脚

  ATmega128具有丰富的管脚资源,一共有8个端口共53个I/O引脚,而且每一个I/O引脚都可以通过编程来设置输入、输出方式。ATmega128的每一个端口都有3个寄存器与之对应,现以PA口为例来说明管脚的设置。①方向寄存器DDRA。DDRA的每一位对应于PA口的1个I/O管脚,相应的位为1,则将该管脚设置为输出引脚;为0则设置为输入引脚。②是输出寄存器PORTA。用来存放ATmega128输出的数据。③输入寄存器PINA,用来存放ATmega128输入的数据。在对PA口进行具体操作时,首先应该设置好DDRA,然后根据DDRA来选用PORTA或者PINA(注意一定不要搞错方向)。

  此外,ATmega128自带输入上拉电阻功能,通过设置即可以实现其功能。例如将PA口设为输入口并且加上拉电阻,可以如下设置:

  DDRA=0x00;  //将PA口设置为输入端口

  PORA=0xff;  //将PA输入口加上拉电阻

  (2)位操作的使用方法

  采用ICCAVR对ATmega128的位操作的使用方法比较麻烦,不像51系列那样可以直接对某一个引脚进行置0或置1,而是要通过如下的方法进行位操作:

  如要对PA端口的第1位置1,则用C语言必须按PORTA|=(1<

  这样就可以单独对某一位操作而不影响其他位。位操作对其他寄存器也同样适合,例如若要对某个口的几位设为输入,某几位设为输出,就可以通过上面的置1、置0方法来实现。

  (3)中  断

  ATmega128中断资源丰富,一共有35个中断源,在ICCAVR的iom128v.h头文件中给出了这些中断源对应的中断向量表。当用到相应的中断时,首先应设置好对应的中断向量。用ICCAVR设置ATmega128中断的方法与Keil51设置中断的方法截然不同,例如若需要将ATmega128的串口0设置为中断接收,就必须在程序中做如下设置:

  #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC

  否则程序不能中断接收,延长开发过程。

  ATmega128作为一种功能强大的芯片,相信会在不同的领域发挥不同的作用,为此需要人们不断地提高对ATmega128的认识。而且ATmega128与AVR等其他单片机如ATmega8、ATmega103、AT90S8535系列有相同的开发方法,掌握了ATmega128就可以在开发其他AVR类型的单片机时应用自如。

参考文献

1  USA:Atmel Corporation.ATmega128(L)Datasheet,2001

2  丁化成.AVR单片机应用设计.北京:北京航空航天大学出版社,2002

继续阅读
SKT之AVR硬件I2C的操作函数

STK600 之 Atmega128硬件I2C 读写高精度时钟芯片DS3231函数,STK600 用于程序的下载 连接JTAG口至mega128目标板即可,分享给大家参考。

ATMEGA128熔丝位配置详解

本文以AVR系列的ATmega128单片机为例,详细介绍熔丝位的配置以及在配置过程中常出现的一些问题,并给出相应的解决办法,成功地解决了因熔丝位配置不当而引起的单片机不能正常工作和死锁等一系列问题。

Atmega128中文资料

ATmega128是ATMEL公司的 8位系列单片机的最高配置的一款单片机,应用极其广泛。

基于ATmega128的16路遥控单元设计及应用

本文介绍一款具有16路遥控接点输出的ARTU-J16,该装置通过RS485总线与上位机相连,作为远程继电器输出模块,用于接收计算机指令,执行系统的遥控操作或自动控制,继电器输出共16路,装置拥有1600组操作事件记录,带GPS校时功能,在外部电源掉电后可以保证SOE事件记录一个月内不丢失,相对以往控制方式,本设计在简化控制网络结构的同时,提供了一种低成本,高可靠性的替代方案。

基于ATmega128的粮库无线温湿度传感器网络的监测节点设计

本设计实现了以高档8位AVR单片机ATmega128L为核心,结合外围温湿度传感器SHT11和无线收发芯片CC2420的粮库无线传感器网络节点。

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss