ZB1 Software Reset
The ATmega168 lacks a software reset instruction. For the ZB1 a
software reset instruction would enable firmware updates through the
RF link.
ATmega168 Reset
There are four ways to reset the ATmega168 --- the watchdog timer, the
brown-out comparator, the external reset pin and power-on comparator.
Software Reset using the Watchdog
To force a software reset using the watchdog, the watchdog interrupt
is enabled and the program is placed in an infinite loop. To make the
timeout happen quickly the watchdog counter is set to zero which will
force a timeout after approximately 15mS. A
reboot
command is shown below.
#include <avr/wdt.h>
.
.
.
void reboot() {
wdt_disable();
wdt_enable(WDTO_15MS);
while (1) {}
}
The standard ZB1 bootloader requires a modification so that the
watchdog reset will start the bootloader and not restart the
application. In the bootloader code, near the top of the main function
is a test to see which type of reset has occured. In the standard
bootloader only an external reset will start the bootloader
(
EXTRF = 1
). The code listed below will allow either an
external reset or a watchdog reset (
WDRF = 1
) to start
the bootloader.
if (! (ch & (_BV(EXTRF) | _BV(WDRF)))) // if its a not an external reset...
app_start(); // skip bootloader
Software Reset using an external pin
If the watchdog is being used an unused output pin could be used to
trigger an external reset using a one-shot. The one-shot is necessary
to insure that the reset line is held low long enough to guarantee a
reset.