Coming back to this 9M later, it seems there is an official Microchip support answer:
If you want to perform a software reset of your AVR you should use the internal Watchdog. Simply enable it and let it time out. When the Watchdog triggers it resets the program counter back to 0, clears all the registers and performs all the other tasks. This operation gives the same result as pulling the RESET line low.
You should not try to:
- Use another pin of the AVR to pull the external RESET line. The pins of the AVR are tristated halfway through the minimum reset time, this releases the RESET line and hence nothing happens.
- Jump to program location 0. Jumping to program location 0 does not clear all the registers and hence you do not have a "clean" reset.
Example Code (GCC) Resetting the AVR every 30mS:
#include <avr/io.h>
#include <avr/wdt.h>
int main(void)
{
wdt_enable(WDTO_30MS);
while(1) {};
}
I'm still searching for a hardware alternative, since I think the Watchdog will still consume some amount of power which I'd rather save, even if it's microamps.