which board/mC/processor for very low power consumption

I'm currently working on a wristwatch. As I might buid an own biard later, I'm wondering which board/cpu will work best in the aspect of putting it into a very low power mode.

It basicly should be awaken by a pin input, read the time from external RTC (possibly a DS3231) display the time (most likely with ws2812 or Dot star LEDs an fall back to sleep after a configured amount of time.

Nick Gammon's power saving tutorial may be of interest.

When the microprocessor is not asleep the power consumption is fairly closely related to the clock speed - slower is more economical.

...R

LEDs are power hungry and can't be run on coin cells for a significant length of time.

Robin2:
When the microprocessor is not asleep the power consumption is fairly closely related to the clock speed - slower is more economical.

But if the actual amount of computation is at all significant, taking twice as long to perform it actually uses more power. :roll_eyes:

Certainly if you are mostly "busy waiting", it is better to use a lower clock speed or sleep.

Beware! Common shocking discovery on these forums: WS2812 or Dot star LEDs have a substantial "standby" current when completely dark. :astonished:

I would use the pro mini 3.3v and use this circuit. That way the Arduino is totally off and no power consumption in between button presses

Anthony

Ps sorry the link is not done properly. I am using the mobile version

Paul__B:
Certainly if you are mostly "busy waiting", it is better to use a lower clock speed or sleep.

That's the scenario I had in mind - it is certainly true of all the little projects I have created (none of which, by the way, is required to be energy efficient).

I guess one ought to estimate the balance between useful clock cycles and "waiting" clock cycles and compare the two for the different clock speeds. :slight_smile:

...R

Paul__B:
Certainly if you are mostly "busy waiting", it is better to use a lower clock speed or sleep.

Oh so true.

I had a situation where a bit of software was idling and thus could be run at lower speed for several seconds at a time. With the clock reduced to 1/256 of 8Mhz, a ATmega328P and 1284P used around 1mA. At full speed current was about 5mA.

So if the processor was actually doing something, it would overall consume around 50 times the power at the lower speed, bargain !

Thanks or all hints so far.
I'll try to be a bit more precise about the functions:

Just a timepiece:
-simply a accurate watch. Time is kept by the DS3231 (or something as suitable)
-pushbutton lights up LEDs to show time
--> I guess this should work with the by Anthony mentioned latching-power-switch circuit

a timepiece, additionally to the above with notification function:
same as above, but with a bluetooth chip
-this one should power itself up every minute or so.
--connect to your phone and read from a special app, if one of the really important contacts has called/texted you
--if so clock vibrates and signals you with a separate LED

Idea behind this, is to have a "smart watch", which doesn't others you with every insignificant event, but only, if one of your predefined contacts is calling you.

--> I'm not sure, if that can be done with the same latching-power-switch.

I think it could, if the RTC module would have an output pin, which can be set to a periodic switching.
If you can't do that with a RTC module, I guess I'm stuck to use some sleep mode of the board.

As for the standby power consumption of the LEDs: should be solvable by cutting power to the LEDs and thank for that hint.

Another option is to use the two alarm functions on the clock to turn on the Arduino for a notification. The Arduino could then set a new alarm and repeat. I have used the circuit on this video to wake up an Arduino every 24 hours.

Anthony

Hi Anthony,

do you happen to have the circuit diagramm and BOM somewhere else than the xoutube vid (it's missing the types of the transitorand MOSFET. (or is this just the same as the lacht-power-circuit mentioned above?

Let's say I wnt both versions in one would it be sufficient to "just" hook the Alarm pin to the base of the transitor with a diode?

And is there perhaps a smaller version of the MOSFET (like much, for a wristwatch)?
(as I understand it he cooling is necessary most when the MOSFET is switching fast)

EDIT: I just noticed: using both versions is missing the ability/information which event started the board....

Down in the comments there is a google drive link that takes you to a wiring diagram on the YouTube video. I will look up what I bought and send it. I never made the latching version and don’t have a schematic.

The mosfet is irlz44n
The transistor is bc547b

Question to the alarm power on:
Am I missing something? The alarm based power on in the youtube video powers the arduino only as long as the alarm-pin is high, right?
How does the alarm work? When the alarm starts, the pin is high and stays as on until the arduino sets a new one?

Question to the Button power on:
In this scenario, the button has to be pressed until the aruino has started to the point where the ppin2 is set high, right? I might use a reed contact for that, where I can't be sure to hold it long enough. I guess there is a circuit which does the same as holding down the button?

Here is a sample code I used to test the alarm on the clock. These base of this code was provided by the youtuber that posted the video. It was just a 1 minute trigger and then turns the arduino off after 10 seconds. You can also set an alarm at an actual time on the clock. For example you could read the time from the clock and set an alarm at 12 minutes in the future or at a specific time say 7:55 am. FOr more details, I would use this code and modify it by looking at the alarm data sheet or other web examples.

As mentioned, I did not build the push button trigger circuit but once again you will get a lot of hits if you google it with not only examples but trouble shooting on forums.

Anthony

/*
  RTCScheduler
  This project uses RTC to schedule turning on the Arduino based on alarm schedule. 
  After the Arduino has turned on it performs its given task and turns itself off to wait for the next schedule
  created   Dec 2017
  by CheapskateProjects
  ---------------------------
  The MIT License (MIT)
  Copyright (c) 2017 CheapskateProjects
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

#include <DS3231.h>
#include <Wire.h>

DS3231 Clock;

void setup() {
  // Start the serial port
  Serial.begin(9600);

  // Start the I2C interface
  Wire.begin();

  // Alarm is not enabled! Should set alarm
  if(!Clock.checkAlarmEnabled(1))
  {
    Clock.setClockMode(false);
    // 0b1111 // each second
    // 0b1110 // Once per minute (when second matches)
    // 0b1100 // Once per hour (when minute and second matches)
    // 0b1000 // Once per day (when hour, minute and second matches)
    // 0b0000 // Once per month when date, hour, minute and second matches. Once per week if day of the week and A1Dy=true
    // Set alarm to happen every minute (change to your wanted interval)
    Clock.setA1Time(1, 1, 1, 0, 0b1110, false, false, false);
    Clock.turnOnAlarm(1);
  }

  /*
   * TODO implement logic here
   */
   // Just a delay to see that it on
   delay(10000);
  /*
   * </Logic>
   */

  // Reset alarm to turn off the device
  Clock.checkIfAlarm(1);
}

void loop()
{ 
  Serial.println("Hello");
  // Nothing to loop
}