two ways to reset arduino in software

 by gabriellalevine
Featured
Screen Shot 2012-11-06 at 2.26.34 PM.png
If you want to RESET Arduino from the beginning without manually pressing the RESET button, there are a few ways. Here are two ways, using minimal wiring / circuitry. 

 
Remove these adsRemove these ads by Signing Up

Step 1: Using 1 wire connected to the RESET pin

RESET_bb.jpg
1. electronically, using only 1 wire connecting an OUTPUT pin (12 in this example) to the RESET pin. (see the circuit)

In this example, pin 13, connected to the internal LED pin 13 is blinking. Pin 12 gets connected to the RESET pin by one wire.
-Typically, this would be a problem because when the application starts up, all pins get pulled LOW. This would therefore disable Arduino from every running. BUT, the trick is: in setup() function, the FIRST thing that happens is we write HIGH to the pin 12, which is called our reset pin (digitalWrite(resetPin, HIGH), thereby pulling the Arduino RESET pin HIGH. 
retrolefty says: Mar 10, 2013. 4:35 PM
If you look in any Atmel AVR datasheet they will explicitly tell you that this in not an acceptable method to reset a chip. Upon reset all I/O pins are set to input mode so you lose the LOW output from pin 12 in this example. This doesn't allow the reset low pulse to met the minimum low pulse width it has to be for a valid reset process. So use at your own risk. There is a valid way to reset a AVR chip in software without even needing a wired added as here. Just enable the watch dog timer and let it time out which will generate a true reset. Then in the setup function disable the WDT.
Lefty.
stringstretcher says: Nov 9, 2012. 10:40 AM
Ok, so teach me, why would I need to do this / want to do this? Why wouldn't this just loop, resetting over and over?
Nadr0j in reply to stringstretcherDec 19, 2012. 9:19 AM
You're right. In this example it will loop indefinitely.

It could have more useful applications in larger programs though. For example..

I once wrote a program when I was in geometry for a watch to extend its functionality. After every set of numbers I input I wanted it to give me an answer, wait 5 seconds and then reset itself so it was primed up for another set of numbers.

Admittedly this was a very lazy way for me do accomplish this but it got the job done.

Hope that helps.
DrNicker says: Nov 9, 2012. 8:19 AM
I've used this technique before just to see if it worked and it seemed useful. One comment though is that i would recommend using a resistor in there. Sending a high signal straight to the Reset pin could cause a short circuit and fry your chip. Not sure what would work better though, a pull up resistor from the reset pin to high, and allowing the "resetPin" to pull it low, or just placing a resistor between the two points.
pdemetrios says: Nov 8, 2012. 1:06 PM
There are and the WDT method for all the micros with WDT .
Setup the WDT and then make an infinity loop

WDTCSR=(1< WDTCSR= (1< for(;;)
and in the 16ms the mcros will reset and the MCUSR variable will
have the value WDRF
With your software the MCUSR will have an Unspecified value.
pdemetrios in reply to pdemetriosNov 8, 2012. 1:11 PM
sorry but the code has modified the correct is
WDTCSR=(1<<WDE) | (1<<WDCE) ;

    WDTCSR= (1<<WDE)

for(;;)
amandaghassaei says: Nov 8, 2012. 11:28 AM
nice, never thought about this, thanks for posting!
doxsys says: Nov 7, 2012. 7:51 AM
Neato! Thanks for the tips!
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!