Сохранение данных о настройке в eeprom

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
abc
Друг Кота
Аватара пользователя
Сообщения: 3687
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

Я делаю так.
Произошло нажатие какой-либо кнопки. Запускаю таймер на 3-5сек, по окончанию этого времени все изменившиеся значения фиксирую в EEPROM (ну и, ессно, останавливаю сам таймер). Если ДО окончания отсчета снова произошли нажатия на кнопки, то таймер перезапускаю. Т.о. получается, что пока, напр., удерживаешь кнопку увеличения температуры, меняются только переменные в программе, не затрагивая содержимое EEPROM. Как только все "настройки" закончены и в течении 3-5сек ничего больше не нажимается, данные сохраняются в долговременной памяти.
Пользуюсь этим алгоритмом лет 8, пока что ни в одном девайсе EPROM не накрылся :)
Реклама
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Правильно. Я тоже использую похожий алгоритм, весьма удобно и надежно. Опередили - хотел предложить :)
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Главное что бы в эти 3-5 сек питание не пропало и данные не пропали с ним.

Можно сделать отдельную кнопку или пунк меню - "сохранить настройки" - тогда "бэкап питания" надо делать только на удвоеное (для вящей надежности!) максимальное время записи.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Меня заинтересовал метод abc. У меня тоже вариант с кнопками. Например можно сделать так:

Код: Выделить всё

if (PINC.1==0)
{
i=(b++);
delay_ms(5);
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
a=d; //запись в eeprom
}
}

if (PINC.2==0)
{
i=(b--);
delay_ms(5);
{
// Place your code here
//запись в eeprom
}
}
}
?????????
Я не Сашок!!!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Пока что ограничелся таким методом: нажимаеш две кнопки (+ и -) одновременно, и происходит запись в eeprom, и одно за одним записать одинаковое значение нельзя. Хотел сделать по методу abc но так-как всё таймеры у tiny2313 заняты (1-динамическая индикация, 2-часы для таймера на 7часов ) нечего не получится. :(
Изображение
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Krik99 писал(а):так-как всё таймеры у tiny2313 заняты (1-динамическая индикация, 2-часы для таймера на 7часов ) нечего не получится. :(
Отдельный таймер не нужен. В том таймере где происходит счет периодами - например динам индикация ставишь счетчик периодов - он и считает большую паузу.

Таких счетчиков может быть МНОЖЕСТВО для отсчета разных периодов для множества событий.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 305
Зарегистрирован: Чт июн 07, 2007 12:05:08
Откуда: Санкт-Петербург, Россия

Сообщение Migray »

Krik99, метод, который описал abc, известен очень давно.
Это сейчас я таймеры не экономлю, а раньше приходилось :(

Маленький совет из старой практики.
Скажем частота обновления информации на экране 100 Гц.
Соответственно таймер настроен на 10 мСек.

Нам ничего не мешает в п/п таймера, кроме всего прочего, проверять флаг нажатия кнопки, и если было нажатие, инкрементировать еще одну переменную.

В п/п работы с кнопками будет выставляться флаг нажатия и обнуляться переменная/счетчик.

В основной программе, при переполнении переменной/счетчика мы вызываем п/п записи инфы в энергонезависимую память
В этой п/п еще и сбрасываем флаг нажатия.

Результат - при каждом нажатии мы начинаем отсчет выдержки.
При регенерации 100 Гц и байтовой переменной эта выдержка будет 2,5 секунды.
При каждом последующем нажатии мы продлеваем задержку, опять до 2,5 сек. от последнего нажатия.
Если 2,5 секунды истекли, то изменения записываем и останавливаем отсчет выдержки.
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»