element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum Is it possible to reset the Arduino with a software command?
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 22 replies
  • Answers 5 answers
  • Subscribers 394 subscribers
  • Views 3893 views
  • Users 0 members are here
Related

Is it possible to reset the Arduino with a software command?

billpenner
billpenner over 9 years ago

I am now resetting using  "asm volatile ("  jmp 0"); and it works but I would like to leave the variables as is. I want to leave the LCD backlight off. I can supply the code if necessary.

Thanks, Bill

  • Sign in to reply
  • Cancel

Top Replies

  • Robert Peter Oakes
    Robert Peter Oakes over 9 years ago +2 suggested
    essentially it would be as if you hit the reset button. Remember the Arduino code is at a very high level, abstracting much of the hardware and even code from the developer, the typical developer using…
  • Robert Peter Oakes
    Robert Peter Oakes over 9 years ago in reply to shabaz +2
    Oh so true But a fun road to travel, as with many things, the trip can be more fun that the destination
  • shabaz
    shabaz over 9 years ago +1 suggested
    Hi Bill, That may be tricky, depending on the scope some variables are set to zero automatically, and others will have different content (i.e. non-zero). However, one option is to write your data to EEPROM…
  • shabaz
    0 shabaz over 9 years ago

    Hi Bill,

     

    That may be tricky, depending on the scope some variables are set to zero automatically, and others will have different content (i.e. non-zero).

    However, one option is to write your data to EEPROM, which of course is persistent even after power loss.

    Is there a reason you wish to reset? Ordinarily you'd never do that (unless a software failure was detected, e.g. using a watchdog timer)

    or some rare scenario like a software upgrade. (normal practice is to never allow have the microcontroller to reset or exit).

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • clem57
    0 clem57 over 9 years ago

    Why not set the LCD backlight off and go into a do while loop forever?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • billpenner
    0 billpenner over 9 years ago in reply to shabaz

    The display sets idle for a long time  (hours) then when a keypress happens, the backlight comes on until the current function completes.

    Thanks for the thought.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • billpenner
    0 billpenner over 9 years ago in reply to clem57

    Good suggestion. Let me think about how to implement that. Actually I wanted to reset everything, like the reset button does, but leave the backlight off till a button is pressed.

    Thanks Bill

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 9 years ago

    So even though the actual software / hardware reset is not the best way to acheive what you want, here is the solution anyway just to cover it off

     

    From the ATMEL AVR site

     

     

    How do I perform a software reset of the AVR?

     

    The canonical way to perform a software reset of non-XMega AVR's is to use the watchdog timer. Enable the watchdog timer to the shortest timeout setting, then go into an infinite, do-nothing loop. The watchdog will then reset the processor.

    XMega parts have a specific bit RST_SWRST_bm in the RST.CTRL register, that generates a hardware reset. RST_SWRST_bm is protected by the XMega Configuration Change Protection system.

    The reason why using the watchdog timer or RST_SWRST_bm is preferable over jumping to the reset vector, is that when the watchdog or RST_SWRST_bm resets the AVR, the registers will be reset to their known, default settings. Whereas jumping to the reset vector will leave the registers in their previous state, which is generally not a good idea.

    CAUTION! Older AVRs will have the watchdog timer disabled on a reset. For these older AVRs, doing a soft reset by enabling the watchdog is easy, as the watchdog will then be disabled after the reset. On newer AVRs, once the watchdog is enabled, then it stays enabled, even after a reset! For these newer AVRs a function needs to be added to the .init3 section (i.e. during the startup code, before main()) to disable the watchdog early enough so it does not continually reset the AVR.

     

    The rest can be found by following the link in the title above

     

    or

     

    WDTCR=0x18;

    WDTCR=0x08;

    #asm("wdr")

    while(1);

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • tonyboubady
    0 tonyboubady over 9 years ago

    Maybe I/O pin controlling the backlight of LCD using transistor? On click of the button(which the I/O pin connected to base of the transistor) the transistor switch on the LCD backlight with timer and goes off after a minute or so...and waiting for user keypress... exactly like how mobile/tablet screen works...I am not sure what type of LCD you use but I can use this method with 16x2 LCD.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • billpenner
    0 billpenner over 9 years ago in reply to Robert Peter Oakes

    Yes this might do it. I'm not clear about WDT though. Where does the program go after the WDT times out? If the code returns to void loop()  then this would be perfect.

    Please clarify this for me.

    How do I write to the control register? RST_SWRST_bm in the RST.CTRL register. Will the reset occur immediately after  I write to the control register?

      I think I'm making this too complex but I would like to return to the main loop() after the reset.

    Here is the code so you can see what I am doing. There are three places where I need a "reset".

     

    Thanks Peter I really appreciate your help.

    Bill

    woops.. the code didn't stay attached. Would the complete code help?  About 250 lines.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 9 years ago

    essentially it would be as if you hit the reset button. Remember the Arduino code is at a very high level, abstracting much of the hardware and even code from the developer, the typical developer using "Wiring" to code the arduino is not even close to the machine. The watchDog Timer will trigger a reset by entering into a defined address and executing the code found there, this is all explained in the linked article I provided. It is not quite the same as powering off then on, but it is as close to hitting the reset button as you can get.

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • mcb1
    0 mcb1 over 9 years ago in reply to billpenner

    As an alternative.

    Could you connect an Opto-coupler across the reset input.

    You could then drive the output high and reset it.

     

    Mark

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • billpenner
    0 billpenner over 9 years ago in reply to shabaz

    I realize how correct you are re: It's not wise, normal to reset, re power a microprocessor. But I am concerned that an error could occur that would lock up the system. By starting from the beginning would clear any thing like overflowing the stack due to incorrect input or electronic noise or my bad programming. I don't have debugging programs that would allow me to se the state of all the variables , stack etc. I also don't have the time or expertise to check every possible scenario.  I tried setup() ; ..there is where I realized that I can't leave the variables as they are ( what a mess this creates). I appreciate all the helpful advice and I am still working on all the suggestions. At present, I am still using the asm volatile ("  jmp 0") and although it causes blinks in the display, it seems to be safe regarding the above. The training is worthwhile even if I am not able th fully understand all the ramifications of the suggestions.

    Bill

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube