ATmega128是Atmel公司(现在被Microchip收购了)的一款经典8位AVR单片机,曾经是Arduino Mega的主控芯片,在DIY圈和教学领域用得非常广泛。它比ATmega328(Arduino UNO用的)资源丰富得多,IO口多、Flash大、外设全,适合做比较复杂的项目。
AVR架构跟51单片机有几个明显区别。首先是RISC指令集,大部分指令单周期执行,同样晶振频率下运行速度比51快很多。其次是采用Harvard结构,程序存储器和数据存储器独立编址,取指和取数可以同时进行,效率更高。还有就是IO口操作更方便,每个IO口都有DDRx(方向)、PORTx(输出)、PINx(输入)三个寄存器,配置清晰直观。
ATmega128的资源相当可观:128KB的Flash程序存储器、4KB的EEPROM、4KB的SRAM,53个可编程IO口,4个16位定时器,8路10位ADC,还有UART、SPI、I2C等通信接口。对于大多数控制类项目来说,这些资源绰绰有余。它的工作电压范围2.7V到5.5V,主频最高16MHz,工业级温度范围-40°C到+85°C。
开发ATmega128最常用的环境是Atmel Studio(现在叫MPLAB X AVR版),也可以用Arduino IDE配合Mega核心。如果是裸机开发,Atmel Studio功能更全,支持在线调试和各种外设配置。编译器用的是GCC for AVR(avr-gcc),完全免费。烧录器可以用官方的Atmel-ICE,也可以用便宜的USBasp或者AVRISP mkII兼容版。
ATmega128有个很实用的功能是JTAG调试接口,可以通过JTAGICE或Atmel-ICE进行在线单步调试,查看寄存器和变量,这对调试复杂程序帮助很大。注意JTAG引脚跟普通IO口是复用的,默认JTAG是开启的,如果要用这些引脚做普通IO,需要在熔丝位里关闭JTAG,或者在程序里写MCUCR寄存器禁用。
熔丝位(Fuse Bits)是AVR单片机的一个特色,用来配置时钟源、启动时间、看门狗、JTAG等关键设置。熔丝位的修改要非常小心,特别是时钟源位,如果改错了可能导致单片机无法烧录,需要用高压编程器才能恢复。建议用Atmel Studio的图形化熔丝位配置工具,不要手动算二进制值。对新手来说,ATmega128是学习AVR架构的好选择,资源丰富、资料多,搞懂了再看其他AVR芯片都差不多。
上一篇:手机调制解调器是干啥的:基带芯片跟处理器到底什么关系
下一篇:没有了