реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Помогите понять как ПРАВИЛЬНО работать с EEPROMОтрабатывает только половина процедуры, Отрабатывает только пол процедуры
Serega Doc
сообщение Nov 22 2005, 11:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



C помощью супервизора отлавливаю пропадание напряжения питания и формирую внешнее прерывание на INT 0
Контроллер запитан батарейкой. На батарейке не напряжение не ток не скачут в момент выключения питания.
Но процедура сохранения данных во внутреннюю EEPROM контроллера как то выполняется однобоко (только часть данных записывается в EEPROM)
Подскажите где искать ошибки?
Go to the top of the page
 
+Quote Post
starter48
сообщение Nov 22 2005, 11:48
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(Serega Doc @ Nov 22 2005, 17:43) *
C помощью супервизора отлавливаю пропадание напряжения питания и формирую внешнее прерывание на INT 0
Контроллер запитан батарейкой. На батарейке не напряжение не ток не скачут в момент выключения питания.
Но процедура сохранения данных во внутреннюю EEPROM контроллера как то выполняется однобоко (только часть данных записывается в EEPROM)
Подскажите где искать ошибки?

Желательно видеть схему и исходник. А то так просто трудно догадаться в чём проблема.
Если просто сигнал подать на int0, без выключения питания, то нормально отрабатывает?
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Nov 22 2005, 11:58
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



Да норматьно.
У меня эта процедура вызывается и при не пропавшем питании и тогда все данные сохранны.
Паралельно питанию контроллер а включена батарейка и ионистор.
Go to the top of the page
 
+Quote Post
starter48
сообщение Nov 22 2005, 12:07
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(Serega Doc @ Nov 22 2005, 17:58) *
Да норматьно.
У меня эта процедура вызывается и при не пропавшем питании и тогда все данные сохранны.
Паралельно питанию контроллер а включена батарейка и ионистор.

Возможно на reset или по питанию проходит помеха при выключении.
А не может так быть, что запись на самом деле проходит нормально, то потом, в результате сбоя, EERPOM портится? Попробуй не писать данные в нулевую ячейку EEPROM, и сразу после записи EEAR обнулять, чтобы портилась неиспользуемая ячейка 0.
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Nov 22 2005, 12:12
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



В нулевую вообще не пишу а только читаю из нее.
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Nov 22 2005, 12:49
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



Процедуры записи и чтения EEPROM

void EPROM_W(int ADDR, char DATA)
{
unsigned char savedSREG;
while (EECR & (1<<EEWE) ) ; // wait bit EEWE
EEAR = ADDR; // set address
EEDR = DATA; // set data
savedSREG = SREG; // keep setting so it can be restored
EECR |= BIT(EEMWE); // set "write enable" bit
EECR |= BIT(EEWE); // set "write" bit
SREG = savedSREG; // restore SREG
}

char EPROM_R(int ADDR)
{
while (EECR & (1<<EEWE));
CLI(); // disable interrupts
EEAR = ADDR; // set address
EECR |= BIT(EERE); // set "read enable" bit
SEI(); //re-enable interrupts
return (EEDR);
}
Go to the top of the page
 
+Quote Post
Георгий
сообщение Nov 22 2005, 13:15
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Скорей всего сброс развязан от батарейки и при пропадании питания он все таки формируется. без схемы трудно подсказать.
При записи тоже желательно запретить прерывание.

Сообщение отредактировал Георгий - Nov 22 2005, 13:16


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
starter48
сообщение Nov 22 2005, 14:26
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(Serega Doc @ Nov 22 2005, 18:49) *
Процедуры записи и чтения EEPROM

void EPROM_W(int ADDR, char DATA)
{
unsigned char savedSREG;
while (EECR & (1<<EEWE) ) ; // wait bit EEWE
EEAR = ADDR; // set address
EEDR = DATA; // set data
savedSREG = SREG; // keep setting so it can be restored

CLI(); // disable interrupts
Цитата(Serega Doc @ Nov 22 2005, 18:49) *
EECR |= BIT(EEMWE); // set "write enable" bit
EECR |= BIT(EEWE); // set "write" bit

while(EECR&(1<<EEWE));//wait for EEWE -> 0
EEAR=0;//to prevent EEPROM corruption
Цитата(Serega Doc @ Nov 22 2005, 18:49) *
SREG = savedSREG; // restore SREG
}

char EPROM_R(int ADDR)
{
while (EECR & (1<<EEWE));
CLI(); // disable interrupts
EEAR = ADDR; // set address
EECR |= BIT(EERE); // set "read enable" bit

EEAR=0;//to prevent EEPROM corruption
Цитата(Serega Doc @ Nov 22 2005, 18:49) *
SEI(); //re-enable interrupts
return (EEDR);
}

Я подправил, как считаю нужным. Т.е. суть в том, чтобы не использовать нулевую ячейку вообще. В ней будет мусор, вызванный сбоем проца при нарушении питания.
Может у тебя происходит повторный вход в обработчик прерывания?

Вот тема, где обсуждалась работа с EEPROM:
http://forum.electronix.ru/index.php?showtopic=7607
Go to the top of the page
 
+Quote Post
JeDay
сообщение Nov 22 2005, 20:41
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 276
Регистрация: 22-09-05
Из: Kiev
Пользователь №: 8 818



Сбой наверно потому что напряжение падает слишком быстро. Попробуй ионистор еще один поставить, а запись, как скали выше, без прерываний делай.
При быстром падении напряжения возможно бит EEWE вылетает раньше времени.
Go to the top of the page
 
+Quote Post
dimka2001
сообщение Nov 26 2005, 07:45
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 6-11-05
Пользователь №: 10 508



тут надо на схемку позырить, наверное контроллер сбрасывается?!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016