Работа с энергонезависимой памятью EEPROM
- Войдите на сайт для отправки комментариев
Вс, 31/12/2017 - 14:34
Здравствуйте, возник вопрос как используя енергонезависимую память запоминать параметры нажатия экрана
вопрос как запоминать параметр m чтоб при последующем включении отображался экран который был нажат до выключения питания
void loop() { if (m==0) { myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("0", CENTER, 20); } if (m==1) { myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.print("1", CENTER, 20); } }
Скорее всего так:
-Подключаете библиотеку EEPROM
-переменную m объявляете глобально
-в лупе обеспечиваете запись m регулярно, например при каждом ее изменении, в еепром по адресу, который сами определите.
-Если m объялена как многобайтовая переменная, то и записываете по-байтно
-в setup() прописываете считывание этой переменной м, так же по-байтно, что будет происходить при каждом включении/перегрузке
-наслаждаетесь прекрасно работающим кодом.
Открываешь Arduino IDE, идёшь в пункт меню "Файл->Примеры->EEPROM" - и наслаждаешься примерами работы с EEPROM, по мере изучения дописываешь свой код так, чтобы всё, что тебе нужно - сохранялось/вычитывалось в/из EEPROM, profit.
Вот проще пример пока со светодиодами придумал что бы реализовать запоминание горения светодиода . Но сейчас уехал и нет возможности проверить, если что не так в коде то подправте подскажите, а то еще логику в примерах не могу понять как оно работает
Не пишите EEPROM при каждом проходе loop! У EEPROM ограниченое кол-во циклов записи, убете за день.
Write должен в setap быть ?
Ну а setup-то тут причём? Используйте EEPROM.update()
почему пишет при компиляции 'class EEPROMClass' has no member named 'update'
другую библиотеку нужно подключать?
а то в примерах не сомсем ясно как применить к моей задаче
почему пишет при компиляции 'class EEPROMClass' has no member named 'update'
а контроллер у вас какой?
И версия ИДЕ...
На старых версиях ИДЕ в ЕПРОМе не было функции update(). Потом для некоторых контроллеров ее написали, а для некоторых так и нет.
контролер Arduino Pro-mini
версия 1.6.2
Moжете свой аналог этой функции написать: считали ячейку EEPROM, посмотрели - если там уже лежит то значение, которое вы собираетесь писать, то ничего не делаете. В том случае, если оно иное - пишете новое.
так если скачать новую библиотеку то заработает?
Есть два варианта...
так если скачать новую библиотеку то заработает?
пока не могу разобратся и скачевать новое тоже не хочу )
пока не могу разобратся и скачевать новое тоже не хочу )
ну например Вам надо сохранить изменившуюся переменную aaa
Пишите:
Я где то пропустил? У меня на старых версиях было только read, write, а там где put, get уже и update появилось.
ага, я тоже так думал. А оно вон как! :)
Я где то пропустил? У меня на старых версиях было только read, write, а там где put, get уже и update появилось.
да - всё стало более лучше.
Вот по такой схеме подключал все работает и записивается но начала как по мне глючить память, как болие грамотно записать, вроде ж использование update как я понял производит перезапесь ячейки тодько при изменении значения?
И симптомы такие что сбрасивается R==0 и не записывает новое значение хотя R было другое
Честно говоря, есть опыт только использования внешней EEPROM, но вдруг окажется полезным.
EEPROM требуется некоторое время, чтобы "привести себя в порядок". Для внешней - 5 мс, что в тысячи раз больше времени прохождения пустого loop(). Не следует обращаться к ней так часто.
Код выше - он по логике неверен.
И, кстати, такими экспериментами Вы могли уже успеть убить EEPROM.
И, кстати, такими экспериментами Вы могли уже успеть убить EEPROM.
так для этого я и мучаю свой девайс чтобы определить что значит мертвая память и как ведет себя устройство
все никак не могу разобратся как грамотно запоминать чтобы ресурса хватило по моим подсчетам на лет 10
при том что в устройстве будут менятся значения после включения в лучшем случаи пару раз на месяц
Вот только пару раз в месяц и нужно писать в EEPROM. Тогда вопрос "А что будет по исчерпании ресурса?" отпадет сам собой.
А "мертвая память" в данном случае означает, что считываешь из нее не то, что записал. (точнее "не всегда то")
типа так надо?
Типа надо или ловить момент отключения питания и, вися, на конденсаторе, писать в EEPROM быстренько. Или писать через N сек после того, как параметр прекратил меняться (например - не писать, пока пользователь не оставит в покое энкодер на пять сек). Или поставить FRAM и успокоиться.
типа так надо?
Как раз так - не надо.
Вы читаете EEPROM сразу после команды записи, что при этом вернет .read(), неизвестно, а если вернет что-нибудь не то, условие окажется верным, выполнится запись - и дальше по кругу.
Зачем Вам читать из EEPROM, если то, что там записано, должно храниться в ячейке оперативной памяти. Читать из EEPROM в loop() не нужно. Совсем.
Ну а что нужно - согласен с sadman41.
}
типа так надо?
Как раз так - не надо.
Вы читаете EEPROM сразу после команды записи, что при этом вернет .read(), неизвестно, а если вернет что-нибудь не то, условие окажется верным, выполнится запись - и дальше по кругу.
Зачем Вам читать из EEPROM, если то, что там записано, должно храниться в ячейке оперативной памяти. Читать из EEPROM в loop() не нужно. Совсем.
Ну а что нужно - согласен с sadman41.
[/quote]
уже понял что так не надо ;)
Вот вроде работает, условия таковы сделал что при нажатии и удержании 1с запоминает режим R и на экране засвечивается * что сигнализирует о запоминании режима. Подправте если что то неправильно