Sony Arouje

a programmer's log

Bootloading Atmega16 with Arduino Uno

with 19 comments

Last two days I was experimenting with Microcontrollers and researching about how to write applications on it. I bought one Atmega16A and decided to use Arduino bootloader. So that I can write programs using Arduino IDE and syntax. This post explains about how to bootload Atmega16. I didn’t had any prior experience with Arduino, I have a uno sitting at my desk for quite a long time but never used it. Last three nights I was learning more about Arduino coding and learning about boards config and other stuffs.

Software Setup for Bootloading

I followed the steps posted by Sudar in his blog, please go through the post before reading further. Here I will write some points I had to do to do to complete the bootloading process.

Arduino IDE version: To run the core created by Sudar, we need the IDE version 1.0.x. I have the latest version 1.6.3. There are some differences in configuring boards.txt from 1.0 to 1.6. I tried to rewrite the boards.txt as per 1.6.* standard but it didn’t like it. So I downloaded the old version 1.0.6 from Arduino website. If you have 1.6.* already installed then better download the zip file and extract to a folder. That way you can use 1.6 and 1.0 in same machine.

Adding Boards and Variants: Adding boards to the sketch book folder didn’t work for me, may be I didn’t get it clearly. So I did the below steps.

  1. Go to the Arduino’s hardware folder, <<IDE install location of IDE>>/hardware/arduino/ and open boards.txt.
  2. Copy the contents of Atmega16 boards and pasted to the boards.txt opened in Step 1.
  3. Create a new folder named mega16 under <<IDE install location>>/hardware/arduino/variants and paste the “pins_arduino.h” created for Atmega16.
  4. Open Arduino IDE 1.0.* and goto Tools->Boards and you should see as shown belowarduino_ide_v1.0.6If if you can see the new board under Boards menu as shown above then we successfully setup the software environment for bootloading.
  5. Goto File->Examples->ArduinoISP, it will open a new window with ArduinoISP sketch. Before uploading the sketch make sure you have selected Arduino Uno in Tools->Boards->Arduino Uno. Now upload the sketch to your Uno. Now we setup our Uno as a programmer.

Hardware Setup for Bootloading

Here again I followed the pin connection detailed in Sudar’s post. Please follow exactly the way mentioned in the post. Also don’t forget to connect the capacitor between Reset and GND of Arduino.

Note: If you try to upload any sketch to Arduino Uno when the Capacitor is connected, IDE will throw errors. So before doing any thing with your Arduino remove the Capacitor.


Follow the below steps to burn the bootloader

  1. We have to set our Arduino Uno as an ISP. To do that go to Tools->Programmer and select “Arduino as ISP”
  2. Set the bootloader from Tools->Boards and select the newly added board, ie. Atmega16(internal 8mhz clock).
  3. Now burn the bootloader by selecting “Burn Bootloader” under Tools menu.

If every thing works fine, you could see a success message at the bottom portion of the IDE.

Uploading Sketches to Atmega16

Next we need to upload some sketches to newly bootloaded Atmega16. For this I used the new version of Arduino IDE 1.6.3, If you want you can use IDE 1.0.*. Some how the old IDE is very slow for me, so I decided to use the new version. Skip the below step if you decided to use the old 1.0.* version.

Follow the steps to use the Atmega16 board in new version

  1. Create a new folder under <<Installed location of IDE V1.6.*>>/hardware. You can name the folder anything, I named as Mega16.
  2. Under Mega16 folder create another folder called “avr”.
  3. Inside the avr folder copy the boards.txt and create another folder named variants and copy “pins_arduino.h” inside variants folder.
  4. Open boards.txt and add the line “atmega16-8.upload.tool=arduino:avrdude”

Follow the below steps to upload sketch(Common for all versions of IDE)

  1. Open up the IDE and load Blink from File->Examples->Basic.
  2. Edit the code so that you are writing to a pin of Atmega16, here I write to Digital 6, it’s physical pin 20.
  3. Before uploading the sketch Choose Atmega16(internal 8 Mhz) from Tools->Boards.
  4. Choose “Upload using Programmer” from File menu.

Just connect a LED with a Resistor to Physical pin 20 of Atmega16 and you can see the LED blinking.


Now I can write any thing to the Atmega16 and connect to sensors or any thing I wanted to do without Arduino.

Written by Sony Arouje

April 23, 2015 at 1:42 pm

19 Responses

Subscribe to comments with RSS.

  1. […] my previous post I explained how to Bootload Atmega16A and program it using Arduino. Next step is to establish the […]

  2. Hello,

    After using Arduino as ISP, i can again reuse that arduino for other tasks?


    FAITH + 1 (@amitesh_singh)

    December 27, 2015 at 5:19 pm

    • sorry for not replying, msg went to spam. Yes you can reuse the Arduino again.

      Sony Arouje

      March 16, 2016 at 10:19 pm

  3. Hello,

    I also able to achieve this after following your article.
    I have atmega16a.
    I just wonder why you used 8MHz as clock speed. i think atmega16a can work on upto 16MHz speed?
    so can we use that settings?

    FAITH + 1 (@amitesh_singh)

    January 3, 2016 at 1:46 am

    • you can use 16mghz settings, I just reused what ever i downloaded from some links.

      Sony Arouje

      March 16, 2016 at 10:17 pm

  4. […] I started programming more on Atmega chips than Arduino boards. I use Arduino Uno as the ISP to bootload and program the Atmega chips. One of the difficulty I faced to use Arduino ISP is the wires running […]



    August 18, 2016 at 7:39 pm

    • I didnt understand your question. What you mean serial communication is not working?

      Sony Arouje

      August 18, 2016 at 11:29 pm

  6. Hi,
    I folowed your steps and everything was fine till i started bootloading. I get “stk500_getsync(): not in sync: resp=0x00” this error and dont know what to do. Can you help me?


    October 22, 2016 at 9:57 pm

  7. actually in pins_arduino.h file the pins used for ss mosi miso sck are 12 13 14 15 but according to pin connection in sudar post the pins are connected in 10 11 12 13


    January 8, 2017 at 5:54 pm

  8. Hi it seems to always give me message saying “Invalid device signature”. And verbose output seems to see the my ATMEGA16 signature as 0x000000 and it happened to two I used. Any insight on this? Thanks.

    Charlie Xu

    January 28, 2017 at 8:05 am

    • there could be different reasons for this message. It’s worth posting it in Arduino forum, any one of the member including me could help.

      Sony Arouje

      February 6, 2017 at 12:00 am

      • Arduino: 1.8.1 (Windows 10), Board: “Atmega16 (internal 8MHz clock)”

        Warning: Board arduino:avr:atmega16-8 doesn’t define a ‘build.board’ preference. Auto-set to: AVR_ATMEGA16-8
        :0:21: warning: ISO C99 requires whitespace after the macro name

        open C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\mega16: The system cannot find the file specified.
        Error compiling for board Atmega16 (internal 8MHz clock).

        This report would have more information with
        “Show verbose output during compilation”
        option enabled in File -> Preferences.


        March 8, 2017 at 2:14 pm

  9. you should make a video


    March 6, 2017 at 11:49 pm

  10. hey guys, sorry to drag up an old post.
    but i followed the steps and i ended up with
    ” Error while burning bootloader: missing ‘bootloader.tool’ configuration parameter ”
    whist trying to burn the Bootloader.

    any help would be EXTERMELY APPRECIATED!!
    thanks in advance, Brett.


    April 8, 2017 at 3:24 pm

Leave a Reply to Sony Arouje Cancel reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: