Retrofitting AutoReset feature into an old Arduino serial board by nkcelectronics.
I learned about the AutoReset feature added to the new Arduino Diecimila boards and decided to try if it is possible to retrofit this new functionality into my old Arduino serial board.
AutoReset is a feature that allows you to upload the compiled sketch to the Arduino board without pressing the reset switch. The way it works is by sending a reset signal (GND) to the reset pin using the DTR signal on the RS-232 interface. It is possible to retrofit any Arduino board, but a serial board is easier because the DTR pin is very accessible.
Viewed from the bottom of the PCB, the RS-232 connector has the following pin out:
The retrofitting process consists on soldering a 0.1μF disc capacitor between the DTR pin and the Reset signal. The reset signal is available in several points of the PCB, but the most accessible one is in the ICSP header (pin #5).
List of components:
Before starting the retrofitting process, unplug your Arduino board and remove the ATmega168 chip.
First solder one lead of the capacitor to the DTR pin, available in the RS-232 jack. DTR is the second pin from the top, left column. NOTE: do not pay attention to the red wire. It is a repair from a mistake I made soldering the transistor, while building the Arduino serial board.
Then solder the other lead of the capacitor to RESET, available on pin #5 of the ICSP header. Viewed from the solder side, it is the bottom pin to the right.
The result is shown in the following picture:
Finally, program the ATmega168 with the new Arduino Diecimila Bootloader (there are several forum entries and tutorials about bootloader programming) or get a new Arduino Diecimila ready ATmega168. Insert the ATmega168 in the socket and plug the Arduino serial board.
You will need Arduino 0009 that supports AutoReset. When you press the upload button in the software, it will send a reset signal to the board and upload the compiled sketch... all without pressing the reset switch.
As I said before, it is possible to retrofit other Arduino boards (USB, NG). You need to solder a very thin wire to the DTR pin in the FTDI chip (pin #21 in the FT232BM/L). Then solder the capacitor from the wire that goes to the DTR pin to the reset pin)... and voilà.
An additional recommendation if you are using Windows XP and an Arduino 0009. Try to use the lowest COM port number as possible. I was using 12/13 and even 9 and Arduino was giving me avrdude errors, until I switched the USB virtual port to use COM2, which was unused in my PC (this shows that I retrofitted an USB board as well). Less problematic if using a plain serial board, with a serial cable connected to COM1.
The new bootloader waits only 1 second to start receiving the compiled sketch. Uploading sketches is a little bit tricky, even for AutoReset!
Retrofit under the scope
I captured some scope analysis of the retrofit. For the test, I uploaded the "fading LED" sketch using AutoReset.
AutoReset captured at the RS232 DTR pin.
Arduino sends low to DTR, which translates to -6V (-5.6V to be more precise) for 22ms sent by the PC to the RS232 DTR pin.
-5.6V during 22ms is the AutoReset signal.
At the reset pin, I measure the same 22ms "LOW" signal, but it swings from +5V to zero and bounces to +10V. I know that the reset pin on the ATmega168 can tolerate +12V, used during high voltage programming, but I don't know if this is completely safe.
Comments are welcomed. I started a forum discussion thread if you want to share your experience: http://forum.arduino.cc/index.php/topic,24197.html.
Retrofitting the USB based Arduino does not present this issue, as the FTDI chip delivers digital friendly voltage levels.
I need to test the AutoReset uploading feature with the XBee Shields.
Retrofitting as any other hardware hacking activity may damage your Arduino board. This is a very simple retrofitting process, but you are on your own. I am not responsible for damaged hardware.