Как сохранить значение после отключения питания мк?
- Войдите на сайт для отправки комментариев
Пт, 21/12/2018 - 21:36
Доброго времени суток.
Есть программка, она будет работать на роботе и питаться от usb. Во время ее работы будут меняться значения переменных. В какой-то момент робота выключают. Есть ли какие-то варианты как запомнить последнее измененное значение переменной? (чтобы когда робота опять включат он продолжил работать там где остановился).
Писать в файл не подходит, потому что программа не на компе. Может где-то в ардуино можно хранить?
Энергонезависимая память EEPROM.
Только после отключения питания не получится. Так что продумайте этот момент.
Как сохранить значение после отключения питания мк?
После отключения уже поздно пить боржом. Никак!
А вот непосредственно перед отключением, когда кнопку отключения уже нажали, но оно еще не обесточилось, тут есть варианты. Про EPPROM Вамужесказали. Если будете использовать с умом, то получится, если без ума, то сами себе злобный буратино.
Есть и другие варианты, но они скорее экзотические.
И да, чем файл-то плох? Присобачьте к ардуине sd-карту и пшите туда хоть всю память.
После отключения уже поздно пить боржом. Никак!
Ну да)))
И да, чем файл-то плох? Присобачьте к ардуине sd-карту и пшите туда хоть всю память.
Нужно хранить всего одно значение, тогда проще независимую память.
Я правильно понимаю, если я в программе запишу допустим EEPROM.write(0,value), залью в ардуино, а потом запишу новый скетч и залью, то в этом новом скетче можно будет вытащить старое значение по адресу 0 от предыдущей программы? (Мне это нужно, чтобы при самом первом запуске нужной программы на роботе значение value в EEPROM было уже не от балды)
EEPROM ограничивает количество перезаписи(100 тыс.), а читать же сколько угодно можно?
Неправильно, если в fuse-бите EESAVE не ноль (unprogrammed) то при всех прочих при заливке нового скетча EEPROM сотрётся (можно подкрутить ключи запуска AVRDUDE, но там ещё искать надо - где и что менять).
Читать - да, можно сколько влезет.
Сразу лезть к avrdude в консоль (или при незнании консоли - в gui-обертку avrdude которая называется SinaProg) не советую. В крайнем случае, можно
тренироваться на кошкахвсе операции выполнять в консоли, дописав туда ключ -n (do not write anything, отключить любую запись в микруху полностью)Вообще с программой непонятка. Вы её так часто перепрошиваете? По хорошему так, ограничения EEPROM тут меркнут, ибо ресурс флеша не 100000 циклов а все 10000. В остальных случаях - правила записи в EEPROM таковы:
1. Повод для записи - исключительный случай. То есть нажали кнопку, сохранили настройку и т. п. Не писать в EEPROM в цикле. Не писать в EEPROM без специального отведённого под это условия программы.
2. Перед записью - прочитать, если там то же самое что собирались записать - не писать.
Сохранение настройки при исчезновениии питания делается датчиком наличия питания: на ввод питания - диод последовательно + провод по которому отслеживается наличие питания (ADC или компаратор, чтобы отследить просадку ниже 4 В). После диода - большой конденсатор, и арда питается уже от конденсатора. В условии экстренного сохранения - блокировка, то есть флаг, который запрещает любые действия с EEPROM (и условия по штатной работе с EEPROM должны содержать этот флаг, чтобы информация не повредилась при исчезновении питания).
Когда питание отрубится, напряг на конденсаторе начинает падать. ИОН (стабилитрон либо TL431) задаёт образцовое напряжение компаратора или ADC (провод AREF). Как только конденсатор становится меньше образцового (допустим 4.000 В), считаем что надо экстренно сохранить, делаем следующие действия:
1. Прочитать то, куда будем писать.
2. Если совпадает не пишем.
3. Иначе пишем.
4. Включаем флаг запрета работы с EEPROM.
5. Если где-то в программе кто-то ещё пытался работать с EEPROM, этот флаг исключает последующую запись, чтобы на низком напр. питания запись не закосячилась.
После этого ничего не делаем или продолжаем работать. Потом конденсатор кончится и всё погаснет. Потом когда питание включат, кондёр снова нальётся, АЦП/компар будет видеть что входное напряжение больше чем напр. срабатывания (4.000) и всё работает штатно. Пропадёт снова - снова кондёр начинает сдуваться, и АЦП/компаратор сработает.
4.000 это не четыре тысячи, это четыре целых ноль десятых ноль сотых ноль тысячных.
Диод лучше Шоттки, ёмкость конденсатора без светодиодов достаточно 1500 мкФ, со светодиодами - не менее 4700 мкФ, со штатной ардой формфактора Uno/Duemilanove которая не переделывалась (микросхема сериал моста, светики, автовыбор питания) - не менее 10000 мкФ.
Если есть желание почитать что такое fuse-байты, то https://www.instructables.com/id/How-to-change-fuse-bits-of-AVR-Atmega328p-8bit-mic/
Их калькулятор http://www.engbedded.com/fusecalc/
А мне больше нравится внешний EEPROM. Cтоит копейки, подключается лекго и имеют до 1 миллиона циклов перезаписи.
Вот такие, например - https://www.aliexpress.com/item/AT24C02-AT24C02B-AT24C02BPU27-24C02N-DIP-8-EEPROM-Memory-IC-10pcs-lot/32874605289.html
Если паять лень, можно докупить модуль вроде такого - https://www.aliexpress.com/item/GREATZT-New-AT24C256-24C256-I2C-interface-EEPROM-Memory-Module-for-arduino/32850958047.html
А мне больше нравится внешний EEPROM. Cтоит копейки, подключается лекго и имеют до 1 миллиона циклов перезаписи.
прошлый век :)
Давно есть еепромки с 10**14 (10 в 14 степени) циклами гарантированных записей, причем по цене вполне доступные - порядка 25р за корпус. Если писать каждую миллисекунду - хватит на 3 с лишним тысячи лет :)
https://ru.aliexpress.com/item/RIC-FM24
Ну F-RAM вещь хорошая. Стоит, правда, в 5 раз дороже EEPROM. А самое главное, что-то я не видел их в DIP-8. Пайка SOIC для подавляющего большинства начинающих - непосильная задача.
что-то я не видел их в DIP-8
Смотрите
1) https://ru.aliexpress.com/item/10-FM24C04A-P-FM24C04A-C-FM24C04-DIP-8/32...
2) https://www.ebay.com/itm/1PCS-FM1208S-200CC-CDIP24-IC-/322490333543
и еще 100500
Вот, хороший сборник даташитов разных чипов (FRAM, EDRAM), можно сравнивать и выбирать - http://www.bitsavers.org/components/ramtron/_dataBooks/1994_Ramtron_Specialty_Memory_Products.pdf
#1 может оказаться обычной еепромкой, именно в названии FM24xx есть путаница, чем продавец может воспользоваться. Фотографии товара не внушают доверия - на корпусах нет надписей.
заказать, что ли, и помучать? Интересно продавец примет претензию если блок накроется меньше чем за миллион стираний?
Обычная (внутренняя AVR) eeprom у людей портилась после 3 000 000 циклов, некоторые и того больше. Т.е. на порядок больше нежели по даташиту.