我的ATtiny记录
这一篇博客主要讨论一下我玩过的基于SPI的ICSP编程头的DIP与SOIC封装的ATtiny。
AVR, ATtiny, 嵌入式系统, ATtiny25, ATtiny24, ATtiny441, ATtiny261, ATtiny2313, ATtiny48
--by Captdam @ Nov 12, 2024AVR系列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封装。
ATtiny25
ATtiny25 ATtiny45 ATtiny85
亮点
最小,也是最便宜的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尺寸非常小,价格也便宜,适合用来制作一些功能简单的电路,例如:
- I2C或SPI通讯节点。
- PWM生成器/舵机控制器(需要软件提高计时器分辨率)。
- 开关电源。
- 简单的可编程逻辑电路。
- 简单的可编程传感器。
- 替代例如NE555或74XX系列电路,并且支持更灵活的引脚安排,特别是这些基础逻辑电路现在供应量越来越少价格越来越高。
上图展示了一个使用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
亮点
很小,总共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完整功能
相比于ATtiny25,ATtiny24的引脚更多一些,而且包含了16-bit的计时器,能够做出更复杂的功能。例如:
- I2C或SPI通讯节点。
- PWM生成器/舵机控制器(纯硬件)。
- 相对复杂的可编程逻辑电路。
- 相对复杂的可编程传感器。
- 替代例如74XX系列电路,并且支持更灵活的引脚安排,特别是这些基础逻辑电路现在供应量越来越少价格越来越高。
ATtiny441
ATtiny441 ATtiny841
亮点
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完整功能
作为ATtiny24的升级版,ATtiny441包含了更多的硬件模块,能够用更少的代码与CPU参与做出更复杂的功能。例如:
- UART与I2C与SPI通讯节点。
- PWM生成器/舵机控制器(纯硬件)。
- 使用电脑串口控制的仪器。
ATtiny261
ATtiny261 ATtiny461 ATtiny861
亮点
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拥有更多的IO,能够满足更复杂的功能。例如:
- I2C与SPI通讯节点。
- PWM生成器/舵机控制器(纯硬件)。
ATtiny2313
ATtiny2313 ATtiny4313
和其他ATtiny相比,添加了硬件USART,能够做串口通讯;但是砍掉了ADC。
我觉得很鸡肋,但是好像也找不到别的支持USART还是DIP封装的ATtiny了。我倾向于要么使用软件UART,要么就直接上ATmega系列,或者能接受SOIC封装的话就是用ATtiny441。
ATtiny2313完整功能
ATtiny48
ATtiny48 ATtiny88
阉割版的ATmega48/88,删掉了USART模块。
我觉得很鸡肋,不如直接上ATmega48/88,价格也没差多少。