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

 
 
> Проблема с EEPROM, AT90->mega8535
aal
сообщение Sep 5 2005, 02:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 20-10-04
Из: Новосибирская обл, п.Краснообск.
Пользователь №: 916



Была прога написанная имено под AT90S8535. Сейчас потребовалось сделать несколько таких девайсов. Естественно закуплена была mega8535. При установке бита совместимости всё работает, но запись в EEPROM не происходит (проверенно). С AT90S8535 всё впорядке - работает.
Вот код записи чтения байта в/из EEPROM. В чём прикол понять немогу.
IAR.
Код
void EEPUT(unsigned int ADR,unsigned char data)
{ unsigned int err=0;
 while (--err && (EECR & (1<<EEWE)));
 if (err && good1)
 {
   CLI;
   EEAR = (ADR & 0x01ff);
   EEDR = data;
   EECR = (1<<EEMWE);
   EECR = (1<<EEWE);
   EEAR = 0;
   SEI;
 }
}

unsigned char EEGET(unsigned int ADR)
{ unsigned int err=0;
 unsigned char t;
 while (--err && (EECR & (1<<EEWE)));
 if (err)
 { EEAR = (ADR & 0x01ff);
   EECR = (1<<EERE);
 }
 EEAR = 0;
 t = EEDR;
 return (t);
}


Частота 5 МГц. Т.е. задержка ожидания готовности до 0,15с - в 20 раз перекрывает время записи.
Да и по ерате вроде проблем небыло. Не может же 5 мег дохлых быть изодной партии и подряд.
Хотя сейчас именно мысль появилась - если запись привязана к внутреннему рц генератору, то может он накрылся?


--------------------
_____________________________________
Пароли неприемлемы, легко взламываются терморектальным криптоанализатором.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 14)
BVU
сообщение Sep 5 2005, 04:53
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Посмотрите это, может поможет:

http://forum.electronix.ru/index.php?showtopic=6785
http://forum.electronix.ru/index.php?showtopic=6843


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
aal
сообщение Sep 5 2005, 05:54
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 20-10-04
Из: Новосибирская обл, п.Краснообск.
Пользователь №: 916



Это я всё уже читал. Здесь какая-то заковырка с миграцией....


--------------------
_____________________________________
Пароли неприемлемы, легко взламываются терморектальным криптоанализатором.
Go to the top of the page
 
+Quote Post
Karl
сообщение Sep 5 2005, 06:35
Сообщение #4


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Было что-то подобное. Связано с медленным чтением/записью в еепром. При записи советую проверять битик eewe.
wr_eeprom:
push ZL
push ZH
push c
push temp
in temp,sreg
push temp
cli
out eearl,zl
out eearh,zh
out eedr,c ;данные
wait_end_wr:
sbic eecr,eewe ;ожидание освобождения eeprom
jmp wait_end_wr
sbi eecr,eemwe
sbi eecr,eewe
wait_end_wr1:
sbic eecr,eewe ;ожидание окончания записи
jmp wait_end_wr1

pop temp
out sreg,temp
pop temp
pop c
pop ZH
pop ZL
ret

Еще при переходе на мегу в одном из проектов помог "разгон" RC - генератора.
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 5 2005, 06:40
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(aal @ Sep 5 2005, 09:54)
Это я всё уже читал. Здесь какая-то заковырка с миграцией....
*


http://forum.electronix.ru/index.php?showtopic=6785

Данным примером Вым предлагают работать с EEPROM, как с обыкновенной статической памятью. А Вы пишите свои функции записи в EEPROM. Лучше за Вас это сделает компилятор (более правильно для данного вида контроллера).
Зачем такая головная боль - непонятно...!?


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 5 2005, 06:56
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Может быть проблема с верменем записи (вотчдог срабатывает или другие таймауты)
Дело в том что если раньше у вас был 8535 на 8 МГЦ - он писал еепром в 8 раз быстрее чем сейчас пишет mega потому что у меги еепром пишется от внутреннего генератора на 1 мгц, у меня как раз были проблемы именно с этим
Go to the top of the page
 
+Quote Post
aal
сообщение Sep 5 2005, 07:50
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 20-10-04
Из: Новосибирская обл, п.Краснообск.
Пользователь №: 916



Цитата
Связано с медленным чтением/записью в еепром.

Код
unsigned int err=0;
while (--err && (EECR & (1<<EEWE)));//время ожидания до 0,15с.
Цитата
Дело в том что если раньше у вас был 8535 на 8 МГЦ - он писал еепром в 8 раз быстрее чем сейчас пишет mega потому что у меги еепром пишется от внутреннего генератора на 1 мгц,
У меня 5 МГц кварц и на 90 и меге. Ждём до 0,15 с готовности eeprom.


--------------------
_____________________________________
Пароли неприемлемы, легко взламываются терморектальным криптоанализатором.
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 6 2005, 07:09
Сообщение #8


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(aal @ Sep 5 2005, 10:50)
У меня 5 МГц кварц и на 90 и меге. Ждём до 0,15 с готовности eeprom.

Не важно какой кварц на меге, еепром у меги работает от всторенного генератора 1 мгц 8448 тактов т.е примерно 8.4 ms


И ззачем вы перед чтением данных из EEDR устанавливаете EEAR в 0
скорее всего бага здесь!
Go to the top of the page
 
+Quote Post
aal
сообщение Sep 6 2005, 07:51
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 20-10-04
Из: Новосибирская обл, п.Краснообск.
Пользователь №: 916



Цитата
И ззачем вы перед чтением данных из EEDR устанавливаете EEAR в 0

По рекомендациям и в EEPUT и в EEGET, после работы, адрес в 0 сбрасываю, чтоб при "случайной записи" слетела именно 0 ячейка. Чтение работало.

В принципе уже разобрался. У меня есть цепочка на оптроне формирователь импульсов от сети 50 Гц. Для контроля наличия. Так на платах перевернули диод, импульсов нет, и прога считает, что сеть пропала, запрещает запись. Переменная GOOD1.

Выматерился, но это ещё неконец. При старте всеравно где-то виснет....В процессе записи.


--------------------
_____________________________________
Пароли неприемлемы, легко взламываются терморектальным криптоанализатором.
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 6 2005, 09:09
Сообщение #10


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



А может логичнее адрес выставлять в 0 после чтения?
Go to the top of the page
 
+Quote Post
aal
сообщение Sep 6 2005, 09:42
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 20-10-04
Из: Новосибирская обл, п.Краснообск.
Пользователь №: 916



Без разницы - читает нормально. Ведь результат операции в регистре.


--------------------
_____________________________________
Пароли неприемлемы, легко взламываются терморектальным криптоанализатором.
Go to the top of the page
 
+Quote Post
Karl
сообщение Sep 6 2005, 10:23
Сообщение #12


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(KRS @ Sep 5 2005, 11:56)
Может быть проблема с верменем записи (вотчдог срабатывает или другие таймауты)
Дело в том что если раньше у вас был 8535 на 8 МГЦ - он писал еепром в 8 раз быстрее чем сейчас пишет mega потому что у меги еепром пишется от внутреннего генератора на 1 мгц, у меня как раз были проблемы именно с этим
*


как раз то же самое было и у нас.
Go to the top of the page
 
+Quote Post
vzyk
сообщение Sep 6 2005, 20:46
Сообщение #13


Участник
*

Группа: Validating
Сообщений: 18
Регистрация: 3-09-05
Пользователь №: 8 208



Цитата(aal @ Sep 5 2005, 05:57)
   CLI;
   EEAR = (ADR & 0x01ff);
   EEDR = data;
   EECR = (1<<EEMWE);
   EECR = (1<<EEWE);
   EEAR = 0;
   SEI;


Hello,
Very strange line is EEAR=0.. Remove it! You are resetting (or at least accessing) address register at the moment, when you are trying to write to EEPROM;

If it will not help, - try to remove your waiting circle, and after writting data, add some delay after write strobe (~10mS, according to data sheet). And will work.

P.S. Sorry for English...
Go to the top of the page
 
+Quote Post
Jocker
сообщение Sep 15 2005, 05:58
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 9-09-05
Пользователь №: 8 402



Даю свою процедуру, если тебе еще нужно.
У меня работает на 100 проц. в реальном девайсе

;.def Tmp0 = R16
;.def Tmp1 = R17

; addr in ZL, ZH
; byte is in Tmp0
WriteEEPROMByte:
push Tmp1
in Tmp1, SREG
push Tmp1
WAIT_EEWR
cli
out EEARL, ZL
out EEARH, ZH

out EEDR, Tmp0
sbi EECR, EEMWE
sbi EECR, EEWE

pop Tmp1
out SREG, Tmp1
pop Tmp1
ret
Go to the top of the page
 
+Quote Post
aal
сообщение Sep 15 2005, 07:54
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 20-10-04
Из: Новосибирская обл, п.Краснообск.
Пользователь №: 916



Спасибо всем!

Я уже нашёл причину. В инициализации есть функция стирания еепром, если все данные "битые". Вот она и привышала по времени период ватчдога. Мои грабли. В АТ90 успевало стерется, а в меге нет...

Т.е. было 2 ошибки:
1. Неработал узел детекции сетевого напряжения. И запрещал запись.
2. Привышение времени ватчдога, при стирании еепром.

Переборщил с защитой и в 1 и 2 случае. А симптомы указывали на отсутствие записи в еепром.


--------------------
_____________________________________
Пароли неприемлемы, легко взламываются терморектальным криптоанализатором.
Go to the top of the page
 
+Quote Post

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

 


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


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