
简介这是一份面向ATtiny13单片机入门者与嵌入式开发者的开发板资料包围绕AVR架构的8位低功耗微控制器提供从硬件原理、芯片手册到实例代码的一站式参考适合用于智能家居、物联网小节点或教学实验中的小型控制项目。整个压缩包大小约12.49MB共收录237个文件主要文件类型包括C语言源码、hex固件、工程与编译辅助文件以及PDF格式的电路原理图和中文芯片手册基本覆盖了从源码编写、固件烧录到硬件排查的完整开发流程。资料已有274人学习下载。包内开发板原理图可帮助理解电源管理、晶振连接和编程接口设计tiny13中文手册则详细说明了寄存器、指令集和定时器/计数器等关键规格多组实例程序则演示了PWM控制LED亮度、ADC模拟采集、按键输入和定时器中断等常见操作可直接在Atmel Studio或Arduino IDE中打开参考。工程文件按照功能划分便于对照学习和二次移植适合作为小型低功耗系统设计的起步模板。 ATtiny13这颗8脚小芯片可以说是入门单片机里被低估最严重的一颗。1KB的Flash、64字节的RAM听起来连一个像样的“Hello World”都塞不下但正是这种极致抠门的资源逼着你去想清楚每一行代码、每一个寄存器位反而能把基本功练得很扎实。这篇文章我把ATtiny13开发板相关的资料和实战经验一次性整理清楚包括芯片能力边界、怎么选开发板或手搓最小系统、工具链怎么搭、熔丝位怎么设置、外设怎么点起来最后还有一堆实际踩过坑的记录。适合刚接触AVR的初学者也适合老手拿来当快速参考手册。1. 先搞明白ATtiny13到底能干什么1.1 资源盘点一颗8脚芯片的极限ATtiny13是Microchip原Atmel的一款8位AVR单片机后缀带A的是改进版本目前主流买到的基本是ATtiny13A。它的完整资源可以列一张表资源规格我的实际理解Flash程序存储1KB大概几百行C代码写太多就要开始做减法SRAM64字节全局变量加局部变量稍微不注意就爆EEPROM64字节存配置参数够用别指望存日志引脚8个其中6个I/OPDIP8或SOP8封装全部映射到PORTB时钟内部RC最高9.6MHz/8MHz默认8MHz也可以外部晶振外设1个8位定时器、4路ADC、模拟比较器、看门狗麻雀虽小五脏俱全我第一次用这芯片时以为64字节SRAM怎么着也够用了结果写了个稍复杂一点的状态机变量一多编译直接报错。后来养成了习惯能用uint8_t就不用int能查表就不算浮点这些在别的单片机上属于“优化洁癖”在ATtiny13上是生存刚需。1.2 项目定位哪些场景用它哪些千万别用拿这颗芯片别去做跑操作系统的梦也别想着人工智能、网络协议栈那都是“用大炮打苍蝇”的思路。ATtiny13适合的恰恰是那些只需要一万行以内逻辑的小活简单的LED闪烁、呼吸灯效果传感器阈值检测比如光敏电阻判断明暗后输出信号电池供电的小设备配合睡眠模式能用很久替换纯逻辑电路的场景比如用PWM调光代替555定时器学习AVR底层寄存器操作因为它足够简单数据手册反而好读反过来如果项目需要串口通信的同时还要PWM输出并且处理外部中断引脚和资源就非常吃紧了。这种时候老老实实换ATtiny85或者STM32、ESP32别硬在一棵树上吊死。有一次我想让它同时驱动两个独立PWM并处理按键结果发现定时器只有一个最后只能靠软件模拟PWM效果也凑合但代码量和稳定性都吃了亏。2. 开发板从哪来买成品还是自己画2.1 买成品开发板的注意点市面上的ATtiny13成品开发板不算多常见的形式是“最小系统板”加上排针有的会集成USB转串口或LED。买成品时别只看照片要问清楚三件事第一芯片用的是ATtiny13还是ATtiny13A两者手册相近但程序和熔丝位细节有差异。第二是否引出了ISP烧录接口如果没有自己焊线会很痛苦。第三板载供电有没有稳压电路如果只接5V电源做逻辑没问题但直接给3.3V模块供电时要注意电平匹配。另外不少商家会把ATtiny13吹成“Arduino兼容开发板”严格说在Arduino IDE里装好ATTinyCore内核后程序框架确实兼容但跑起来之后你会发现Serial串口是没有的默认的delay(1000)也要靠软件延时实现。期望值先放低它就是颗“用Arduino语法写寄存器代码”的小芯片。2.2 手搓最小系统原理图和走线细节我更推荐自己焊一块ATtiny13最小系统板成本几块钱还能彻底理解芯片工作条件。照着官方数据手册最小系统只需要四个要素电源VCC接1.8V到5.5V均可去耦电容用100nF贴在VCC和GND之间复位脚PB5RESET上拉一个10k电阻到VCC防止噪声误复位烧录接口6针ISP引到排针时钟默认内部RC振荡器不需要外部晶振和电容这里我要强调一下去耦电容的位置别小看这颗100nF。ATtiny13虽然功耗低但在PWM切换或者驱动LED瞬间电流尖峰会拉低VCC如果电容离芯片引脚太远走线的寄生电感会让这个尖峰更严重轻则程序跑飞重则烧录失败。我习惯把电容焊在芯片供电脚正下方而不是板子边缘。如果是手工洞洞板布局尽量让VCC和GND形成一条“主干道”信号线不要绕大圈。芯片引脚间距是2.54mm标准配合排针座焊起来很顺手。2.3 烧录接口做对后面少走一半弯路6针ISP接口是玩ATtiny13的核心脚位定义如下ISP引脚连接到芯片引脚说明VCCVCC编程器供电也可目标板自供电GNDGND必须共地MOSIPB0数据输入MISOPB1数据输出SCKPB2时钟输入RESETPB5编程使能复位脚焊好之后我建议先别急着接编程器用万用表量一遍每个脚到芯片对应引脚的导通再量一遍VCC和GND有没有短路。接线错位是初学者最常遇到的问题尤其是把MOSI和MISO搞反编程器会提示“target doesnt answer”根本连不上。3. 开发资料与工具链准备3.1 官方资料优先看这些玩ATtiny13资料最权威的来源就是Microchip官网的ATtiny13A数据手册文档编号DS40002061大概180多页看似很长但别被吓住真正需要精读的只有三部分引脚配置、寄存器描述、熔丝位说明。其余很大篇幅是电器特性表选电池供电方案时才有参考价值。除了数据手册有两份应用笔记值得留意。AVR042讲的是AVR硬件设计注意事项比如去耦、复位、编程时序做板子前翻一遍很管用。AVR910是应用内自编程ATtiny13基本用不上但能帮你理解Flash的读写机制。社区方向强烈推荐MCUdude的microCore内核这是目前对ATtiny13系列支持最完善的Arduino内核另一位作者Spence Konde的ATTinyCore也很好两者选一个即可注意别混用。3.2 编译和烧录环境搭建开发ATtiny13有两条路线一是纯命令行用avr-gcc加avrdude二是Arduino IDE加microCore内核。无论哪条底层都是同一个工具链。先说命令行路线Ubuntu或树莓派上安装就是三行命令sudo apt install gcc-avr avr-libc avrdude然后写一个点灯程序编译avr-gcc -mmcuattiny13 -Os -o led.elf led.c avr-objcopy -O ihex led.elf led.hex avrdude -c usbasp -p t13 -U flash:w:led.hex注意-p参数ATtiny13在avrdude里的型号名就是t13写成attiny13在某些版本里也能识别但最稳的还是t13。-Os优化选项对这颗芯片特别重要因为Flash只有1KB优化级别直接决定代码塞不塞得下。Arduino IDE路线更简单在“开发板管理器”中搜索“microCore”或“ATTinyCore”安装然后在开发板列表里选ATtiny13时钟频率选“8 MHz internal”烧录器选你的编程器型号。但注意用Arduino框架时要关掉它默认的Serial相关初始化否则编译器会为了没用的串口代码浪费大量Flash。3.3 熔丝位小芯片最容易翻车的地方熔丝位是AVR系列一个“特色”它像芯片的开机设置项直接决定时钟源、复位脚是否可用、BOD电压等级等。ATtiny13常用默认值lfuse 0x6A内部8MHz RC振荡器BOD使能hfuse 0xFF复位脚作为复位EEPROM保留新手最容易犯的错误是觉得“熔丝位一旦写错还能改回来”结果把复位脚也禁用成了普通IO这会导致ISP编程器再也无法连接。官方HEX文件里一般也不需要动熔丝位只有在你想省功耗关掉BOD、或者换外部晶振时才需要修改。修改前务必用avrdude -U lfuse:r:-:h先读一遍当前值修改用avrdude -U lfuse:w:0x62:m这种格式。我强烈建议在桌边贴一张当前熔丝位值的便利贴不然放几天就忘了。4. 从点亮一颗LED开始外设实操4.1 GPIO操作与点灯程序ATtiny13所有引脚归在PORTB一组里操作方式和所有AVR一致DDRB控制方向PORTB控制输出或上拉。最简单的点灯程序#define F_CPU 8000000UL #include avr/io.h #include util/delay.h int main(void) { DDRB | (1 PB0); // PB0设为输出 while (1) { PORTB ^ (1 PB0); _delay_ms(500); } return 0; }看这段代码你就能理解为什么我建议学ATtiny13它剥掉了所有抽象层让你直接直面寄存器。Arduino里的digitalWrite(PB0, HIGH)看着省事实际执行一堆判断和掩码操作在这颗只有8MHz时钟的芯片上效果真不如直接操作端口。点灯成功之后可以试着把多个LED分别接在PB0到PB3用PORTB 0x0F一次性点亮省代码又省时间。4.2 定时器、PWM与ADCATtiny13唯一的定时器是8位Timer0它能做基本的计时和PWM输出。PWM输出固定绑定在PB0OC0A和PB1OC0B上要调占空比就设置OCR0A和OCR0B要调频率则设置分频。实际项目中做呼吸灯、调光、蜂鸣器发声都用它。ADC方面ATtiny13内部有4路10位ADC通道对应关系是ADC0在PB5ADC1在PB2ADC2在PB4ADC3在PB3。注意PB5在复位状态下是复位脚如果要用它做ADC必须在熔丝位里把RSTDISBL置位禁用复位功能这是一条不归路之后只能用高压编程器恢复新手别轻易尝试。比较保险的做法是把光敏电阻或电位器接在PB2或PB4上程序里设置ADMUX选择对应通道启动转换后读ADCL和ADCH。读ADC值不需要额外库代码也只要十几行#include avr/io.h uint16_t read_adc(uint8_t ch) { ADMUX ch 0x03; // 选择通道 ADCSRA (1 ADEN) | (1 ADSC) | (1 ADPS2); while (ADCSRA (1 ADSC)); return ADC; }ADC采样过程中供电电压要稳定最好在VCC到GND之间并一个10uF电解电容不然数字跳动会很大。4.3 低功耗睡眠电池项目必须掌握ATtiny13在低功耗领域的口碑不错功耗可以压到微安级。实现方式是用库自带的睡眠模式加上看门狗唤醒#include avr/sleep.h #include avr/wdt.h void setup_sleep(void) { set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); } void wdt_init(void) { // 使能看门狗中断每8秒唤醒一次 WDTCR (1 WDIE) | (1 WDP3) | (1 WDP0); } ISR(WDT_vect) { // 醒来后清看门狗标志重新使能中断 WDTCR | (1 WDIE); }实际测试下来PB5引脚如果有不可靠的上拉或外部电路睡眠电流可能从3uA飙到100uA排查的时候先把所有外设断开只保留最小系统一个一个接回来很快就能找到罪魁祸首。还有就是内部RC振荡器在睡眠时也会保持运行虽然功耗很低但如果要求电池续航超过半年建议用外部32.768kHz晶振加看门狗计时策略这个方案在ATtiny13的手册里有专门讨论。5. 常见问题排查与优化实录5.1 编程器连不上怎么办玩ATtiny13十次有八次问题出在烧录环节。最常见报错是avrdude: error: program enable: target doesnt answer avrdude: initialization failed, rc-1出现这个先按顺序排查一是接线重点查MOSI/MISO是否接反RESET是否到了PB5二是编程器型号如果是USBasp老版本默认速度太快ATtiny13这种老芯片跟不上加上慢速参数avrdude -c usbasp -B 10 -p t13 -U flash:w:led.hex-B 10表示SCK周期10us相当于降速能解决很多奇怪连不上的问题。还有一种情况是目标板自己带了电源编程器的VCC和目标板的VCC冲突建议烧录时只保留一路供电。5.2 芯片“锁死”后的恢复思路如果只是普通熔丝位配置错误比如BOD等级设错导致芯片一直复位可以用编程器重新写熔丝位恢复。真正麻烦的是把RSTDISBL熔丝位置位把复位脚变成普通IO此时ISP接口完全失效常规编程器都回天乏力。恢复手段有两种一是支持高压串行编程HVSP或高压并行编程HVPP的编程器比如老款AVR Dragon或者自己搭高压电路原理是给RESET脚加12V高压让芯片进入特殊编程模式二是用一个完好的同型号芯片读取它的熔丝位做参考然后配合芯片擦除操作反复尝试。老实说除非是批量生产需要否则我建议直接换芯片ATtiny13单价才一两块钱花两小时去救一颗不如痛快点。预防锁死的核心口诀是不改RSTDISBL其他熔丝位操作前先读后写、写前三思。5.3 Flash不够用的优化策略当程序编译结果显示超过1024字节时不要急着删功能优先做这几件事把Arduino框架换成纯C/寄存器操作立省几百字节把重复的延时逻辑改用一个共享函数编译器会自动内联优化大表格用PROGMEM存到Flash而不是SRAM比如七段数码管段码表能用8位变量就不要用16位数学运算能近似就不要精确关掉不用的模块比如不用ADC时不要使能ADEN我做过一个比较极限的项目要在ATtiny13上同时实现按键防抖、LED呼吸、两段定时提醒最后精简到970字节。当时为了省最后的50字节把300行的switch-case改成查表加位运算还专门把函数参数从int改成uint8_t编译结果一下降了80字节。这种“斤斤计较”的过程比用任何大型单片机都锻炼人。5.4 计时精度和时间基准的坑ATtiny13使用内部RC振荡器时默认精度大概是正负百分之二到百分之三而且受温度和电压影响会漂移。做LED闪烁这类应用无所谓但如果用它做串口波特率或者实时时钟就会出现偏差。排查技巧是写一个最简单的翻转IO程序用示波器测频率再反推实际主频。如果偏差在可接受范围代码里调整F_CPU宏就行如果偏差很大可以用OSCCAL寄存器校准但这是每个芯片单独校准不适合批量。绝对要求精准的场景还是上外部晶振把熔丝位改成外部时钟源。说回这块开发板的实际价值我个人看法是ATtiny13看起来像玩具但它逼着你把底层原理和资源管理搞明白。我在折腾完几个项目之后再看STM32和ESP32的复杂框架脑子里始终清楚每个外设到底在操作什么寄存器。如果你也想找一颗便宜、简单、能让你彻底“钻进去”的芯片这颗8脚小家伙非常值得一试。最后建议玩它的时候养成看数据手册的习惯遇到问题先查手册再问搜索引擎这个习惯会长期受益。本文还有配套的精品资源点击获取