Zbotic Logo Zbotic Logo
  • Home
  • Shop
  • Sale
  • 3D Print Service
  • PCB Service
  • B2B
  • Blogs
  • Contact Us
0 0

View Wishlist Add all to cart

0 0
0 Shopping Cart
Shopping cart (0)
Subtotal: ₹0.00

View cartCheckout

  • Shop
  • About Us
  • Contact Us
  • Reseller
  • Blogs
020 69134444
1800 209 0998
[email protected]
Help Desk
Facebook Twitter Instagram Linkedin YouTube
Zbotic Logo Zbotic Logo
0 0

View Wishlist Add all to cart

0 0
0 Shopping Cart
Shopping cart (0)
Subtotal: ₹0.00

View cartCheckout

All departments
  • 3D Print Service
  • 3D Printer
  • Batteries & Chargers
  • Development Boards
  • Drone Parts
  • EBike parts
  • Sensor Modules
  • Electronic Components
  • Electronic Modules
  • IoT and Wireless
  • Mechanical Parts and Workbench Tools
  • Motors & Drivers & Pumps & Actuators
  • DIY and Robot Kits
  • Show more
  • Home
  • Shop
  • Sale
  • 3D Print Service
  • PCB Service
  • B2B
  • Blogs
  • Contact Us
Return to previous page
Home Arduino & Microcontrollers

Arduino Bootloader via Arduino: ISP Programming Explained

Arduino Bootloader via Arduino: ISP Programming Explained

March 11, 2026 /Posted byJayesh Jain / 0

Using an Arduino as ISP programmer is a skill every serious maker should have. Whether you need to burn a bootloader onto a fresh ATmega chip, recover a bricked Arduino, program an ATtiny, or upload sketches directly without the USB-serial chip, the ArduinoISP sketch transforms any Arduino into a full-featured In-System Programmer. This tutorial covers everything from wiring to advanced tricks for reliable programming.

Table of Contents

  • What Is ISP and Why Do You Need It?
  • Loading the ArduinoISP Sketch
  • Wiring Arduino to Target: The SPI Connection
  • Burning a Bootloader
  • Uploading Sketches Without a Bootloader
  • Programming ATtiny Chips
  • Understanding and Setting AVR Fuse Bits
  • Frequently Asked Questions

What Is ISP and Why Do You Need It?

ISP (In-System Programming) is a method of programming a microcontroller while it is already in the target circuit, using the SPI (Serial Peripheral Interface) bus. For AVR microcontrollers (ATmega, ATtiny), this means using four signals: MOSI, MISO, SCK (the SPI bus), and RESET.

You need ISP when:

  • You have a brand-new ATmega chip from the factory — it has no bootloader, so it cannot be programmed via USB
  • You have accidentally set fuse bits that disable the bootloader or the serial interface
  • You are using an ATtiny (which has no USB at all)
  • You want to use the full flash memory without the 512 bytes consumed by the bootloader
  • Your Arduino’s CH340 or FTDI USB-serial chip has failed
  • You are programming AVRs in production and need faster, more reliable programming than bootloader-based upload

The ArduinoISP sketch (built into the Arduino IDE) turns any Arduino into an AVRISP programmer recognised by avrdude — the programming tool that the Arduino IDE uses internally. This means you can use the IDE’s “Burn Bootloader” and “Upload Using Programmer” commands with your Arduino-as-ISP, with no additional hardware required.

Recommended: Arduino Uno R3 Beginners Kit — The Uno makes an excellent ISP programmer and includes everything you need to get started with AVR programming projects.

Loading the ArduinoISP Sketch

The programmer Arduino is the one you load ArduinoISP onto. Choose any Arduino you have available — Uno, Nano, Mega, or Mini. The target is the Arduino (or bare chip) you want to program.

Step 1: Open ArduinoISP

In the Arduino IDE: File → Examples → 11.ArduinoISP → ArduinoISP

Step 2: Select Correct Board and Port for the Programmer

In Tools, select the board type of your programmer Arduino (e.g., Arduino Uno) and its COM port. This is critical — do not select the target’s board here.

Step 3: Upload ArduinoISP

Click Upload. The sketch will compile and upload. Once done, the programmer Arduino shows a steady heartbeat on pin 9 (slow blink) indicating it is active.

Key Constants in the Sketch

// ArduinoISP uses these pins by default:
// MOSI: pin 11 (Uno/Nano) or pin 51 (Mega)
// MISO: pin 12 (Uno/Nano) or pin 50 (Mega)
// SCK:  pin 13 (Uno/Nano) or pin 52 (Mega)
// RESET target: pin 10 (configurable as RESET)

// Optional status LEDs:
#define PIN_LED_HB   9  // Heartbeat (slow pulse = alive)
#define PIN_LED_ERR  8  // Error (on = programming error)
#define PIN_LED_PROG 7  // Programming (on during write)

Add LEDs to pins 7, 8, and 9 with 220Ω resistors to GND for visual feedback — highly recommended when debugging.

Recommended: Arduino Nano Every with Headers — Compact ISP programmer that fits neatly on a breadboard alongside your target chip, saving desk space.

Wiring Arduino to Target: The SPI Connection

Connect your programmer Arduino to the target Arduino (or bare chip) as follows:

Programmer Uno/Nano → Target Uno/Nano

Programmer Pin Target Pin Function
Pin 11 (MOSI) Pin 11 (MOSI) Data to target
Pin 12 (MISO) Pin 12 (MISO) Data from target
Pin 13 (SCK) Pin 13 (SCK) Clock
Pin 10 RESET Target reset control
5V 5V (or VCC) Power (optional)
GND GND Common ground

Important: Add a 10µF capacitor between RESET and GND on the programmer Arduino. This prevents the programmer from resetting when the IDE opens the serial port to initiate programming — a common source of failed programming attempts.

If you are powering the target from the programmer’s 5V pin, ensure the target draws less than 200mA to avoid overloading the programmer’s voltage regulator.

Burning a Bootloader

With wiring complete and ArduinoISP loaded on the programmer:

  1. In Arduino IDE, go to Tools → Board and select the target board (e.g., Arduino Uno)
  2. Tools → Processor — select the target’s processor if applicable
  3. Tools → Programmer → select Arduino as ISP (note: not ArduinoISP — they are different entries)
  4. Tools → Burn Bootloader

The IDE will run avrdude in the background. You’ll see “Burning bootloader…” in the status bar, followed by output in the console. A successful burn shows: avrdude done. Thank you.

If it fails with “not in sync” or “device not found”, check: cap on programmer reset, correct SPI wiring, correct board selection, and that the target has power.

Recommended: Arduino Pro Mini 328 – 3.3V/8 MHz — No USB chip, so ISP programming is the primary way to load sketches. Ideal for battery-powered and embedded projects where every milliamp counts.

Uploading Sketches Without a Bootloader

Once you have ISP wiring in place, you can upload sketches directly via ISP — bypassing the bootloader entirely. This gives you back 512 bytes of flash on most ATmega chips:

  1. Write your sketch as normal
  2. Set Tools → Programmer → Arduino as ISP
  3. Use Sketch → Upload Using Programmer (or Ctrl+Shift+U) instead of the normal Upload button

The sketch uploads directly to flash via SPI. The bootloader is erased in the process (the entire chip is wiped on each upload). If you later want the serial bootloader back, burn it again via Burn Bootloader.

For production programming, you can also invoke avrdude directly from the command line:

avrdude -c arduino -P /dev/ttyUSB0 -b 19200 -p m328p 
  -U flash:w:mysketch.hex:i

Programming ATtiny Chips

ATtiny chips (ATtiny85, ATtiny84, ATtiny13, etc.) have no USB interface and no bootloader. ISP is the only way to program them. Install the ATtinyCore or digistump/ATTinyCore board package in the IDE, then wire the ATtiny’s SPI pins to your programmer Arduino.

ATtiny85 Pinout for ISP

  • Pin 5 (MOSI) → Programmer pin 11
  • Pin 6 (MISO) → Programmer pin 12
  • Pin 7 (SCK) → Programmer pin 13
  • Pin 1 (RESET) → Programmer pin 10
  • Pin 8 (VCC) → 5V
  • Pin 4 (GND) → GND

Select the ATtiny85 board, set the clock (1MHz internal is the default fuse setting), and burn bootloader first to set the fuses correctly. Then upload your sketch using Upload Using Programmer.

Recommended: Wemos TTGO Xi 8F328P-U Board For Arduino Nano V3.0 Promini — ATmega328P on a compact Nano-compatible board; great for custom designs that you’ll program via ISP in final form.

Understanding and Setting AVR Fuse Bits

Fuse bits are non-volatile configuration bytes in AVR chips that control fundamental hardware behaviour: clock source, clock divider, brownout detection, bootloader size, and SPI programming enable. Incorrect fuse bits are the most common way to “brick” an AVR — and ISP is the most common way to unbrick it.

AVR fuse bits are inverted: a programmed bit (1 in avrdude notation) means the feature is OFF; a 0 means ON. Always use an online fuse calculator (e.g., the Engbedded AVR Fuse Calculator) to generate fuse values — never guess.

Common Safe Fuse Settings for ATmega328P

# Standard Arduino Uno bootloader fuses:
# Low: 0xFF (16MHz external crystal)
# High: 0xDE (512-word bootloader, SPI enabled)
# Extended: 0x05 (2.7V brownout)

avrdude -c arduino -P /dev/ttyUSB0 -b 19200 -p m328p 
  -U lfuse:w:0xff:m -U hfuse:w:0xde:m -U efuse:w:0x05:m

Never set the SPIEN fuse to disabled (bit 5 of hfuse). This disables SPI programming and the only recovery method is High-Voltage Parallel Programming — which requires a 12V pulse on the RESET pin and a different programmer entirely.

Frequently Asked Questions

What is the difference between “Arduino as ISP” and “ArduinoISP” in the programmer menu?

“Arduino as ISP” is the correct choice for using an Arduino running the ArduinoISP sketch as your programmer. “ArduinoISP” (without spaces) refers to a standalone programmer product. Always choose “Arduino as ISP” for the DIY method described here.

Why do I get “avrdude: stk500_recv(): programmer is not responding”?

This is almost always caused by the programmer Arduino auto-resetting when the serial port opens. Add a 10µF capacitor between RESET and GND on the programmer. Also check that you selected “Arduino as ISP” (not another programmer) in the Tools menu.

Can I use an Arduino Nano as an ISP programmer?

Yes. Connect it exactly like an Uno (same pin numbers). The Nano’s smaller form factor actually makes it convenient for leaving permanently wired to a target during development.

Will burning the bootloader erase my sketch?

Yes. Burning the bootloader performs a full chip erase followed by writing the bootloader to flash. Your existing sketch will be erased. Back up important sketches (as .hex files via Sketch → Export Compiled Binary) before burning the bootloader.

Can I use ISP on a 3.3V target from a 5V Arduino?

Not directly — you risk damaging the 3.3V target. Use a logic level converter on the MOSI, SCK, and RESET lines. MISO is output from the target and may need level shifting too depending on the 5V Arduino’s input threshold.

Get your ISP setup ready today. Shop Arduino boards, Pro Mini modules, and all the components you need in our Arduino & Microcontrollers store at Zbotic — shipped fast across India.

Tags: Arduino, ArduinoISP, AVR, Bootloader, ISP Programmer, Microcontroller Programming
Share Post
  • Facebook
  • Linkedin
  • Whatsapp
FreeRTOS on Arduino: Multitask...
blog freertos on arduino multitasking for embedded projects 594673
blog arduino libraries how to install write and publish your own 594676
Arduino Libraries: How to Inst...

Related posts

Svg%3E
Read more

Arduino Batch Programming: Flash Multiple Boards Quickly

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading
Svg%3E
Read more

Arduino Based Radar System with Ultrasonic Sensor

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading
Svg%3E
Read more

Arduino Automatic Plant Monitor: Sunlight, Moisture, Temperature

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading
Svg%3E
Read more

Arduino Lie Detector: GSR Sensor Polygraph Project

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading
Svg%3E
Read more

Arduino Metal Detector: Build a Treasure Finder

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading

Add comment Cancel reply

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

Facebook Twitter Instagram Pinterest Linkedin Youtube

Get the latest deals and more.

Download on Google Play Download on the App Store

Call us: 020 69134444 / 1800 209 0998

Monday - Saturday 09:30 AM - 06:00 PM
For Technical Supports Email: [email protected]
For Sales / Enquiries Email: [email protected]

  • My Account

    • Cart

    • Wishlist

    • Checkout

    • My Orders

    • Track Order

    • My Account

  • Information

    • FAQs

    • Blogs

    • Career

    • About Us

    • Contact Us

    • Payment Options

  • Policies

    • Privacy Policy

    • Terms & Conditions

    • GST Input Tax Credit

    • Shipping Return Policy

    • E-Waste Collection Points

    • Our Sitemap

© Zbotic.in is registered trademark of Moxie Supply Pvt Ltd – All Rights Reserved
Login
Use Phone Number
Use Email Address
Not a member yet? Register Now
Reset Password
Use Phone Number
Use Email Address
Register
Already a member? Login Now