Go Down

Topic: Software reset? (Read 895 times) previous topic - next topic

etracer

Is there a way to invoke a reset via program instructions (purely via software)?

And no, I don't want to connect one of the digital pins to the reset pin and bring it low.  This is a hardware solution and from what I can remember it's advised against in the ATmega168 datasheet.

mem

This post has a link to example code to do a software reset using the watchdog timer: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1222941939/4#4

etracer

Perfect!  That's exactly what I needed.

Thanks for the help.


HULK

Mem,

Did try the reset code but it actually just ended my code maked it frezze. Any pointers to what i could have done wrong?

Etracer,

Did you get it working?

etracer

Here's a simple little sketch that looks for digital pin 2 to go high and then executes the reset.  Make sure you have a pull-down resistor on pin 2 so you don't leave it floating.

Code: [Select]
#include <avr/io.h>
#include <avr/wdt.h>

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

void setup()
{
 Serial.begin(9600);
 Serial.println("Sketch startup.");
 pinMode(2, INPUT);
}

void loop()
{
 if (digitalRead(2) == HIGH) {
   Reset_AVR();
 }
}

mem

No, I must admit that haven't tried it. If its hanging I wonder if the bootloader needs to be modified to turn the watchdog off. See if you can set the interval long enough to get past the bootloader so you can turn the watchdog off in setup. I would have a go myself but am busy getting the GLCD library working with the ATmega644 chip  ;)

HULK

Thanks etracer,

That is the same code i used but it did not work for me but then i am using a ATMega644 and sanguino bootloader that may be the problem.

No high priority on this for me right now mem ...

etracer

The above code works fine for me with an ATmega168 - but then I'm using LadyAda's "no-wait" bootloader.  So maybe that's the difference.

Go Up