Step 3: ICSP header pinout

You can place your ICSP header basically anywhere on your breadboard or perfboard (or PCB),  simply connect the following lines to the pins you wrote down. Be sure to remember which side everything goes to.

This list is for 2x3 ICSP headers, if you want to use the 2x5 instead, see the image. It works just the same, but be sure to leave NC unconnected. Beware of the orientation!

Before proceeding please read the warning at the bottom of this page.
See the image below with the ICSP header pinout and do the following:
 - Connect pin 1 of the ICSP header to the MISO pin of your MCU.
 - Connect pin 2 of the ICSP header to your +5V supply on your board. So not necessarily to your Vcc pin on your MCU, simply put +5V on it.
 - Connect pin 3 of the ICSP header to the SCK pin of your MCU.
 - Connect pin 4 of the ICSP header to the MOSI pin of your MCU.
 - Connect pin 5 of the ICSP header to the RESET pin of your MCU (usually pin 1)
 - Connect pin 6 of the ICSP header to your ground (GND).

This takes some soldering and can be quite annoying, as the pins are quite near eachother. I'll spare you the sight of my perfboard's back view!

Now mark which is pin 1 near your ICSP header, and connect a cable to it.

Word of warning: if you connect your board to an external programmer through ICSP, 5V is put on pin 2! That means that this pin should directly connect to where-ever your 5V comes from (be it a 7805 or somewhere else). Your external programmer will automatically (usually) power your board through ICSP. 

So here is the catch, if you have an external programmer connected and you don't have a protection diode, the 5V from the programmer will flow into the battery or power supply. Be sure to connect either the ICSP - OR - a battery/power supply, and never both. You can prevent electricity flowing back by adding a diode just after your battery/power supply or you can add another 3-pin connector with a jumper so you can swap the power supply. However, that would be something nice for a next Instructable.

As electricity goes two ways, I recommend disconnecting the ICSP cable whenever you have your external programmer switched off. Power would flow into the programmer, and I don't really think that this is healthy for your programmer.
<p>For others new to programming Arduino in this manner, a brief primer:</p><p>The ICSP (In-Circuit Serial Programming) header implements the SPI (Serial Peripheral Interface) Bus and protocol.</p><p>The pins are, for the ISP6PIN header:</p><p>1 - MISO - Master Input, Slave Output - output from slave to master</p><p>2 - VTG - +VCC 5V</p><p>3 - SCK - Serial Clock - keeps the traffic in sync</p><p>4 - MOSI - Master Output, Slave Input - output from master to slave</p><p>5 - RST - Reset</p><p>6 - GND - Ground</p><p>http://arduino.cc/en/Reference/SPI</p>
Is there a standard (ISO or whatever) for the colors that the ICSP connector wires should have? I would like to color code my connector wires. <br> <br>thank you.
<p>If you use a 'rainbow' ribbon cable then the usual &quot;resistor colour code&quot; system applies:</p><p>Pin-1: Brown<br>Pin-2: Red<br>Pin-3: Orange<br>Pin-4: Yellow<br>Pin-5: Green<br>Pin-6: Blue</p>
When creating a circuit that requires ICSP capabilities can you still use the ICSP pins (D11-MOSI, D12-MISO, D13-SCK)? <br> <br>I had problems trying to reprogram an AVR setup with the basic blinking LED circuit on pin 19 (D13 - SCK) - removing the LED let the ICSP work fine. It probably makes sense that using these three pins for anything else could interfere with the reprogramming - but then that makes it quite a limitation, and one being very aware of. <br> <br>Obviously an option would be to have a jumper or TPDT (triple pole double throw) switch to change the circuit from being in &quot;run&quot; vs. &quot;program&quot; mode..
FWIW it seems 3PDT would be the right way to refer to what I meant - but thinking more I think I just need a 3PST switch. This can just disconnect whatever pins D11/12/13 are being used for, then the ICSP can be attached and will work fine.
hey there mate, im a little confused with ICSPs and have 1 question related to my problem. <br>Basically Im making a device that is using the arduino UNO with 3 differnt shields. All the digital pins have been used up and I need to find a way to save data on usb. <br> <br>So I was hoping to use the ICSP pins in order to save data using a USB shield like this one. Do you think it will work? <br>http://www.cooking-hacks.com/index.php/sd-card-shield-v2-1.html <br> <br>Also if it makes things easier, i've made my own USB socket http://www.instructables.com/id/Cheap-DIY-SD-card-breadboard-socket/ <br> <br>Do you think this can work? <br> <br>cheers for the help
Great instructable. <br>Just a question, though it might not be entirely in the scope of this product:<br>If I have a bootloader in this chip, what will ISP programming do? Will it just overwrite the bootloader?
Thanks! Basically, yes. If you use ISP to program your chip, anything on it gets overwritten, including bootloaders.<br><br>So if you use for example an Arduino, using ISP to program the chip will overwrite the bootloader, and you won't be able to use the Arduino IDE. You can just reprogram it with the bootloader, though. After that you are able to use the Arduino IDE again.<br><br>You can actually compile Arduino PDE's to a .hex file and use ISP to put that on the chip, then you have a chip that can't be programmed through the Arduino IDE as well. This saves some ROM and a little bit of start up time, but not really anything huge. This is a bit of a hassle in my opinion, though.<br><br>Enjoy!
Thanks for your extensive reply. That helps.<br><br>Now if you want to send a hex file to the arduino (the one that acts as ISP), I presuem you vannot do that through the Arduino software but rather you have to use AVRdude or something to send that hex file to the arduino who then sends it to the blank chip.<br>
Nice instructible, I would point out that 'ICSP' is (strictly speaking) a PIC thing, and is a Microchip trademark. I believe Atmel use 'ISP' (In-system programming). But I doubt anyone'll be suing you ;)

About This Instructable


49 favorites


More by barttech: Adding ICSP header to your Arduino/AVR board
Add instructable to: