Les microcontrôleurs AVR ultra-compacts à 8 broches — parfaits pour les projets miniatures
Les ATtiny sont les plus petits membres de la famille AVR. Avec seulement 8 broches et un encombrement minimal, ils sont parfaits pour les projets où l'espace, le coût et la consommation d'énergie sont critiques. On les retrouve dans les veilleuses, les minuteurs, les capteurs autonomes, les gadgets DIY et même les installations artistiques.
Les deux modèles les plus populaires sont l'ATtiny13 (le plus petit et le moins cher) et l'ATtiny85 (plus puissant, avec plus de mémoire et de périphériques). Ils sont programmables en C avec AVR-GCC, exactement comme l'ATmega328P, et partagent la même architecture AVR et les mêmes concepts de registres (DDR, PORT, PIN).
| Spec | ATtiny13 | ATtiny85 | PIC12F683 |
|---|---|---|---|
| Architecture | AVR 8 bits | AVR 8 bits | PIC mid-range 8 bits |
| Broches | 8 (6 GPIO) | 8 (6 GPIO) | 8 (6 GPIO) |
| Flash | 1 Ko | 8 Ko | 3.5 Ko |
| SRAM | 64 octets | 512 octets | 128 octets |
| EEPROM | 64 octets | 512 octets | 256 octets |
| Fréquence max | 20 MHz | 20 MHz | 20 MHz |
| Oscillateur interne | 9.6 / 4.8 / 1.2 MHz | 8 / 1 MHz | 8 / 4 / 1 / 0.031 MHz |
| ADC | 4 canaux, 10 bits | 4 canaux, 10 bits | 4 canaux, 10 bits |
| PWM | 2 canaux | 3 canaux | 1 canal (CCP1) |
| Timers | 1 (8 bits) | 2 (8 bits) | 3 (8+16 bits) |
| Communication | USI (soft) | USI (I2C/SPI soft) | Aucune (soft) |
| Prix | ~0.50 € | ~1.50 € | ~1.50 € |
L'ATtiny85 a un brochage très similaire au PIC12F683 — 8 broches dans un boîtier DIP-8 :
| Pin | Nom | Fonctions |
|---|---|---|
| 1 | PB5 / RESET / ADC0 / dW | Reset (par défaut) ou GPIO/ADC si fuse modifié |
| 2 | PB3 / ADC3 / OC1B / XTAL1 | GPIO, ADC, PWM Timer1, oscillateur externe |
| 3 | PB4 / ADC2 / OC1B / XTAL2 | GPIO, ADC, PWM, oscillateur externe |
| 4 | GND | Masse |
| 5 | PB0 / MOSI / OC0A / SDA | GPIO, SPI MOSI, PWM Timer0, I2C Data |
| 6 | PB1 / MISO / OC0B / OC1A | GPIO, SPI MISO, PWM Timer0/Timer1 |
| 7 | PB2 / SCK / ADC1 / SCL | GPIO, SPI Clock, ADC, I2C Clock |
| 8 | VCC | Alimentation (1.8V – 5.5V) |
⚠️ Attention — Broche RESET (PB5) : Par défaut, la broche 1 est configurée comme RESET. Elle peut être reconfigurée en GPIO via les fuses, mais cela désactive la programmation ISP. Vous aurez alors besoin d'un programmateur haute tension (HVSP) pour reprogrammer le chip. Ne modifiez ce fuse que si vous savez ce que vous faites !
Les ATtiny n'ont pas de port USB ni de bootloader. Il existe deux méthodes principales pour les programmer :
Le USBasp est un programmateur ISP très abordable (~3 €) qui se connecte directement aux broches ISP de l'ATtiny :
Commande avrdude pour programmer :
avrdude -c usbasp -p t85 -U flash:w:programme.hex
Vous pouvez utiliser un Arduino Uno comme programmateur ISP :
💡 Support ATtiny dans l'IDE Arduino : Ajoutez l'URL suivante dans Fichier → Préférences → URLs de gestionnaire de cartes supplémentaires :
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
Puis installez « attiny by David A. Mellis » dans le gestionnaire de cartes.
#include <avr/io.h>
#include <util/delay.h>
int main(void) {
// PB0 (pin 5) en sortie → LED
DDRB |= (1 << PB0);
while (1) {
PORTB ^= (1 << PB0); // Toggle LED
_delay_ms(500);
}
}
Ce programme fait clignoter une LED sur PB0 à 1 Hz. Il utilise moins de 100 octets de Flash, ce qui laisse énormément de marge même sur l'ATtiny13 (1 Ko).
L'ATtiny13 est le plus petit AVR couramment disponible. Avec seulement 1 Ko de Flash et 64 octets de RAM, chaque octet compte. C'est un excellent exercice de programmation optimisée :
uint8_t au lieu de int pour économiser de la RAM.printf() et les fonctions de formatage de chaînes.La compilation avec l'option -Os (optimisation taille) est indispensable. Avec ces contraintes, l'ATtiny13 peut quand même faire des choses impressionnantes : PWM sur LED, lecture ADC, temporisations par timer, et même communication série par software UART.
🏆 Défi ATtiny13 : Créer un feu tricolore (3 LED : rouge, orange, vert) avec des temporisations réalistes, le tout en moins de 500 octets de Flash. C'est un excellent exercice pour comprendre les timers et l'optimisation de code !
Pour des projets nécessitant plus de GPIO, de mémoire ou de périphériques (UART, I2C matériel), préférez l'ATmega328P, un PIC16F877A ou un Arduino.