loading
Picture of Arduino ISP - LOG
Seeeduino.JPG
Arduino ISP - LOG
 
So this Lazy Old Geek (LOG) has had a lot of trouble getting Arduino bootload on Atmega chips.
I couldn’t get either of these to work with Arduino UNO Rev3.
http://arduino.cc/en/Tutorial/ArduinoISP
http://letsmakerobots.com/node/35649
 
So I developed a couple that worked for me:
http://www.instructables.com/id/My-Arduino-Bootloader/
http://www.instructables.com/id/UNO-Bootloader-In-Circuit-Programmer-1/
 
Problem: Well, my second Instructable works good for Atmega328s in a socket, but I have a Seeeduino that uses a SMD Atmega. So I can’t bootload it with my ICPs. See picture.
Solution: What many people may not realize is most of these Arduino In Circuit programmers use the same pins that are on the ICSP connector or sometimes called ISP.
 
ICSP: In-Circuit Serial Programming
http://en.wikipedia.org/wiki/In-circuit_serial_programming
Basically, this is a way of programming a microcontroller PCB through a connector.
 
ISP: In System Programming
http://en.wikipedia.org/wiki/In-System_Programming
Basically, the same thing. I don’t know the difference. They seem to be used interchangeably.
 
 
Remove these adsRemove these ads by Signing Up

Step 1: ISP Cable

Picture of ISP Cable
pin2x3.jpg
ISP_pin_configurations.jpg
ISPCable1.JPG
ISPCable2.JPG
So I took my UNO ICP schematic and converted it to ICSP connectors. This makes it easier to hook up, then connecting six jumpers to various header pins on the Arduinos. See schematic
 
Construction: There’s a couple of ways to do this. You could take 2 2x6 female headers and solder wires or you can take six female-female adapter jumpers like these.
http://www.ebay.com/itm/New-31cm-40-PCS-Rainbow-Color-Flat-for-Arduino-Jumper-Cable-Wire-2-54mm-1P-F-F-/330885863082?pt=LH_DefaultDomain_0&hash=item4d0a5596aa
 
I used the second method.
Two Arduinos with ICSP/ISP connectors
6 f-f adapters
1 m-m adapter
 
Identifying pin 1 on ICSP/ISP connectors. These connectors are 2x3 male headers. See picture. Sometimes pin 1 is identified by a dot or a 1 or if you turn the Arduino over, pin 1 is square instead of round pad.
What I like to do is make sure by using a DMM and check which pin is connected to ground. This is pin 6 of the connector and pin 1 is the opposite. See pinout drawing.
For future reference, I mark pin 1 with red nail polish.
 
Now you have pin 1 identified on the two Arduinos. Identify one as the source Arduino. Source is the Arduino used to bootload the other Arduino, the Target.
Take one of the f-f adaptors and connect 1 to 1 on the two Arduino ICSP/ISP connectors.
Take another and connect 2-2, 3-3, 4-4 and 6-6
Take another f-f and connect one end to pin 5 on the Target Arduino.
   On the other end, connect the m-m adapter, plug the other end into D10  female header of the Source.
See picture and schematic.
Then I wrapped both connectors with transparent tape to keep them bundled in order.
And I marked each Pin 1 with red nail polish. See picture.

Step 2: LED Indicator

Picture of LED Indicator
GrnLED2.JPG
GrnLED3.JPG
Optional:
(I apologize for the fuzzy pictures)
Using just the ISP cable, it’s a little harder to tell if it bootloaded correctly or not. So I built an LED indicator for success.
I used a 9 pin male header, a 1.2K ohm resistor and a green LED.
One side of the resistor is connected to header pin for A0, the other side to the positive side of the LED.
The negative side of the LED is connected to Ground.
TIP: It doesn’t matter whether the resistor or the LED is connected to A0. It does matter if the LED is connected backwards or not. Also the resistor value is not to critical. A smaller value will mean a brighter LED.
 
Technically speaking you don’t really need nine pins but I like to have the header extended all the way to the end of the row so it’s harder to put it in the wrong holes.
Another thing I did is: notice one pin sticks out between the two female headers on the Arduino. I bent the bottom of that pin so that it couldn’t be inserted into the wrong header hole. See last picture.

Step 3: Using Arduino ISP to ISP

Picture of Using Arduino ISP to ISP
Seeeduino.JPG
Suggestion: So you may have noticed that the Target in the pictures has an Atmega328 in a DIP package. The reason I did this is so that if this process didn’t work then I could always take out the Atmega and re-bootload it in my other In Circuit Programmer.
 
Sketch code is attached in zip file.
Copy and unzip MTS_Optiloader.zip. Make sure the directory contains MTS_Optiloader.ino and three other files.
 
Plug USB into the Source Arduino which is connected to the Target Arduino.
Power LEDs on both should be on. (Power and ground for the Target is supplied through the ISP cable)
 
Upload MTS_Optiloader to the Source. This takes a while.
 
Now if you built the optional Green LED assembly, if the Green LED is lit, that means the Bootload was successful.
If you didn’t build the assembly, what I like to do is open the Arduino serial monitor and set it for 19,200 baud.
Type a ‘G’ and the bootload will run again. The screen will display the success or failure to burn it correctly.
 
Conclusion: So after being able to Bootload the Duemilanove, I hooked up my Seeedunio and was able to Bootload it also.
Some of you may think why did I write an Instructable to just bootload one Arduino? Well, actually, I have plans for using this setup in future projects. For now, I can throw the cable and the LED indicator in a bag with the schematic. 
Stay tuned!!
Gelfling66 months ago

The other method, is wiring the source device, as instructed in the ArduinoISP example (File/Examples/ArduinoISP), from 10 (CS/Reset) 11 (MISO), 12 (MOSI), and 13 (SCK/CLK). and running Pins 2 to 2 (+5V) and 6 to 6 (GND) between the two. I accidentally corrupted the bootloader on a mega2560, and using tips from several instructables here, as well on arduino.cc, and managed to get a working bootloader back into the Mega..