4

In order to reduce power consumption, I want to resume my Arduino from standby mode every 10 seconds. For this a hardware interrupt is necessary.

Is there such a device that can create a quick impulse to trigger that interrupt? It can be anything from 10ms to 2 seconds; doesn't matter. My first thought was to use a 555 timer, but this one can only be on for 10 seconds and off for the same amount of time.

The best solution for me would be an already assembled device that I just have to wire with my Arduino since my knowledge in electronics is very low. Or a detailed assembly plan, then I would be able to build it myself I guess?

UPDATE: I was now able to put the Arduino into standby-mode using the Low-Power library. At first it seemed like it didn't work, because I wanted to print out a text over the serial connection. Instead, I tried to let the internal LED blink every 8 seconds, and this works perfectly.

8
  • 1
    Your question doesn't say why you don't simply program a second Arduino to do it. This indicates to me that your question may be lacking some vital details about your requirements.
    – Dampmaskin
    Jul 27, 2018 at 7:13
  • Well the general purpose would be to reduce power consumption. So a second arduino wouldn't be very suitable hence it uses the same amount of power while the other one is in idle state. Jul 27, 2018 at 7:21
  • You should update the question to include this information.
    – Dampmaskin
    Jul 27, 2018 at 7:25
  • 1
    Look into connecting an RTC quartz for use as the wake-up timer, see e.g.: steemit.com/science/@techlife/…
    – JimmyB
    Jul 27, 2018 at 13:47
  • 1
    @The_javascript_King You can do it with your Mini. See a link in my answer.
    – Maple
    Jul 27, 2018 at 17:01

4 Answers 4

12

A 555 doesn't have to generate a 50% duty cycle. Even if you do want to use a 50% duty cycle, the edge can be RC coupled into the interrupt to reduce the pulse width.

An Arduino can use a slow clock like a 32kHz watch crystal, then it's very low power indeed. This slow one can be used to wake-up your more power-hungry Arduino.

The lowest power and tidiest external solution would be to use a CD4060. These are designed to be very low power, very long period timing devices.

The correct way to do it is to use the internal Watchdog Timer to wake itself up from sleep. This uses an independent internal hardware 128kHz low power oscillator. The longest this can be programmed to wait is 8s. However, if you program it to 5s, then the Arduino can choose to do work, or go straight back to sleep again, on each interrupt.

6
  • Well the CD4060 seems promising, but the Watchdog timer solution looks way easier. I always tried it with just that one line to wait 8 seconds: LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); But doesn't this libary automatically set the watchdog timer or do I have to do this by myself? Jul 27, 2018 at 7:55
  • @The_javascript_King who knows? How about you ask that specific question on the Arduino forum.
    – Neil_UK
    Jul 27, 2018 at 7:58
  • Yeah, your're right. Gonna ask it there. Thanks for your hint with the watchdog timer, I think I'm on the right way Jul 27, 2018 at 8:00
  • @Neil_UK You cannot program the WDT to 5s. There are only few fixed clock dividers that can be used.
    – Maple
    Jul 27, 2018 at 8:46
  • 2
    Umm... I thought I did: "If you need exactly 10 seconds you can write a loop with 5 cycles and call powerDown with 2 seconds sleep"
    – Maple
    Jul 27, 2018 at 9:49
10

The best solution for you is to use LowPower library which does not require any external parts. It supports up to 8 seconds sleep. If you need exactly 10 seconds you can write a loop with 5 cycles and call powerDown with 2 seconds sleep.

If you still want to use external interrupt, see this for some chip options.

Also, see this article for some good ideas on reducing power consumption, and this article on how to run Arduino for a year on coin cell.

5
  • Well at first I had the same idea, but somehow it doesn't work on my arduino micro. In some forums they said, that even if you use this command: LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); You still have to use an interrupt to start it again. Do you know any working examples? Jul 27, 2018 at 7:46
  • I don't have micro to try it but from the forums it usually works. Do you by any chance operate WDRF / WDE anywhere in your code? Because that library uses WDT to wakeup. You can also try Enerlib library, which is pretty much the same.
    – Maple
    Jul 27, 2018 at 8:16
  • UPDATE: I managed to get it to work with the LowPower libary. I let the internal LED blink and then put it into sleep mode. Before that I always tried to print a strin over the serial port but that doesn't work rigtht after standby. But the LED does :) so problem solved I guess. But still it would be great if serial also works after standby, andy idea how that would be possible? Jul 27, 2018 at 17:40
  • 1
    To achieve minimal power the library disables practically everything in the MCU before going to sleep, including timers (used by serial port). It takes some time for MCU to fully wake up (more than 200 clock cycles in case of power down mode). Try adding a delay after wake up.
    – Maple
    Jul 27, 2018 at 17:49
  • Also, I just realized that if you use Arduino you probably have something like serial.begin in your setup. If you use sleep modes it is better to initialize everything after wakeup and shut down everything before going to sleep. Basically - treat "after wakeup" code as if your program just started.
    – Maple
    Jul 28, 2018 at 6:09
4

I believe that the LTC2956 was made exactly for this purpose. Directly from the datasheet:

The LTC2956 is a micropower, wide input voltage range, configurable wake-up timer with pushbutton control.

It periodically wakes up and turns on a connected system to perform tasks like monitoring temperature or capturing images. After completing the task, the LTC2956 turns the system off to conserve power. The wake-up timer period can be adjusted from 250ms to 39 days using configuration resistors

You can find the datasheet here: LTC2956. It is probably considered expensive at 1.98$ in 1000+ quantity.

0

Along the lines of mr_sunshine's answer, another chip you could use is commonly known as a 556 timer - it's two 555 timers in a single package. Run one timer on the normal 50% duty cycle (astable), and have it trigger the other timer in monostable mode to send a short pulse of voltage. Look for a schematic for a servo controller based on a 556 or two 555's, and change the values to get your 10s delay. Here's a link to one such page, found with a google search: Servo Exerciser

1
  • 2
    No, for two reasons. First the asker is mistaken, a dual timer is not needed, a single 555 could do that job. But more importantly, even in a CMOS version this will consume 10-25 times more power than appropriate solutions. That LTC2956 is single digit microamps, this would be 100 uA or worse. Jul 27, 2018 at 14:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.