Arduino Nano ATmega328P не засыпает ни с <LowPower>, ни с <avt/sleep.h>

Я работаю над проектом Arduino Nano с батарейным питанием. Мне действительно нужно, чтобы это экономило энергию в течение нескольких часов подряд, поэтому я обратился к библиотеке Arduino LowPower и avr / sleep.h, чтобы выполнить эту работу.

Однако, что бы я ни делал, не похоже, что правление не собирается спать. У меня есть образец скетча, который пытается перевести плату в спящий режим, а затем переключает реле, когда оно просыпается, но оно всегда переключает реле сразу после загрузки, так что это означает, что оно не перешло в спящий режим.

Я также измерил ток, поступающий на плату, и он постоянно составляет 14 мА. Я бы ожидал увидеть гораздо меньшую ничью, пока он спит.

Вот два фрагмента кода, которые я пробовал, один с низкой мощностью, а другой с avr / sleep.h

void setup(){
    pinMode(relayPin, OUTPUT);
}

void loop(){ 
    // Этот вызов, похоже, ничего не делает
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    toggleRelay(); // Это выполняется непрерывно, без указания времени ожидания
}

Вот другой с низкой мощностью

void setup(){
        pinMode(relayPin, OUTPUT);
    }
    
    void loop(){ 
        // Этот вызов, похоже, ничего не делает
        LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);

        // Это выполняется непрерывно, без указания времени ожидания. 
        // Я бы ожидал, что он будет переключаться только каждые 8 секунд
        toggleRelay(); 
    }

Наверное, я делаю что-то глупое, но не могу понять, что именно... Какая-нибудь помощь? Большое спасибо!

, 👍2


1 ответ


Лучший ответ:

5

Я не знаю о библиотеке LowPower. Однако в вашем тесте на основе avr-libc вы забыли перевести устройство в спящий режим с помощью sleep_mode():

void loop() {
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // выбираем режим глубокого сна
    sleep_mode();   // теперь переходим в спящий режим
    toggleRelay();  // выполняется при пробуждении
}

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

,

О, это было оно, да! Тяга упала прямо до 5 мА. Спасибо! Я знал, что это должно быть что-то глупое, о чем я забыл., @Santanor