Hard reset the Arduino from software

So I have read up on how to reset an Arduino (from a call(0) to using a Watchdog) and they all are either half-baked (in that they don't fully reset the Arduino and attached shields) or aren't supported easily with a stock Arduino (the Watchdog timer can cause reset loops if not set up properly).

Would there be any use for a hardware based reset? I'm thinking of a solid state relay sitting between the Vin line and voltage source controlled by a 555 timer and a small button battery (or even capacitor) that could be toggled off by a pin on the arduino and then automatically come back on (by use of the 555) after a second. Perhaps even setup the 555 as a count down timer that would flip the realy off then back on if it doesn't get a signal from the arduino every X seconds. A cheap, DIY, hardware Watchdog of sorts.

There is a reset pin which will reset the board if taken low. If you could connect this to a circuit which floated or went high once the board had reset, that should do the trick. I haven't investigated what happens to output pins when the reset pin is held down, but if they stop 'outputting' it might simply work if you connect an output to reset and send it low. Why don't you try it and let us know what happens?

I haven't investigated what happens to output pins when the reset pin is held down, but if they stop 'outputting' it might simply work if you connect an output to reset and send it low. Why don't you try it and let us know what happens?

Some AVR datasheets and app notes talk about this and it doesn't work. Upon the initial reset all the I/
O pins go tri-state removing the active low signal and not giving the hardware reset function enough time to complete properly. AVR recommends not trying that method. However an output pin could be used to trigger a simple 555 pulse generator of the proper minimum duration output that would insure a full proper hardware reset is generated.

This subject comes up a lot in the past. In almost all cases the need for it is because of improper program structure or masking over bugs in the code. A proper designed program should not have a need to have a external hardware reset generated under software control. The WDT and the various sleep modes is more enough for any application.

Lefty

I'll have to think about this and then post back some schematics.

On the recommendation of others, I've been using a digital pin wired directly to RESET. Works great.