Pages: 1 [2]   Go Down
Author Topic: reset arduino with 555  (Read 5068 times)
0 Members and 1 Guest are viewing this topic.
UK
Offline Offline
Full Member
***
Karma: 2
Posts: 110
Kittens eat Arduinos
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

From looking around online, I had seen that using the watchdog aspect of the arduino is not the best idea because with the arduino bootloader it can sometimes get stuck in an infinite reboot sequence which would not be good, as this device will be far far away from any other humans.

That depends on the bootloader. The advice in the Atmel datasheets say the first thing the bootloader should do is disable the watchdog timer to avoid this...

All of the bootloaders that I have looked at in the current source tree CAN clear the configuration and check to see if the reset was due to a WDT, and if so immediately start the sketch.

For example from the source "Arduino / hardware / arduino / bootloaders / atmega / ATmegaBOOT_168.c"
Code:
int main(void)
{
uint8_t ch,ch2;
uint16_t w;

#ifdef WATCHDOG_MODS
ch = MCUSR;
MCUSR = 0;

WDTCSR |= _BV(WDCE) | _BV(WDE);
WDTCSR = 0;

// Check if the WDT was used to reset, in which case we dont bootload and skip straight to the code. woot.
if (! (ch & _BV(EXTRF))) // if its a not an external reset...
app_start(); // skip bootloader
#else
asm volatile("nop\n\t");
#endif

So if you have this bootloader built with WATCHDOG_MODS defined, then you get deterministic watch-dog behaviour... and the restart-time is faster because the boot loader skips all the hanging around for a sketch download to start.

It does seem like a simple software configuration problem to me:).
Logged

0
Offline Offline
Full Member
***
Karma: 1
Posts: 137
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

UPDATE:  when the arduino drives the the 555 trigger low, the RESET pin of the arduino pin is driven low as it should, however the arduino RESET pin is staying low as the pin from the arduino is in some kind of high z state and so the trigger of the 555 is doing something strange.  Is there some way to fix this or get around the 555 problem?  maybe use a transistor on the trigger and connect the base to the arduino output pin? 
I hope this thread isn't dead yet   smiley-sad

(FYI, the schematic is as shown in the previous post)
Logged

Cumming, GA
Offline Offline
Edison Member
*
Karma: 20
Posts: 1655
Ultimate DIY: Arduino
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Try this modification.  Keep in mind that the 555 is still a LINEAR device not TTL.



Capacitively couple the arduno to the 555 trigger.  I'd start with a 0.01 cap.
Logged

Global Moderator
Boston area, metrowest
Offline Offline
Brattain Member
*****
Karma: 538
Posts: 27099
Author of "Arduino for Teens". Available for Design & Build services. Now with Unlimited Eagle board sizes!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

You can set up the 555 as a one-shot (monostable), howeverpin 3 toggles from low to high forthe one-shot time duration, then goes back low. So you'd have to put an inverter on the output,which could be a simple NPN transistor; 555 pin output 3 thru say a 1K resistor to the transistor base, collector to the arduino reset pin, and emitter to ground.
Logged

Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

0
Offline Offline
Full Member
***
Karma: 1
Posts: 137
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pwillard, i wish i could give you more than 1 karma point...the circuit now works wonderfully smiley-grin

for anyone else trying who reads this post and wants a good clean restart without having to modify bootloader or any other "tricks" to reboot their arduino, below is your circuit!

Note:  The pin from the arduino must be set as an output and pulsed low to trigger a reset
Logged

SF Bay Area (USA)
Offline Offline
Tesla Member
***
Karma: 133
Posts: 6756
Strongly opinionated, but not official!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
the arduino bootloader it can sometimes get stuck in an infinite reboot sequence
The new "optiboot" bootloader (as used in Uno) has fundamentally correct watchdog handling.  (It uses the WDT internally to start the sketch, so it always disables it before the sketch itself starts.)
Logged

0
Offline Offline
Shannon Member
****
Karma: 207
Posts: 12189
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Why have the 555 in the first place?  Are you ultimately trying to start a timer (based on the 555) that resets the Arduino after some amount of time?

I suspect the motivation is  hold reset pin low for a certain period of time to guarantee correct operation.  >= 2.5us according to the datasheet - if the reset operation tri-states the I/O pins too early it would abort the reset prematurely possibly leading to an undefined state.  Hence the need for external circuit to condition the reset pulse - remember once reset has begun the I/O pins may not do what you expect!

I notice one of the schematics has a 10nF cap iniine to the trigger input - this should be replaced with 1k resistor as it can cause 5V overvoltage on the 555 trigger input, potentially damaging its protection circuit, on positive-going edges.

Another observation is that the 555 might be rather slow to reliably generate logic signals - I can't find from the datasheet whether the reset pin has schmidt-trigger or not - if not then it may need a fast rise/fall time to guarantee proper operation.  I doubt the reset pin has schmidt trigger behaviour as it is also a high-voltage progrramming mode pin.   So I'd recommend using a fast modern 555 version.
Logged

[ I won't respond to messages, use the forum please ]

Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 34
This text is personal. Aquire a Gold account to read it.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

the circuit now works wonderfully smiley-grin


for anyone else trying who reads this post and wants a good clean restart without having to modify bootloader or any other "tricks" to reboot their arduino, below is your circuit!

Thank you for the schematic - I've been trying to find one for ages!
I just don't understand what we're supposed to do in terms of code. Do we have to declare in the setup() that the OutputPin is HIGH and, in the loop(), whenever we want to reset the watchdog (to "pat the dog") we just do this:
Code:
digitalWrite(OutputPin, LOW);
delay(5);  // is 5ms a decent value at all???
digitalWrite(OutputPin, HIGH);
???

Could you please clarify with an example?



Also, how much time is the watchdog setup to wait, ie, how much time does the Arduino have to execute each loop and therefore to "pat the dog"? How can I modify that?


Thank you again! smiley
« Last Edit: March 10, 2011, 07:04:35 pm by pedrotome » Logged

0
Offline Offline
Full Member
***
Karma: 1
Posts: 137
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The nice part of my circuit is that you don't need to continuously "pat" the dog.  whenever you want to restart the circuit, you just drive the specified arduino output pin high or low depending on how it is initialized in the setup code.  basically, the trigger pin of the 555 is held low and happy, then whenever it is triggered by arduino, the 555 sends a low to the arduino reset to restart the arduino.  the 555 then keeps it low until its satisfied (determined by threshold resistor and cap values) then sends another happy high signal to the arduino reset to keep the arduino from restarting again.

FYI, the highs and lows in the above may be flipped and reversed, its been a good long while since i built and tinkered with the circuit.  just remember, no patting of the dog in this
Logged

0
Offline Offline
Full Member
***
Karma: 1
Posts: 137
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

i am trying to find some sample code that i have to put up with the explanation
Logged

0
Offline Offline
Full Member
***
Karma: 1
Posts: 137
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sorry, i couldnt find any sample code that i have, but really look at what pwillard has to say, it will help tremendously.

also, in the setup, set whatever pin you will use to trigger the monostable to 'output', and in the next line of code, write it to high, then  when you want to trigger a restart, write the output pin to low, which will then trigger the reset and restart your arduino.

keep in mind that what they have been saying about the inline capacitor overloading the pin, may certainly be true, never gave me any trouble.  all i can say, is that the posted circuit worked perfectly for me.  good luck
Logged

Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 34
This text is personal. Aquire a Gold account to read it.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmm... so this is not a Watchdog Timer... My bad, then. I seem to have misunderstood.

Thanks, though!
Logged

Pages: 1 [2]   Go Up
Jump to: