Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
30.05.2010, 08:47
|
|
Прохожий
Регистрация: 09.06.2009
Сообщений: 9
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
|
Сохранение переменной в EEPROM при пропадани питания
Здравствуйте, разбираюсь с МК, IDE IAR, взял контроллер Attiny 2313 -
Подскажите пожалуйста, как сохранить переменную в EEPROM при
пропадании питания МК?
Заранее благодарен.
|
|
|
|
30.05.2010, 09:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
|
Re: Сохранение переменной в EEPROM при пропадани питания
Цитата:
|
// EEARH, EEARL - registri adressov danih v EEPROM
// EEDR - Register Dannih v EEPROM
// EECR - Register kontrolya sostoyaniya EEPROM
// EERIE - Register ожидания доступности EECR
// EEMWE - Register монопольного разрешения записи EECR
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
while(EECR & (1‹‹EERIE));
EEAR = uiAddress;
EEDR = ucData;
EECR |= (1‹‹EEMWE);
EECR |= (1‹‹EERIE);
}
unsigned char EEPROM_read(unsigned int uiAddress)
{
while(EECR & (1‹‹EEWE));
EEAR = uiAddress;
EECR |= (1‹‹EERE);
return EEDR;
}
|
дале вызываете...
Цитата:
|
//EEDATA1 = EEPROM_read(0x00); //read EEPROM-
EEPROM_write(0x00,123);
|
но не при пропадании, а на момент изменения переменной/
|
|
|
|
30.05.2010, 09:20
|
|
Прохожий
Регистрация: 09.06.2009
Сообщений: 9
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Сохранение переменной в EEPROM при пропадани питания
Дело в том, что у EEPROM ограниченное количество циклов, записи, стирания, а изменение переменной у меня происходит примерно раз в 0.5с.
Вот и хотелось что нибудь сделать, на случай если питание пропедет, что бы
данные не потерялись. Я думал как нибудь использовать BOD, вызвать прерывание, в нем произвести типа
// Reset Source checking
if (MCUSR & 1)
{
// Power-on Reset
MCUSR=0;
}
else if (MCUSR & 2)
{
// External Reset
MCUSR=0;
}
else if (MCUSR & 4)
{
// Brown-Out Reset
MCUSR=0;
}
else
{
// Watchdog Reset
MCUSR=0;
};
и при нужных условиях присвоить переменной EEPROM значение.
Просто не знаю как это прерывание реализовать...
|
|
|
|
30.05.2010, 09:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
|
Re: Сохранение переменной в EEPROM при пропадани питания
100 тыс. вам мало? ...уточните, насколько часто меняется переменная ваша ...могу посоветовать сделать нечто вроде сторожевого ключа, самое простое приконнектить любой порт на питание и контролировать "1", а сам микроконтроллер запитать через диод и емкость, микрофарад на 100-470 ...тогда при пропадании питания контроллер еще будет с питанием, а уровень на порту упадет до "0", вот его и контролируйте.
|
|
|
|
30.05.2010, 09:36
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Сохранение переменной в EEPROM при пропадани питания
Сообщение от sbcentr
|
Дело в том, что у EEPROM ограниченное количество циклов, записи, стирания, а изменение переменной у меня происходит примерно раз в 0.5с.
|
Выделите в EEPROM несколько байт и пишите значение переменной по кругу. (Только не забудьте добавить механизм поиска последнего значения при включении питания)
|
|
|
|
30.05.2010, 10:03
|
|
Прохожий
Регистрация: 09.06.2009
Сообщений: 9
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Сохранение переменной в EEPROM при пропадани питания
__no_init __eeprom unsigned long int E_sum;
.
.
.
#pragma vector = RESET_vect
__interrupt void rst(void)
{
if (MCUSR & 4)
{
// Brown-Out Reset
MCUSR=0;
E_sum=.....//переменная
asm("jmp 0x00");
}
}
соответственно задав fuse BOD на 2.7в
Так неправильно?
|
|
|
|
30.05.2010, 10:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Re: Сохранение переменной в EEPROM при пропадани питания
Поздно пить боржоми когда почки уже отвалились.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
30.05.2010, 10:15
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Сохранение переменной в EEPROM при пропадани питания
Сообщение от sbcentr
|
соответственно задав fuse BOD на 2.7в
Так неправильно?
|
Это не спасет от полного пропадания питания.
И куда мы попадем после этого джампа? (Да и вектор ресета скорее всего установится не на rst(), а на стартап)
|
|
|
Сказали "Спасибо" testerplus
|
|
|
30.05.2010, 11:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: Сохранение переменной в EEPROM при пропадани питания
от диодного моста - разделительный конденсатор, потом диод на конденсатор небольшой емкости, параллельно ему - резисторный делитель. Среднюю точку делителя - на вход компаратора. На второй вход компаратора - делитель с питания контроллера. По прерыванию от компаратора - запись в еепром и усыпляем.
Но если данные ответственные - лучше внешнюю батарейку, наверное.
|
|
|
|
30.05.2010, 12:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Сохранение переменной в EEPROM при пропадани питания
Сообщение от urry
|
от диодного моста - разделительный конденсатор.
|
Делаю почти аналогично. После моста маленький конденсатор с резистивным делителем для детектора пропадания, а от моста диод на большую ёмкость 4700 мкф и далее на стабилизатор МК. Для питания нагрузок отдельный конденсатор и стабилизатор.
При пропадании питания МК выключает все нагрузки, и если стабилизатор типа ШИМ (МС34063 например) то хватит на 1-2 сек питания МК для записи в ЕЕПРОМ. 8 милисек одна ячейка, за 0,8 сек 100 ячеек моно записать. )))))
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:50.
|
|