Спящий режим и работа таймера

Тема в разделе "Arduino & Shields", создана пользователем m1shk4, 21 май 2017.

  1. m1shk4

    m1shk4 Нуб

    Здравствуйте. Не нашёл нужной темы на форуме. Проблема такая: нужно ввести мою ардуину в сон так, чтобы сон не останавливал работу таймера платы. Т.е. чтобы во время сна таймер продолжал отсчитывать время работы ардуины.
    Нашёл такую библиотеку https://github.com/rocketscream/Low-Power , но как бы я не пытался её настроить, она отключает таймер или при включенном таймере отказывается работать. Выбрал её, т.к. она проста в использовании и хорошо вводит ардуино в энергосбережение.
    Код (C++):

    #include "LowPower.h"

    void setup()
    {
    }

    void loop()
    {
      LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF,
                    SPI_OFF, USART0_OFF, TWI_OFF);
    }
     

    Если же такое не представляется возможным, хотел бы узнать другие способы максимально экономить заряд.

    Сам проект выглядит так: по нажатию кнопки активируется экран, буквально на секунд 30, где экран - матрица 8х8 светодиодов; реагировать на 3 кнопки; менять некоторые внутренние переменные по истечению определённого времени.

    Буду благодарен за любую помощь.
     
  2. rkit

    rkit Гуру

    Не смущает?
     
  3. m1shk4

    m1shk4 Нуб

    Смутило. Именно поэтому пробовал поочереди эти таймеры включать и выключать. Именно timer0 и является нужным мне, но включив его ардуино уже не уходит в сон
     
  4. mcureenab

    mcureenab Гуру

    Сон может прерываться прерываниями. Это нормально и на потребление энергии практически не влияет.

    Перед уходом в сон. Можно запретить прерывания. Но тогда кнопка тоже не будет работать.
     
  5. m1shk4

    m1shk4 Нуб

    Не очень понимаю, о чем идёт речь. Только начинающий в этом деле, поэтому, к сожалению, желательно объяснять, как пятилетнему ребенку :Р
     
  6. mcureenab

    mcureenab Гуру

    В МК можно отключит отдельные модули, такие как таймеры например. Тогда их работа прекратится и энергия на них не будет расходоваться. Остальные модули МК будут работать как ни в чём не бывало.

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

    У вас какие симптомы, что Ардуина не спит? Питание от USB?
     
    arkadyf нравится это.
  7. DetSimen

    DetSimen Guest

    если не нужна функция millis(), аппаратно запретите таймер 0 (прерывание от него). Для своих целей используйте таймер 1 или 2, не забывая после отработки своей логики вызывать sleep().
     
    arkadyf нравится это.
  8. m1shk4

    m1shk4 Нуб

    От выполнения кода ардуино должна входить в сон на 8 секунд, но при включении timer0 она не спит. Питание от юсб.
     
  9. mcureenab

    mcureenab Гуру

    Где видно чтотне спит?
     
  10. rkit

    rkit Гуру

    По таймеру0 и просыпается постоянно. Потому что как его иначе обрабатывать. Надо после каждого пробуждения усыплять опять. Каждую миллисекунду, раз вам так нужна millis(), что не очень оптимально. Изучайте таймеры и прерывания по даташиту атмеги328. Как разберетесь - поставите себе собственный таймер на большом делителе.
     
    Последнее редактирование: 22 май 2017
    m1shk4 нравится это.