Programming the ATtiny85 From Raspberry Pi: 4 Steps

4 programming

Programming the ATtiny85 From Raspberry Pi

Introduction: Programming the ATtiny85 From Raspberry Pi

These instructions tell you how to setup and program the ATtiny85 microcontroller from a Raspberry Pi via the SPI interface. Lots of people use the Ardiuno to do this (then you can use the Arduino IDE and simplified C commands), or you can use a USB based programmer. I do not have an Ardiuno and don’t want to buy a dedicated programmer. I do have a Pi, so I was pleased to learn I could use it as a way to get into microcontroller programming.

5 x 1K resistors (or similar)

LED of your choice

A connection to the GPIO of the Pi, and a breadboard and wire.

Step 1: Setup the Raspberry Pi

At the terminal of the Pi:

sudo apt-get install gcc-avr binutils-avr avr-libc

./bootstrap && ./configure && sudo make install

and Enable SPI device in the Advanced Options (see picture)

You can check this at the command line with lsmod, no need to reboot. (Maybe need to sudo modprobe spidev)

git clone git://

Step 2: Electrical Connections

Connect up the ATtiny85 to the Raspberry Pi GPIO (wire colours from the picture are given for reference):

15 1 GPIO22 to Reset (through 1K, Blue wire)

17 8 3.3 V (Green wire)

19 5 MOSI (through 1K, Yellow wire)

21 6 MISO (through 1K, Orange wire)

23 7 SCLK (through 1K, Red wire)

25 4 GND (Brown wire)

Step 3: Test Avrdude Connection

Test avrdude connection to the ATtiny85, we are set up with GPIO pin 22 on the ATtiny reset. We must pull this pin low to program the chip. This can be done in other ways, e.g. a switch, but I an using another pin of the GPIO to do this.

sudo gpio -g write 22 0

sudo avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000

sudo gpio -g write 22 1

Step 4: Program the ATtiny85

Program the ATtiny85:

#define F_CPU 1000000L

DDRB = 0xFF; // PORTB is output, all pins

PORTB = 0x00; // Make pins low to start

PORTB ^= 0xFF; // invert all the pins

_delay_ms(100); // wait some time

CFLAGS=-g -Os -Wall -mcall-prologues -mmcu=$(MCU)

$(CC) $(CFLAGS) $(TARGET).c -o $(TARGET)

$(OBJ2HEX) -R .eeprom -O ihex $(TARGET) $(TARGET).hex

sudo gpio -g mode 22 out

sudo gpio -g write 22 0

sudo $(AVRDUDE) -p $(AVRDUDEMCU) -P /dev/spidev0.0 -c linuxspi -b 10000 -U flash:w:$(TARGET).hex

sudo gpio -g write 22 1

sudo $(AVRDUDE) -p $(AVRDUDEMCU) -P /dev/spidev0.0 -c linuxspi -b 10000 -U flash:w:$(TARGET).hex

sudo gpio -g mode 22 out

sudo gpio -g write 22 0

sudo $(AVRDUDE) -p $(AVRDUDEMCU) -P /dev/spidev0.0 -c linuxspi -b 10000 -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

sudo gpio -g write 22 1

(Sorry, the instructables text editor has destroyed all the tabs and spacing in the code above, the Makefile will not work without tabs in the correct place)

To compile and upload code to the ATtiny:

To optionally send fuses:

We are programming the ATtiny directly using avr-libc.

To change the setup of the ATtiny get fuses from :

This was so much fun, I even added a serial port pin to receive data, and blinky!

Thanks a lot for this! I really love the ATtiny series, smaller is better! And with a Rasbperry Pi system, I’m using a tiny linux computer to program a tiny chip! No Arduino or ISPs necessary.

For me this tutorial is essential and the best take-off ramp to the ATtiny-issue. Thank you very much.

Managed to get started coding on my ATtiny right away!

With inspiration I made a simple christmas decoration lamp which twinkles really nice 🙂

Thank you, and everyone, for comments. It’s great to know that people find it useful. Cheers!

I am lost when it comes to coding. Where should the TABS go? Can someone please post a picture of the correct code?

I have the code on Github now:

Thankyou so much! I had purchased 10x ATtiny84a’s and had no idea, until I stumbled upon this. Much Appreciated:)

Thank you so much, I have made it work with my Atmega8-16PI and will try with the Atmega8535-16PI

Hi, this helped me to get going, but you should update/change one thing.

After reading this post:

This is a fantastic tutorial, and it really helped me get started. I’d like to point out a couple things I learned along the way, however. I don’t know about at the time you were doing this project, but the “linuxgpio” configuration for avrdude exists in /etc/avrdude.conf on the RPi (after you install avrdude, of course); you simply uncomment the lines and set the pins to what they should be. Second, because the AVR and the RPi both run at 3.3v, I didn’t find any need to use resistors for anything other than the LED itself, and that was only to protect the LED. And finally, if you hook the LED’s positive pole to one of the SPI pins, the LED will happily blink for you as the RPi uploads data, which is cool and gives some nice feedback!

Oh, and I used this with an ATmega88; I’m sure you can use it with any ATmega that supports 3.3v operation, which, for all I know, is all of them.

Works with atmega8. When I poweroff the Raspberry Pi the Reset pin GPIO 22 gets to zero, stopping the program on the microcontroller. I added a pullup resistor of 10 k to 3.3 v to GPIO22 and now it works after Pi poweroff too 🙂 . Thank you. I made it but I don’t yet have a camera / photo capable phone so no images.

Is it possible to program Atmega8-8PU using this?

Thank you! Thank you! Thank you! My L.E.D.s are flashing, and my stepper motor is spinning. I could not have gotten this far this fast without your VERY helpful Instructable!

i dont know nothing about makefile, could you help me, which is the path where the file should be, i have to paste or create a new file ?

hi im having this error”28:*** target pattern contains no ‘%’ .Stop

Can anyone help me with this.

On the strength of getting blinky to work following this instructable (thanks for that), I thought I’d use what I’d learnt to install Atmel’s TWI Bootloader on a ATTiny85 (Atmels Application Note: AVR112).

Unfortunately I fell at the first hurdle running the ‘make’ with error

‘fatal error: ioavr.h: No such file or directory’

Has anyone done this successfully? If so, some pointers on getting passed this would be much appreciated.

Problem solved by replacing lines:

Running the ‘make’ again gives error message:

Common_Define.h:164:1: error: unknown type name ‘__no_init’

Line 164 in Common_Define.h is:

__no_init uint8_t pageBuffer[PAGE_SIZE];

Can anyone throw some light on why code from Atmel doesn’t seem to work?

I try to upload this code instead of blinky but i got a lot of error and i don’t know why if someone can help me

PS : It works perfectly when i upload blinky

That code uses the Arduino code libraries (“digitalWrite” etc.). You can program these devices that way but I do not cover it here.

I am using the avr-libc library. By the way this gives you the possibility to have three pwm outputs from the ATtiny85. I have mood light code I have used in the past, it’s here:

I hope you can work out from the comments what the circuit should be like.

Thanks for the help i understand why it doesn’t work now.

I gonna try to directly upload the hex generate by arduino and if it doesn’t work i gonna use your code to make mine.

Works good! thankyou!

I made it work with my custom ATmega32u4 board. I had to supply it with an external 3.3v supply.

Later I plan to supply with wiht USB power (5V) but im still waiting for my level converters to come in the mail.

Hello and Thank you for your Tutorial.

But i have a few problems.

When i run make install it flashes ok, but i receive failure:

“avrdude verification error content mismatch”

and “avrdude safe mode lfuse changed”

What i doing wrong ?

I am trying to programm attiny45

Hello and thank you for tutorial.

But i have a problem. I would like to program Attiny45 and when i run make install ist says :

avrdude verification error content mismatch

avrdude safe mode louse changed, was 62 and now is 0

and when i set y to change fuse back then it freeze .

Could you please help me

Very straightforward tutorial. Used it with the ATtiny25 and worked well. Thank you!

Many thanks! Your suggestion was spot on.

Hello, I’ve followed your tutorial and get as far as ‘Makefile’. When I run the ‘make’ command I get .

‘Makefile:9: *** missing separator. Stop’

Any help would be appreciated.

Probably a lack of tabs. You need a hard tab, or a ‘;’ before each command. Where there is a gap at the beginning of the line in the picture of the code, make sure this is a hard tab. See also:

Hope this helps.

Probably a lack of tabs. You need a hard tab, or a ‘;’ before each command. Where there is a gap at the beginning of the line in the picture of the code, make sure this is a hard tab. See also:

Hope this helps.

Great tutorial! All of the steps were very clear. The wiring diagrams were a big help. Took me no time to set this up. Everything worked on my first try (well. almost everything. I accidentally mixed up two ports).

And technically I’m using ATtiny25, but switching processors was actually fairly trivial. 🙂

I wasn’t fully done before. I just got it all working now. Great !

one more ‘enter’ for separate “cd

mkdir ATtiny85″ and “cd blinky” for easy line copying newbies like me ;o)

You did the most understable tuto I got for this. Hope you will have success.

Thanks, clarified that more. As with all instructables:

The more we use it, the more we improve it.

Really nice step by step instructable. I searched hours for it.Thanks !

2 suggestions for perfect cut & paste tutorial :

“sudo raspi-config” instead of ” sudo raspi-coinfig”

&& git clone git://” instead of “cd

git clone git://”

This allowed me to continue the tuto.

Have a nice day.

Thanks for the comments, glad it was of help. Corrections made.

is it ironic that I want to do this, so I can make an USB AVR programer? ( lol

Yes, I for one did not think it was possible to interface to the ATtiny via USB to make an AVR programmer. That’s awesome!

Yeh it is, and alot cheaper than a standard usb AVR programmer. Its limited on what chips it works with, but should save alot of time and effort in the future 😀

About This Instructable


Let your inbox help you discover our best projects, classes, and contests. Instructables will help you learn how to make anything!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.