Здравствуйте. Не нашёл нужной темы на форуме. Проблема такая: нужно ввести мою ардуину в сон так, чтобы сон не останавливал работу таймера платы. Т.е. чтобы во время сна таймер продолжал отсчитывать время работы ардуины. Нашёл такую библиотеку 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 кнопки; менять некоторые внутренние переменные по истечению определённого времени. Буду благодарен за любую помощь.
Смутило. Именно поэтому пробовал поочереди эти таймеры включать и выключать. Именно timer0 и является нужным мне, но включив его ардуино уже не уходит в сон
Сон может прерываться прерываниями. Это нормально и на потребление энергии практически не влияет. Перед уходом в сон. Можно запретить прерывания. Но тогда кнопка тоже не будет работать.
Не очень понимаю, о чем идёт речь. Только начинающий в этом деле, поэтому, к сожалению, желательно объяснять, как пятилетнему ребенку :Р
В МК можно отключит отдельные модули, такие как таймеры например. Тогда их работа прекратится и энергия на них не будет расходоваться. Остальные модули МК будут работать как ни в чём не бывало. Можно отправить процессор в сон. Он как бы зависнет на команде sleep. Но как только вы нажмете кнопку с обработкой прерывания, или таймер дернет прерывание, команда sleep завершится. Процессор начнет выполнять следующие за ней команды. После выполнения этих команд процессор нужно снова отправить в sleep. У вас какие симптомы, что Ардуина не спит? Питание от USB?
если не нужна функция millis(), аппаратно запретите таймер 0 (прерывание от него). Для своих целей используйте таймер 1 или 2, не забывая после отработки своей логики вызывать sleep().
От выполнения кода ардуино должна входить в сон на 8 секунд, но при включении timer0 она не спит. Питание от юсб.
По таймеру0 и просыпается постоянно. Потому что как его иначе обрабатывать. Надо после каждого пробуждения усыплять опять. Каждую миллисекунду, раз вам так нужна millis(), что не очень оптимально. Изучайте таймеры и прерывания по даташиту атмеги328. Как разберетесь - поставите себе собственный таймер на большом делителе.