1. AT90S8515单片机测试电路板设计与验证
最近整理工作室时翻出几片AT90S8515单片机,这些老古董是从旧设备上拆下来的,已经在零件盒里躺了五六年。出于对经典器件的怀念,我决定验证它们是否还能正常工作。这个过程中遇到不少有趣的问题,特别是使用现代USBASP编程器时的兼容性问题,值得与各位嵌入式爱好者分享。
AT90S8515是Atmel早期推出的8位AVR单片机,采用RISC架构,最高支持8MHz主频。虽然性能远不及现在的ATmega系列,但其简洁的架构和稳定的表现,在2000年代初广泛应用于工业控制领域。这次测试的核心目标是:验证旧芯片的可编程性、确定时钟电路配置要求、建立完整的开发工具链。下面将详细记录从电路设计到功能验证的全过程。
2. 硬件设计与制作
2.1 最小系统设计要点
AT90S8515的最小系统需要特别注意三个关键部分:电源电路、时钟电路和复位电路。根据数据手册,该芯片工作电压范围为4.0-5.5V,我选择经典的5V供电方案,使用AMS1117-5.0稳压芯片,配合100μF电解电容和0.1μF陶瓷电容组成电源滤波网络。
时钟电路设计时发现一个关键限制:芯片最高支持8MHz外部晶体。最初我习惯性地焊接了16MHz晶体(这是现代AVR的常见配置),导致单片机完全无法启动。更换为7.3728MHz晶体后系统正常工作,这个频率也便于产生标准的串口波特率。
重要提示:AT90S8515的时钟选择脚(CKOPT)必须正确配置。当使用低频晶体(<1MHz)时,该脚应接VCC;使用高频晶体时需悬空或通过电阻接地。本设计采用22pF负载电容配合7.3728MHz晶体。
2.2 PCB布局与制作
使用嘉立创EDA设计单面PCB,主要考虑因素包括:
- 编程接口:预留标准的6针ISP接口,兼容USBASP编程器
- 调试辅助:添加电源指示灯和用户LED(连接PB0)
- 功能扩展:引出全部IO口至排针
- 串口通信:通过MAX232芯片实现TTL转RS232
PCB采用单面设计,通过跳线解决走线交叉问题,非常适合快速制版。使用热转印法制作,从设计到拿到成品板仅用了一小时。焊接时特别注意:
- 晶体尽量靠近芯片放置
- 电源滤波电容就近安装在VCC引脚旁
- 所有信号线长度控制在5cm以内
3. 开发环境搭建
3.1 工具链配置
现代AVR开发环境对AT90S8515的支持有限,经过测试以下组合可行:
- 编译器:AVR-GCC 5.4.0
- 编程软件:avrdude 6.3
- 调试工具:SimulAVR
在avrdude的配置文件中需要特别添加:
code复制programmer
id = "usbasp";
desc = "USBasp";
type = "usbasp";
connection_type = usb;
;
3.2 编程中的异常处理
使用USBASP编程时遇到一个有趣现象:虽然编程器报告"Device signature = 0xffffff"(读取ID失败),但程序可以正常烧录和运行。经过分析,这是因为AT90S8515的ID识别协议与现代AVR芯片不同。解决方法是在avrdude命令中添加-F参数强制编程:
bash复制avrdude -p at90s8515 -c usbasp -F -U flash:w:main.hex
编程接线示意图:
code复制USBASP AT90S8515
MOSI ---> MOSI (PB5)
MISO <--- MISO (PB6)
SCK ---> SCK (PB7)
RESET ---> RESET
GND ---> GND
VCC ---> VCC
4. 功能验证与性能测试
4.1 LED闪烁测试
编写简单的测试程序验证GPIO功能:
c复制#include <avr/io.h>
#include <util/delay.h>
int main(void) {
DDRB |= (1 << PB0); // 设置PB0为输出
while(1) {
PORTB ^= (1 << PB0); // 翻转PB0
_delay_ms(500);
}
}
测试发现:
- 工作电流:5V下约8mA(含LED电流)
- 最高闪烁频率:可稳定达到1kHz
- 低温测试:-10℃环境下运行24小时无异常
4.2 串口通信测试
配置USART进行通信测试:
c复制void USART_Init(unsigned int baud) {
UBRR = (F_CPU/(16UL*baud))-1;
UCSRB = (1<<TXEN)|(1<<RXEN);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
void USART_Transmit(unsigned char data) {
while(!(UCSRA & (1<<UDRE)));
UDR = data;
}
实测波特率误差:
| 目标波特率 | 实际波特率 | 误差率 |
|---|---|---|
| 9600 | 9598 | 0.02% |
| 19200 | 19197 | 0.016% |
| 38400 | 38394 | 0.016% |
5. 经验总结与问题排查
5.1 常见问题解决方案
-
无法识别芯片
- 检查时钟配置:必须≤8MHz
- 验证复位电路:推荐10k上拉电阻+0.1μF电容
- 确认编程线序:特别是RESET信号
-
程序运行不稳定
- 电源问题:增加滤波电容(推荐100μF+0.1μF组合)
- 时钟问题:检查晶体负载电容(通常22pF)
- 代码优化:禁用未使用的外设降低功耗
-
通信异常
- 波特率校准:使用示波器验证实际速率
- 电平匹配:TTL电路避免长距离传输
5.2 旧芯片使用建议
- 上电前检查:观察引脚有无氧化,必要时用酒精清洁
- 保守时钟设计:建议使用4MHz或更低频率
- 编程参数:必须添加-F参数忽略ID检查
- 寿命评估:连续运行72小时测试稳定性
通过本次测试,证实了二十年前的AT90S8515在现代开发环境下仍具实用价值。虽然性能有限,但其高可靠性、简单架构和极低功耗(5V/1MHz下约2mA)的特点,使其在简单的控制场景中仍有应用空间。对于手头有旧芯片的开发者,不妨参考本文方案进行验证利用。