Getting Started with the ATtiny85: Your First Blink
From an empty breadboard to a blinking LED: everything you need to program the ATtiny85 with an Arduino as ISP.

The ATtiny85 is the cockroach of microcontrollers: tiny, nearly indestructible, and it will probably outlive every dev board on your shelf. Eight pins, 8KB of flash, and a price tag around a dollar. If you have ever wanted to put a brain into something small, a blinking badge, a sensor node, a tiny robot, this is the chip to learn.
This guide takes you from an empty breadboard to a blinking LED. No prior AVR experience needed. If you can blink an LED on an Arduino, you already know enough.
What exactly is the ATtiny85?
It is an 8-bit AVR microcontroller, originally from Atmel and now made by Microchip. The headline specs:
- 8KB flash for your program, 512 bytes SRAM, 512 bytes EEPROM
- 6 usable I/O pins (PB0 through PB5)
- Runs from 1.8V to 5.5V, up to 20MHz
- 10-bit ADC, timers, pin-change interrupts, and sleep modes that sip under a microamp
What it does not have: no USB, no WiFi, no hardware serial port. You talk to it with a programmer, and it talks to the world through raw pins. That constraint is the whole appeal. Every byte matters, every pin matters, and you learn how microcontrollers actually work instead of hiding behind libraries.
What you will need
- An ATtiny85 in DIP-8 (through-hole) package, the easiest to breadboard
- An Arduino Uno (or Nano) to act as the programmer
- A breadboard and jumper wires
- One LED and one 220 ohm resistor
- One 10uF electrolytic capacitor
- A USB cable for the Arduino
Total cost if you are starting from scratch: roughly the price of a pizza. Most of us already have everything except the chip itself.
Step 1: Turn the Arduino into a programmer
The ATtiny85 has no USB port, so we borrow the Arduino’s brain to do the talking. This is called ArduinoISP, and the wiring is simple. Wire it up before powering anything:
| Arduino Uno | ATtiny85 pin | Signal |
|---|---|---|
| D10 | Pin 1 (PB5) | Reset |
| D11 | Pin 5 (PB0) | MOSI |
| D12 | Pin 6 (PB1) | MISO |
| D13 | Pin 7 (PB2) | SCK |
| 5V | Pin 8 | VCC |
| GND | Pin 4 | GND |
Now plug the Arduino into your computer, open the Arduino IDE, and load File > Examples > 11.ArduinoISP > ArduinoISP. Upload it to the Arduino like any normal sketch. Your Uno is now a programmer.
One more critical wire: put the 10uF capacitor between the Arduino’s RESET pin and GND (negative leg to GND). Without it, the Arduino resets itself when the IDE opens the serial port, and programming fails with cryptic sync errors. This little capacitor has ended more debugging sessions than any other component I own.
Step 2: Teach the IDE about the ATtiny85
The stock Arduino IDE does not know this chip, so we add board support:
- Open File > Preferences and paste this into “Additional boards manager URLs”:
https://drazzy.com/package_drazzy.com_index.json - Open Tools > Board > Boards Manager, search for ATTinyCore, and install it.
- Go to Tools > Board > ATtinyCore and select ATtiny25/45/85 (No bootloader).
- Under Tools, set Chip to ATtiny85 and Clock to 8 MHz (internal).
- Set Programmer to Arduino as ISP.
Step 3: Set the fuses
Fresh ATtiny85 chips ship running at 1MHz (the internal 8MHz oscillator divided by 8). We want the full 8MHz. With the board and clock set as above, click Tools > Burn Bootloader. Despite the name, there is no bootloader involved. This just writes the fuse bits that configure the clock. It takes a few seconds.
A word of respect for fuses: they also control things like the reset pin. Leave the fuse settings at their defaults apart from the clock. There will be a whole post about fuses later, including how to unbrick a chip, but for today the defaults are your friends.
Step 4: Upload your first sketch
Paste this in:
void setup() {
pinMode(0, OUTPUT); // PB0, physical pin 5
}
void loop() {
digitalWrite(0, HIGH);
delay(1000);
digitalWrite(0, LOW);
delay(1000);
}
Note the pin number: in ATtinyCore, 0 means PB0, which is physical pin 5 on the chip. The mapping is PB0=0, PB1=1, PB2=2, PB3=3, PB4=4.
Now the important part: do not click the regular Upload button. Use Sketch > Upload Using Programmer (or Ctrl+Shift+U). The regular Upload button tries to talk over serial, which the ATtiny85 does not have. “Upload Using Programmer” is the magic phrase you will use for every ATtiny85 project from here on.
Tip: before you touch a breadboard, lay the circuit out in your browser with cirkitry.app – it is a free visual circuit designer with breadboard, schematic, and PCB views. Sketch it there first, then build it for real.
Step 5: Make it blink
Wire an LED from PB0 (pin 5) through the 220 ohm resistor to GND (pin 4). Long LED leg toward the chip. Power it all from the Arduino’s 5V and GND rails, which should still be connected from step 1.
If everything is right, the LED blinks once per second. Congratulations, you just programmed a microcontroller with six pins and no USB port. The Arduino did the talking, but the ATtiny85 is running that blink loop all by itself now. Unplug the programming wires (keep power) and it keeps blinking. That never gets old.
When it does not work
Three culprits cover nearly every first-time failure:
- “not in sync” errors: the 10uF capacitor is missing, backwards, or not making contact. Reseat it.
- Nothing happens after upload: you used the regular Upload button instead of Upload Using Programmer. It is always this.
- Blink is 8x too slow: the fuses are still at the factory 1MHz setting. Run Tools > Burn Bootloader with 8 MHz (internal) selected.
Where to go from here
You now have a working toolchain, and that is the hard part. The fun part is everything after: putting the chip to sleep so a coin cell lasts for years, reading sensors with the ADC, driving addressable LEDs, and building things that fit in a bottle cap. We will cover all of it here, one build at a time.
Next up: sleep modes, the ATtiny85’s real superpower. See you Saturday.
Want the next build in your inbox?
One email a week: a tested project, one programming trick, the parts worth buying. Free forever.
Subscribe free