Очищается ли SRAM при переводе Arduino в режим sleep_mode_pwr_down?
Вопрос
В целях снижения энергопотребления я перевожу Arduino в спящий режим между снятием показаний датчиков. Однако данные показаний сохраняются в массивах и не должны стираться при переходе устройства в спящий режим.
Для ясности я использую sleep_mode_pwr_down и запускаю прерывание с помощью сторожевого таймера на чипе ATMega328. См. этот пост для описания различных режимов сна: Каковы (или как использовать) опции энергосбережения Arduino для продления срока службы батареи?
Можно было бы решить эту проблему, записав данные в EEPROM, однако я не уверен, нужно ли это. Вопрос в том, стирает ли перевод устройства в sleep_mode_pwr_down динамическую память?
Характеристики/Контекст:
Arduino Uno (чип ATMega328)
@Triz, 👍1
Обсуждение1 ответ
Лучший ответ:
Обычно спящие режимы Atmega не стирают ОЗУ. Их память статична и пока подается напряжение (выше 2,7 В), данные сохраняются.
Однако это также зависит от того, как вы планируете выводить устройство из спящего режима. Если получен RESET, ОЗУ очищается и выполнение программы начинается с начала.
Если включенное прерывание происходит, когда MCU находится в спящем режиме, MCU просыпается. Затем MCU останавливается на четыре цикла в дополнение к времени запуска, выполняет процедуру прерывания и возобновляет выполнение с инструкции, следующей за SLEEP. Содержимое файла регистров и SRAM не изменяется, когда устройство просыпается из спящего режима.
Ознакомьтесь с режимами сна AVR, чтобы узнать, какой из них лучше всего подходит для вашего приложения, и как безопасно его разбудить
Обратите внимание, что при сбросе RAM стирается программным обеспечением (кодом запуска libc), а не аппаратным обеспечением. Вы можете поместить данные в раздел «.noinit», если хотите сохранить их при сбросе., @Edgar Bonet
- Как перевести RFID-модуль MFRC522 в спящий режим?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Как перевести ATtiny/ATmega в режим глубокого сна (чтобы годами работать от батарей), но при этом обнаруживать нажатие кнопки?
- Есть ли способ подключить оперативную память компьютера к Arduino?
- Как запитать Arduino и 1 цветную светодиодную ленту от одного источника питания
- Как остановить uno от запуска программы при включении питания?
- Пользовательская функция сна для Nextion
- Питание Arduino напряжением более 5 В
Если нет, вы можете использовать внешний чип SRAM - который в любом случае обеспечит больше оперативной памяти, чем ATmega328. Вы можете найти их с помощью быстрого поиска в Google: например, SRAM 1Mbit. Ток в режиме ожидания значительно ниже 10 мкА., @MichaelT
Спасибо @MichaelT, судя по некоторым прототипам, которые я только что сделал, SRAM действительно не стирается (на основе динамической памяти в системе). Я планирую проверить это дальше, так как это кажется несколько неожиданным, но обновлю этот пост, если появятся какие-либо важные новости., @Triz