我的ATtiny记录

这一篇博客主要讨论一下我玩过的基于SPI的ICSP编程头的DIP与SOIC封装的ATtiny。

--by Captdam @ 2024-08-11 20:26 GMT edited

[en] Here is the English version of this article

AVR系列8位单片机可以分为轻装上阵的ATtiny系列,例如ATtiny25;和功能强大的ATmega系列,例如作为Arduino UNO核心的ATmega328。笼统地来说,ATtiny系列引脚少,内部硬件功能少,且缺乏乘法器,但是价格更低廉;ATmega系列引脚多,带有完整支持的硬件通讯模块,能够制作出功能更强大的系统,但是相应的价格也更高。值得一提的是,无论是ATtiny系列还是ATmega系列,CPU的功能与速度(除了没有乘法器)都是一摸一样(对于寻址空间超过16KB的芯片,比如说ATmega2560,读写数据与程序跳转反而需要额外一个时钟,所以更慢了)。

因为我使用的是机械切割覆铜板制作PCB,因此我更喜欢能够制作出小尺寸PCB的设计,因为可以节约铣的时间,也容许更大的基板不平整造成的误差。但是因为铣刀刀头尺寸的限制,我制作的PCB的走线最低只能到0.007-inch(0.2mm)的工艺,也就是说,只能稳定制造使用引脚间距2.54mm的DIP或间距1.27mm的SOIC封装的芯片的PCB。当然,对于IC以外的引脚密度不高的环境,是可以做到更细的走线的,比如使用2N7002这样的SOT-23封装。

我的嵌入式系统PCB制作
我的嵌入式系统PCB制作

ATtiny25

ATtiny25 ATtiny45 ATtiny85

ATtiny25引脚
ATtiny25引脚 - ATtiny25/45/85 [DATASHEET]截图

亮点

最小,也是最便宜的AVR(现在有更小的ATtiny4,但是使用TPI编程),能够制作超小的电路。

8个引脚,5个IO,再加上1个可选择的RESET/IO(但是我非常不建议使用RESET角做IO)。

麻雀虽小五脏俱全,有EEPROM和SRAM(是的,有的AVR甚至没有SRAM,全靠32个或16个通用寄存器),有两个8-bit计时器,有USI(我愿称之为阉割版的I2C+SPI),有ADC甚至支持差分放大器。

此外,计时器还支持Dead time generator,可以用作开关电源。

ATtiny25完整功能
ATtiny25功能
ATtiny25功能 - ATtiny25/45/85 [DATASHEET]截图

ATtiny25尺寸非常小,价格也便宜,适合用来制作一些功能简单的电路,例如:


基于ATtiny25制作的I2C指令3路舵机控制器
基于ATtiny25制作的I2C指令3路舵机控制器

上图展示了一个使用SOIC封装的ATtiny25制作的3路舵机控制器。其中支持USI的两个IO用作I2C通讯,另外三个IO作为PWM(严格来说应该叫PPM)信号输出。因为ATtiny的计时器只有8-bit宽度,精度不足以生成0.5ms-2.5ms/20ms的PWM信号,所以使用软件PWM。不过这一个嵌入式系统功能简单,CPU完全由能力应付基于USI的半软件通讯与高精度软件PWM。

ATtiny24

ATtiny24 ATtiny44 ATtiny84

ATtiny24引脚
ATtiny24引脚 - ATtiny24/44/84 [DATASHEET]截图

亮点

很小,总共14个引脚,11个IO,再加上1个可选择的RESET/IO(同样,我非常不建议使用RESET角做IO)。

  • 其中8个IO在PORTA,所以能够提供一个完整的8-bit接口,更重要的是这八个引脚是按照顺序排列。所以,PORTA非常方便用于和并行总线交互,例如LCD1602。
  • PORTB的四个引脚中,两个引脚可以接外部晶振,一个引脚可以作为RESET。

有EEPROM和SRAM,有一个8-bit计时器和一个16-bit计时器,有USI通讯模块,有ADC甚至支持差分放大器。

ATtiny24完整功能
ATtiny24功能 1
ATtiny24功能 - ATtiny24/44/84 [DATASHEET]截图
ATtiny24功能 2
ATtiny24功能 - ATtiny24/44/84 [DATASHEET]截图

相比于ATtiny25,ATtiny24的引脚更多一些,而且包含了16-bit的计时器,能够做出更复杂的功能。例如:

ATtiny441

ATtiny441 ATtiny841

ATtiny441引脚
ATtiny441引脚 - ATtiny441/841 [DATASHEET]截图

亮点

ATtiny24的升级替代品,完全兼容ATtiny24的功能与引脚。ATtiny24能做的ATtiny441都能做,ATtiny24不能做的ATtiny441也能做。

有EEPROM和SRAM。

有一个8-bit计时器和一个16-bit计时器,可以选择输出的IO。

两套模电比较器,更多的ADC输入选择并支持差分放大器。

两套UART/USART通讯模块,一套SPI通讯模块,一套I2C从机模块,并且可以选择IO引脚。完全硬件支持多种通讯独立工作,不再需要半软件的USI。

缺点

比ATtiny24贵一点(ATtiny441现在比ATtiny44贵10% - 2024年7月Digikey上价格),但是在将来为了ATtiny24迭代,可能ATtiny24会变得更贵。

没有DIP封装,必须要制作PCB或是使用转接板,对洞洞板玩家很不友好。

ATtiny441完整功能
ATtiny441功能
ATtiny441功能 - ATtiny441/841 [DATASHEET]截图

作为ATtiny24的升级版,ATtiny441包含了更多的硬件模块,能够用更少的代码与CPU参与做出更复杂的功能。例如:

ATtiny261

ATtiny261 ATtiny461 ATtiny861

ATtiny261引脚
ATtiny261引脚 - ATtiny261/461/861截图

亮点

ATtiny26的升级替代品,完全兼容ATtiny26的功能与引脚。(ATtiny26现在比ATtiny261还贵 - 2024年7月Digikey上价格)

总共20个引脚,15个IO,再加上1个可选择的RESET/IO(同样,我非常不建议使用RESET角做IO)。

  • 芯片一侧为供电与地,另一侧为模电模块供电与地。但是也不是不使用ADC就可以不接电,我制作PCB时一般直接连接左右两侧的供电和地,但是麻烦的是需要画一个X。
  • 芯片一侧为按照顺序排列的PORTA与可选择的USI,主要作为模电输入。
  • 芯片一侧为按照顺序排列的PORTB与可选择的USI,部分可作为模电输入,部分可作为计时器IO。

有EEPROM和SRAM。

有一个8/16-bit计时器和一个8/10-bit计时器,可以输出计时器的正反信号对。

有ADC并支持不同增益的差分放大器。

有USI通讯模块,可选择IO引脚。

ATtiny261完整功能
ATtiny261功能
ATtiny261功能 - ATtiny261/461/861截图

ATtiny261拥有更多的IO,能够满足更复杂的功能。例如:

ATtiny2313

ATtiny2313 ATtiny4313

ATtiny2313引脚
ATtiny2313引脚 - ATtiny2313A/4313截图

和其他ATtiny相比,添加了硬件USART,能够做串口通讯;但是砍掉了ADC。

我觉得很鸡肋,但是好像也找不到别的支持USART还是DIP封装的ATtiny了。我倾向于要么使用软件UART,要么就直接上ATmega系列,或者能接受SOIC封装的话就是用ATtiny441。

ATtiny2313完整功能
ATtiny2313功能
ATtiny2313功能 - ATtiny2313A/4313截图

ATtiny48

ATtiny48 ATtiny88

ATtiny48引脚
ATtiny48引脚 - ATtiny2313A/4313截图

阉割版的ATmega48/88,删掉了USART模块。

我觉得很鸡肋,不如直接上ATmega48/88,价格也没差多少。

ATtiny48完整功能
ATtiny48功能
ATtiny48功能 - ATtiny2313A/4313截图