Периферия в спящем режиме

Всем здравствуйте.
Код примерно такой.

#include <LowPower.h>

#include <kakmyc_btn.h>
#define btnPin 3
#define ledPin 4
enum {NOT_PRESSED,SHORT_PRESS,DOUBLE_CLICK,TRIPLE_CLICK,LONG_PRESS=255};
kakmyc_btn btn1(btnPin,INPUT_PULLUP,2);

void setup(){
    Serial.begin(9600);
    pinMode(ledPin,OUTPUT);
}

void loop(){
   static boolean pressFlag=0;
    if(btn1.read()==LONG_PRESS){
        pressFlag=1;
          }      
    if(pressFlag) 
    Serial.println("btn1 pressed");
    digitalWrite(ledPin,HIGH);
    delay(5000);
      
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);  
 if(digitalRead(btnPin))pressFlag=0;
}

На ledPin пищалка. В Serial вывод прекращается, а пищалка работать продолжает. Это нормально?

При “примерно таком” коде, это “примерно нормально”.

Я по-разному пробовал, обработчики кнопок тоже разные были. В общем, если процессор во сне оставляет уровни на пинах, получается надо все отключать вручную, чтобы реально снизить потребление? Есть ли режим, где все это уже реализовано?

power_all_disable();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  MCUCR |= (1<<BODS) | (1<<BODSE);
  MCUCR &= ~(1<<BODSE);
  sleep_mode(); 

Это не помогло. Либы конечно другие были. Если power_all_disable(); должен выключать, то буду копать дальше. Не понимаю, почему так.

Таки да. И ещё желательно обеспечить стабильное состояние выходов. Также надо понизить частоту и много там ещё чего можно сделать.

Правда, Вы не написали с каким именно железом Вы работаете. Почему? Считаете это не важным? Или тема не про экономию, а про потрындеть?

1 лайк

Виноват. Ардуино нано с алиэкспресса. Самое непонятное было, что сериал-то отключается, а пищалка- нет.

А светодиоды отпаял? У CH340 питание отрезал?

Зачем? Я сниму камень. Вопрос не в этом.

А как проверять ток, если имеющееся окружение потребляет больше.

Какой смысл было что-то измерять, если это макет, да еще который во сне орет? Вернее, часть макета. Надо разобраться с кодом сначала, чтоб не орал. Тем более меньше минимума все равно не будет, поэтому как получится.

Практически любая экономия бесполезна. Микроконтроллер там самый слабый потребитель, в основном жрут другие потребители.

Чего тут непонятного? Сериал должен что-то делать – исполнять команды, а для пищания ничего делать не нужно – есть уровень, вот оно и пищит.

Статья что надо. Щас пока не продолжил, других вопросов нет. Спасибо.
Ну там у меня дисплей через транзистор запитан, тоже надо будет отключить, и еще схема на 8мА на прерывании висеть будет, так что если только камень использовать, то существенных потребителей и нет. Это первый скетч, можно сказать. Я вообще не понимаю, что делаю.

Вы делаете нам мозги …

1 лайк

да ладно, лишь бы горшком не называл и в печь не ставил

Спасибо, очень рад. Как сказать, начинающий программист умер во мне вместе с отладчиком СофтАйс. Поэтому да- делаю мозги и вспоминаю. Разбираюсь помаленьку, когда время есть.