Skip to content

How to Use Arduino as ISP Programmer

  • by

ISP (In-System Programming) programmers, which are also known as ICSP (In-Circuit Serial Programming) programmers, are used for burning bootloaders onto microcontroller (MCU) chips. They are also used for setting MCU chip fuses in order to change some of the chip’s functions. There are many cheap ISP programmers available on the internet. However, if you have an Arduino board (Arduino Uno, Nano, etc.) lying around, you do not need to buy an ISP programmer. You can easily turn an Arduino board into an ISP programmer. This article will show you how to use an Arduino board as an ISP programmer.

To use an Arduino board as an ISP programmer, simply upload the Arduino IDE example sketch named “ArduinoISP”. Next, connect the SPI pins of the Arduino board to the MCU chip or MCU board to be programmed. Then, you can start using the Arduino board as an ISP programmer.

To illustrate the steps for the procedure, first, I will make an Arduino Nano board into an ISP programmer. Then, I will show how to upload sketches and burn bootloaders to a Digispark ATtiny85 development board.

Step by Step Guide on How to Use Arduino as ISP Programmer

STEP 1 – Connect your Arduino board to your computer’s USB port.

Connect the Arduino board of your choice to your programming computer hosting the Arduino IDE. In the next several steps, we will upload the ArduinoISP sketch to the board to make it an ISP programmer.

STEP 2 – Open your Arduino IDE and open the ArduinoISP sketch.

Open your Arduino IDE. If you are a beginner and you have not yet installed the Arduino IDE, please see How to Install Arduino IDE on Windows 10. On the Main menu, select File/Examples/11.ArduinoISP/ArduinoISP.

Screenshot of Arduino IDE showing how to open the example sketch ArduinoISP that turns an Arduino board into an ISP programmer
Figure 1. Screenshot of Arduino IDE Showing How to Open the ArduinoISP Sketch

You should see the screen shown below after clicking on the ArduinoISP on the Built-in Examples menu.

Screenshot of Arduino IDE showing the ArduinoISP sketch
Figure 2. The ArduinoISP Sketch


STEP 3 – Choose the name of your Arduino board from the Board Manager’s list.

Go to Tools/Board/Arduino AVR Boards and select the type of Arduino board you are using. As shown in the screenshot below, I chose Arduino Nano for my Arduino board.

A screenshot of Arduino IDE showing how select the Arduino board before uploading the sketch that will turn the Arduino board into an ISP programmer.
Figure 3. Picture Showing How to Select the Arduino Board


STEP 4 – Set the proper COM serial port for your board.

On the Tools menu, select Port. Then select from the serial ports list the appropriate port for your Arduino board.

Screenshot of Arduino IDE for selecting the correct serial COM port.
Figure 4. Arduino IDE Showing the Serial Ports Selection


STEP 5 – Click the Upload button.

As a final step for uploading the ArduinoISP sketch to the Arduino board, click on the Upload button.

Another screenshot of Arduino IDE depicting how to start the upload of the ArduinoISP sketch to make the Arduino Nano board into an ISP programmer
Figure 5. Arduino IDE Illustrating How to Upload a Sketch

When you see the message “Done uploading”, congratulations!!! You now have a full-pledged ISP programmer.

Screenshot of Arduino IDE with the message saying that the sketch upload is complete
Figure 6. Arduino IDE Showing the Completion of the Sketch Upload


In the following steps, we are going to show how to use the Arduino board acting as an ISP programmer to:

  • Program or upload a sketch to a Digispark ATtiny85 board
  • Burn an Optiboot bootloader
  • Burn a Micronucleus bootloader

STEP 6 – Connect the ISP programmer (the Arduino board) to the Digispark ATtiny85 development board.

Like in any other ISP programmers, including the popular USBtinyISP and USBasp programmers, we use six (6) terminals of the ISP programmer to connect to the device to be programmed. These terminals are:

  • MOSI
  • MISO
  • SCLK
  • RESET
  • VCC
  • GND

On the Arduino board acting as an ISP programmer, the corresponding terminals are as follow:

  • D11 (MOSI) —> MOSI
  • D12 (MISO) —> MISO
  • D13 (SCLK) —> SCLK
  • D10 (SS) —> RESET
  • 5V —> VCC
  • GND —> GND

Now, based on the foregoing discussion, we can connect the Arduino board to the Digispark ATtiny85 board using the following terminals:

Arduino Board —> Digispark ATtiny85 Board
D11 (MOSI) —> PB0(MOSI)
D12 (MISO) —> PB1(MISO)
D13 (SCLK) —> PB2(SCLK)
D10 (SS) —> PB5(RESET)
5V —> 5V
GND —> GND

For reference purposes, the Digispark ATtiny85 development board pinout is shown below. For more information on Digispark ATtiny85, you may consult the Digispark ATtiny85 Pinout and Configuration.

Digispark ATtiny85 pinout showing the physical pins, digital IO pins, ADC pins, PWM pins, I2C pins, SPI pins, USB pins, pin change interrupts, and hardware interrupt pin.
Figure 7. Digispark ATtiny85 Pinout

Shown below is the Fritzing breadboard diagram for connecting the Arduino Nano board to the Digispark ATtiny85 board.

Picture showing the Arduino Nano connected to the Digispark ATtiny85 board.
Figure 8. Fritzing Breadboard Diagram of Arduino Nano Connected to a Digispark ATtiny85 Board


How to connect the Arduino Nano board to the Digispark ATtiny85 board illustrated by an old-school schematic diagram.

Picture of the schematic diagram of Arduino Nano connected to a Digispark ATtiny85 for programming the Digispark using the Arduino as ISP programmer
Figure 9. Schematic Diagram of Arduino Nano Connected to a Digispark ATtiny85 Board

After connecting the Arduino board to the Digispark ATtiny85 board, we are now ready to test drive the Arduino board as an ISP programmer.

Since we are going to work with the Digispark ATtiny85 board, you must have the board core ATTinyCore by Spence Konde installed on your Arduino IDE. If you do not have the ATTinyCore installed yet, see the article How to Install ATTinyCore on Arduino IDE.

STEP 7 – Copy and Paste the Blink Program.

Going back to the Arduino IDE, create a new sketch and then copy and paste the Blink program sketch shown below.

STEP 8 – Change the board from Arduino board to Digispark ATtiny85 board.

Go to Tools/Board/ATTinyCore and select ATtiny25/45/85 (No bootloader). Take note that we are using the “No bootloader” option and NOT the “Micronucleus/Digispark” option. This is because we are going to upload the Blink sketch via an ISP programmer (the Arduino board) and not thru the Digispark’s USB port.

Screenshot of Arduino IDE with the list of ATTinyCore supported boards.
Figure 10. Arduino IDE with the ATTinyCore List of Supported Devices

STEP 9 – Select the proper COM port.

Go to Tools/Port and choose the correct COM port from the ports list.

Screenshot of Arduino IDE showing how to select the proper COM port before using the Arduino board as ISP programmer.
Figure 11. Arduino IDE Showing How to Select the Serial COM Port

STEP 10 – Select the programmer type.

On the Tools/Programmer menu, select Arduino as ISP as the programmer type.

Screenshot of Arduino IDE prior to using the Arduino Nano board as an ISP programmer.
Figure 12. Arduino IDE Illustrating How to Select the Programmer Type

STEP 11 – Upload the Blink program.

Upload the Blink program by clicking on the Upload button.

Picture of Arduino IDE showing how to upload the Blink sketch.
Figure 13. Arduino IDE Showing How to Start the Upload Process

When you see the message saying that the upload is done, your Digispark ATtiny85 board should start blinking the built-in LED.

Another screenshot of Arduino IDE showing the message of completion of using the Arduino Nano board as ISP programmer.
Figure 14. Arduino IDE with Upload Completion Message

How to Burn Bootloader on Digispark ATtiny85 Using Arduino as ISP Programmer

Burn Optiboot Bootloader

STEP 1 – Select ATtiny45/85 (Optiboot) from the ATtinyCore list.

Screenshot of Arduino IDE showing how to select the Optiboot option
Figure 15. Arduino IDE Showing How to Select Optiboot

STEP 2 – Verify that the proper COM port is selected.

STEP 3 – Make sure that the programmer selected is “Arduino as ISP”.

Picture of Arduino IDE showing the options before starting the Arduino board as an ISP programmer burning the Optiboot bootloader on a Digispark ATtiny85 development board.
Figure 16. Arduino IDE Prior to Burning a Bootloader

STEP 4 – Click “Burn bootloader” to start the burning process.

A picture depicting how to burn a bootloader into a Digispark ATtiny85 board using an Arduino board as an ISP programmer.
Figure 17. Arduino IDE Depicting How to Burn a Bootloader

Burn Micronucleus Bootloader

To burn the Micronucleus bootloader onto the Digispark ATtiny85 board using the Arduino as ISP programmer, follow the steps above for burning the Optiboot bootloader. However, instead of selecting ATtiny45/85 (Optiboot), select ATtiny85 (Micronucleus / Digispark) from the ATtinyCore list of supported devices.

References on How to Use Arduino as ISP Programmer

In-System Programming (ISP)
How to Install ATTinyCore on Arduino IDE
How to Program ATtiny85 with Arduino IDE
Digispark ATtiny85 Pinout and Configuration
How to Program Digispark ATtiny85 Board with Arduino IDE
Digispark USB Device Not Recognized
How to Use AT-09 BLE with Arduino and Smartphone

Leave a Reply

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