Сохранение переменных при отключении питания.
- Войдите на сайт для отправки комментариев
Пт, 02/07/2021 - 07:56
Не прошу обьяснять (но если наведете буду благодарен ) просьба просто сказать возможно ли это.
Суть такова: я в цикле LOOP меняю значение некоторых переменных и хочу чтобы в следующий раз когда я включу ардуино данные переменные сохранили свои измененные значения.
(не очень хочется долбатся с их записью на sd-карту(eeprom - использовать не хочу) )
Но если это невозможно значит буду sd-карту подключать(
видима, по религиозным соображениям? тогда тебе ничего не поможет, сохранение в eeprom штатная возможность МК. А SD как раз - навороты, да и не запустишь ты ее на 328й.
Не прошу обьяснять (но если наведете буду благодарен ) просьба просто сказать возможно ли это.
Суть такова: я в цикле LOOP меняю значение некоторых переменных и хочу чтобы в следующий раз когда я включу ардуино данные переменные сохранили свои измененные значения.
возможно. Через ЕЕПРОМ.
Почему не хотите использовать? мама запретила?
Если речь про какие-то уставки, то я храню их только в eeprom, а по необходимости читаю оттуда. При вводе новых значений перезаписываю в eeprom.
тока, они хоть и говорят, что победили ошибку, но, на всякий случай, по адресу 0x0000 ничего не храни. Начинай с адреса 0x0010
тока, они хоть и говорят, что победили ошибку, но, на всякий случай, по адресу 0x0000 ничего не храни. Начинай с адреса 0x0010
а я что-то не нарывался на ошибки, храню с нулевого адреса
я тоже не нарывался последнее время, но DiHALT так сказал, надо его слушаца. Я слушаюсь
А микрочип пишет, что это древние предания всё - про адрес 0x00 и сейчас уже нечего ссать.
eeprom - использовать не хочу
Не хочете EEPROM - возьмите EERAM. FRAM, NVRAM.
А микрочип пишет, что это древние предания всё - про адрес 0x00 и сейчас уже нечего ссать.
«Ален Делон на пьёт одеколон».
Микрочип не покупает клоны своих микросхем на алиэкспрессе, где никогда не знаешь с какой именно версии они передирали чип.
С точки зрения логики довод звучит убедительно. Думаете, что склады Алиэкспресса до сих пор забиты чипами старых ревизий?
За 4года работы с ардуино, ни разу не сталкивался с ошибкой в адресах eeprom 0х00 и 0х01
Думаете, что склады Алиэкспресса до сих пор забиты чипами старых ревизий?
Нет, не думаю. Я вообще об этом не дума, просто не пользуюсь младшими адресами. Не "принципиально на пользуюсь", а совершенно беспринципно.
На питание ардуины ставишь конденсатор с диодом. Не используемый пин подключаешь до диода. В цикле мониторишь пин изменил свое состояние то сохраняешь все в EEPROM. При старте ардуины выгружаешь из EEPROM в RAM
На питание ардуины ставишь конденсатор с диодом. Не используемый пин подключаешь до диода. В цикле мониторишь пин изменил свое состояние то сохраняешь все в EEPROM. При старте ардуины выгружаешь из EEPROM в RAM
Или не усложняешь себе жизнь бесполезной чушью, а просто работаешь с eeprom.
У eeprom ресурс 100тысяч записи. Если делать устройство которое редко будет отключатся к примеру раз в день то можно и напрямую работать, но если в час по 20 раз то стоит задуматься
Ну так задумайся. Посчитай на бумажке.
Посчитаю за него.
Пишем в память по кругу.
Скажем 20байт полезных и 4служебных(поиск нужной ячейки).
Итого :
1024/20=51 запись влезет в 328ю
Делаем 20записей в час.
100000/20=5000ч хватит без смены ячеек
(5000*51)/2=127500часов (на 2 делим потому, что служебные ячейки будем при каждой записи затирать)
127500/24=5312 дней или 14,5лет.
Вам зачем больше ?
Если действительно нужно, ставьте внешнюю еепром у нее и ресурс больше и объем
Используя для расчета предположения с потолка и результат получим отфонарный. Откуда 20 записей в час? Почему не в минуту, секунду, миллисекунду?
Воще лучший вариант - с конденсатором и диодом. Только пин на прерывание завести. Лучший тем, что позволяет производить действия при выключении, а не загружать МК левой, довольно глупой и не быстрой работой. При том делать не только сохранение переменной, если требуется.
При запуске и чтении сохраненной в флеше переменной всегда возникает каверзный вопрос - а корректное ли там значение? Ну например при запуске свежезалитой прошивки значение получим не инициализированное. Это может вызвать сбой. Как вариант - использовать CRC для контроля корректности сохраненных в флеше данных. Но каждый раз, после записи переменной возится с CRC тяжеловато (например для переменной - счетчика инкрементируемого десятки раз в сек.), а вот раз при выключении питания - самое оно.
"просто работаешь с eeprom." - путь к глюкавости. Ну хорошо если переменная - байт и ни как не завязана по логике с другими сохраняемыми переменными. А если переменная - 2 байта? Появляется вероятность отключения МК в момент, когда только один байт перезаписан а второй еще нет. И после запуска получим воще чорте-шо. Вероятность конечно не большая (от этого на самом деле только хуже, иди лови глюк возникающий раз в год...) но вероятность эта быстро растет с повышением частоты перезаписи и длинны записываемого.
Для снижения износа флешки тоже есть фокус - перед записью проверить, а менялось ли значение. Иногда помогает радикально. Иногда - нет.
Получается что выбирать тот или иной вариант надо с учетом смысла переменной - размера, как часто меняется, вероятности отключения питания при сохранении (например при ручном редактировании настроек вряд ли кто выдернет питание), цены сбоя при некорректном сохранении и т.д.
Есть ещё прикольная штука - EERAM. Никак не могу найти на "потыкать".
Редко изменяемые сохраняю сразу, быстро (потенциометры, энкодеры) - по паузе (таймауту). В случае выключения во время регулировки - ну извини, будут предыдущие значения. При восстановлении храню диапазон и дефолт. Не попадаем в диапазон - устанавливаю дефолт.
Опять таки, всё зависит от важности - а то и CRC с дублированием.