Picture of Program an ATtiny with Arduino
Follows are directions for programming the ATtiny microcontrollers using the Arduino IDE. In plain English, this is how to program 8-pin Atmel chips as you would normally an Arduino. This is cool because the ATtiny is tiny, and - well - this allows you to make tiny things that don't need a big ol' microcontroller.

The instructions I have posted here are pretty much the same as instructions given by the incredibly awesome High-Low Tech Tutorial. I posted my version of the instructions here because I plan to make a couple of upcoming projects using ATtiny chips and figured I would show my process.
Remove these adsRemove these ads by Signing Up

Step 1: Go get stuff

Picture of Go get stuff
You will need:

- Arduino
- Breadboard
- ATtiny85 (or ATtiny45)
- 10uF 16V electrolytic capacitor
- 220ohm 1/4 watt resistor
- solid core hookup wire

Step 2: Wire the circuit

Picture of Wire the circuit
Connect the Arduino to the ATtiny as follows:
  • Arduino +5V      --->  ATtiny Pin 8
  • Arduino Ground --->  ATtiny Pin 4
  • Arduino Pin 10   --->  ATtiny Pin 1
  • Arduino Pin 11    --->  ATtiny Pin 5
  • Arduino Pin 12    --->  ATtiny Pin 6
  • Arduino Pin 13    --->  ATtiny Pin 7

Step 3: Program the Arduino

Picture of Program the Arduino
Select the "ArduinoISP" sketch from the "Examples" menu.

Upload the sketch to your Arduino as you would any other sketch.

Your Arduino is now configured as a serial programmer that can program other chips.

Step 4: Filter cap

Picture of Filter cap
Put the 10uF capacitor between ground and the Arduino reset pin. Make sure to keep an eye on the capacitors polarity (ground to ground!).

It is rumored you only need this for the Arduino Uno, but I have found it helped matters to include it with earlier versions as well. If you find that it is not working in the next steps, simple remove it and see if that helps.
1-40 of 154Next »
tomvonmom27 days ago

I see you connecting the diode to +5V. Doesn't it fry the micro controller? In my head I would rather go Pin 0 -> diode -> 220ohm -> GND

Thanks for taking the time to put this up. Worked for me.

samdevsung1 month ago

can i get the hardware files for atmega8 pls!

samdevsung1 month ago

can i get the hardware files for atmega8 pls!

samdevsung1 month ago

can i get the hardware files for atmega8 pls!

samdevsung1 month ago

can i get the hardware files for atmega8 pls!

gnuton1 month ago

Here is the updated tutorial
and do not use the listed in this page but the one you can find in the link I provided to you! cheers!

infanati1 year ago
I've been trying to program my ATtiny13V but I keep getting "'OUTPUT' was not declared in this scope".

// Must include for servos to work
// Elements is the amount of numbers you want to dedicate to the running average
// Increase the number for a slower reaction
#define elements 5

// Variables for loops
int i = 0;
int j = 0;

// The Analog Pins - C:Centre R:Right L:Left U:Up
int pinC = 1;
int pinR = 2;
int pinL = 3;
int pinU = 7;

// Variables to store the data from the photo-resisitors
int analogValueC;
int analogValueL;
int analogValueR;
int analogValueU;

// The change in position from the last reading
float posX = 0;
float posY = 0;

// The running average readings
// - Each element is made up of the difference between opposite photorestors
int x[elements], y[elements];

// Servos - X is rotation/spin, Y is the tilt servo
Servo servoX;
Servo servoY;

// Common servo setup values
int minPulse = 600; // minimum servo position, us (microseconds)
int maxPulse = 2400; // maximum servo position, us

void setup() {

// Turn on the pins, program doesn't work without it *shrug*
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
delay (200);

// Attach each Servo object to a digital pwm pin
servoY.attach(6, minPulse, maxPulse);
servoX.attach(5, minPulse, maxPulse);

// Sanity check!

// Start all the running average values to zero
for(i=0;i x[i] = 0;
y[i] = 0;

// Serial - good for troubleshooting

void loop() {

// This will help to balance the values so the sun tracker doesn't Jump around
// during high contrast situations
int normal = (analogRead(pinC)/50);

// Read the photorestors
analogValueC = (analogRead(pinC)/normal);
analogValueL = (analogRead(pinL)/normal);
analogValueR = (analogRead(pinR)/normal);
analogValueU = (analogRead(pinU)/normal);
analogValueD = (analogRead(pinD)/normal);

// Check if the Centre photorestor is the brightest, if it is then set the change to zero
if((analogValueC <= analogValueL)||(analogValueC <= analogValueR)){
// Value is positive: go right, negative: go left
x[i] = analogValueR - analogValueL;
} else {
x[i] = 0;
if((analogValueC <= analogValueU)||(analogValueC <= analogValueD)){
y[i] = analogValueU - analogValueD;
} else {
y[i] = 0;

// The change in position is the average of all the elements
int totalX = 0;
int totalY = 0;
for(j=0;j totalX+=x[j];
posX = totalX/elements;
posY = totalY/elements;

// Send the values through the serial when it has gone through all the elements

// Change the position of the tracker towards the light

// Increment I through 0 to number of elements
i = i%elements;

// Class will display a cross on the serial monitor showing real time values of the resistors
void rtDisplay(){
Serial.print(" ");
Serial.println(" /\\");
Serial.print(" <= ");
Serial.print(" => ");
Serial.println(" \\/");
Serial.print(" ");

// Class will display the change in position
void avgDisplay(){
Serial.print(" ");
} else {
Serial.println(" ");
Serial.println(" /\\");
} else {
Serial.print(" ");
Serial.print(" <= ");
} else {
Serial.print(" - ");
Serial.print(" => ");
} else {
Serial.println(" ");
Serial.println(" \\/");
Serial.print(" ");
} else {
Serial.println(" ");

// Named so, because I am planning on making a more complicated verson
void simpleChangePos(){
// Variables to store the current position of the servos
int readX =;
int readY =;

// If there is a change:
// If the servo is going to change position past its range of motion
} else if((readX+posX)<0){
} else {
// If the change is a non-zero and not past the servo's limit, change the position


} else if((readY+posY)<0){
} else {


If anyone got any ideas how to solve it pls let me know : )

i know this is old, but cant run the servo library on the tiny.

there is a library called servo8bit.h thas written for the tiny

randofo (author)  infanati1 year ago
Not all of the code that runs on the Arduino will run on the ATtinys. When you start including libraries, like the servo library, the likelihood of it working diminishes.

Can you program one to blink an LED? If so, the problem is probably with some of the commands you are calling (presumably the servo code). You will need to figure out some alternative way of writing the code, or to modify the library to work with the chip.
infanati randofo7 months ago

I got a new ATTiny85 and and i tried to get it to blink and im still getting the same error. 'OUTPUT' was not declared in this scope.

You need to declare OUTPUT or try to change OUTPUT with 0

ironheartbj18 made it!2 months ago

much nicer to have a breadboard what I made it.

lavoslava2 months ago

I try to connect (for the first time!) Arduino Yun with ATtiny45 and try Blink example. Which version of Arduino software should I download and ? Where I can get the schematic - how to connect the jumperwires from Yun to breadboard? Thanks!

Dr_Quark2 months ago

I was initially interested in the concept of ATiny, but after looking at the program memory limit and the required discrete parts required to get an ATiny project running, I don't see much advantage over using a Pro Mini (except if it replaces a lot of discrete gate logic). For example, including SoftwareSerial.h and DallasTemperature.h balloons code to about 6700 bytes, so even in a ATiny85, there's not much room left for user code. There are also limitations on the code that an ATiny can run. Can someone comment or provide examples where the ATiny has a critical advantage over the Pro Mini?

SvenH3 months ago

does anyone know why it says this?

avrdude: stk500_getsync(): not in sync: resp=0x00

I had this problem. My issue was that I hadn't uploaded the Ardunio ISP code in step 3

christopherjohnliggins made it!2 months ago

After a few glitches (my mistakes :-/ ) got it working on an Arduino Mini :D - excellent tutorial

2014-12-09 12.05.50.jpg
ianyeo19944 months ago

Running on Arduino Uno with 1.0.5-r2 IDE

This shows in the errors. Do I have to use an earlier version? Or is it fixable?

Blink.ino:10:21: error: Arduino.h: No such file or directory

Blink.ino: In function 'void setup()':

Blink:17: error: 'OUTPUT' was not declared in this scope

Blink:17: error: 'pinMode' was not declared in this scope

Blink.ino: In function 'void loop()':

Blink:22: error: 'HIGH' was not declared in this scope

Blink:22: error: 'digitalWrite' was not declared in this scope

Blink:23: error: 'delay' was not declared in this scope

Blink:24: error: 'LOW' was not declared in this scope


#include <Arduino.h>

#include <WProgram.h>

made it have only one error now

avrdude: usbdev_open(): did not find any USB device "usb"

go to Arduino IDE : tools-->Programer-->>Arduino as ISP

i got same problem

Ahh I had to select the programmer as well

I'm having the same problem :/

Add these lines to your code

#include <Arduino.h>

#include <WProgram.h>

hann79113 months ago

Hi, if i need two digital outputs and four analog I/Os, can ATTINY24 does the job? Do I follow the same instruction as Attiny 45?

Akin Yildiz3 months ago

what can this thing really do? sorry, i'm a total beginner. can it read an analog sensor and turn on a 3mm led according to the data read.? for example an ldr photoresistor?

jcullins04 months ago

How does the tiny45 work on 3.3v and 4mhz, anything to watch for?

When I try to download the ATtiny it doesn't create a file, just a folder with some other files in it.

davting4 months ago

i find that i need to include the following headers to the blink sketch for it to compile.

#include <Arduino.h>
#include <WProgram.h>

but I finally did it!!

shinystuff made it!5 months ago

Great tutorial, really helpful! I had only one problem with the pin-out of the ATtiny85 but I figured it out.

Raphango made it!6 months ago

Remember you must select "Arduino as ISP" on the bootloader options.

jamestav6 months ago

If you are using an Arduino Mega the pin connections will be a little different. Check it out on my blog:

ihart6 months ago

Thanks for posting this! It worked great with an Attiny45 and Arduino 1.5.7 I didn't use a capacitor and it was fine. I selected 8MHz Internal clock.

joesinstructables made it!7 months ago

Thanks for posting the tutorial, it will be useful for a lot of projects.

doriancin7 months ago

This is a great tutorial!! I have just one question, can I use the EEPROM and WIRE libraries with the ATTINY45 the datasheet says it support the i2c protocol ...

uelman80029 months ago

my question on "Select from the top menu:

Tools --> Board --> ATtiny85 (w/ Arduino as ISP)"

1. Why choose ATtiny85 as the "board" when it is the target chip?

2. Shoudn't it be the Arduino Uno itself as the board?

3. If the chip is possible as the board, why there's no option for Atmega328p in the IDE, setting Arduino as ISP programmer?

how do you unzip the file?

With a program like 7zip or Winrar, obviously.

Armadillo9910 months ago

Will this work the same way with an arduino mega?

hydronics2 years ago
yep I get the same error.
1-40 of 154Next »