Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.06.2011, 11:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Некорректно пишется/читается EPROM в AVR
Такая проблема - мк AT90S2313 две переменные x, y изменяются в зависимости от состояния порта. При выключении должны записаться в EPROM , а при включении считаться оттуда. Вешаю на PIND.1 контроль питания -1 есть 0 нет. Питание на МК держится за счет емкости 470 мкф,
5 вольт держит около 0,5 сек, тактовая 10Мгц, должен успеть записать. Работает , но со сбоями, раз нормально , на другой раз происходит искажение данных, записываю 5555 не изменяю три четыре шелчка питанием и все вылазит случайное число. Вот код писалось в кодевижен.
Код:
|
int x,y;
eeprom int Ex,Ey;
void main(void)
{
#asm("sei")
x=Ex; // считали из EPROM
y=Ey;
while (PIND.1) //пока есть питание крутим основной цикл
{
switch (PressKey)
{
case 0:break;
case 1: x++;break;
case 2: x--;break;
case 3: x=0;break;
case 4: y++;break;
case 5: y--;break;
case 6: y=0;break;
}
PressKey=0;
if (x==10000)x=0;
if(x==-1)x=9999;
if (y==10000)y=0;
if(y==-1)y=9999;
i3++; // этот
if(i3==100) // кусок
{ i3=0; // для индикации
RevriteDig(x); // каждые 100
for (i=0;i‹4;i++) buffer[i]= D[i]; // циклов
RevriteDig(y); // обновление
for (i=0;i‹4;i++) buffer[i+5]= D[i]; // х и у
}
}
// питание снялось PIND.1 = 0
Ex=x;Ey=y; // записали в EPROM
} |
__________________
Да здравствует Разум,да сгинет Маразм!
Последний раз редактировалось E_C_C; 16.06.2011 в 11:27.
|
|
|
|
16.06.2011, 11:36
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Так ведь запись в eeprom не мгновенна. Смотрите даташит, не помню точно, но время записи байта порядка 10 мс. А у вас пишется 4 байта. А питания уже нет...
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
16.06.2011, 11:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Мой склероз напоминает о том, что обычно запись в ЕПРОМ выполняется вызовом соответсвующей функции, которая требует довольно много времени на выполнение. Соответственно тут возможна ситуация, когда запись провести не успевают.
__________________
misterdi<@>i.ua
|
|
|
Сказали "Спасибо" MisterDi
|
|
|
16.06.2011, 11:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Из даташита
The write access time is in the range of 2.5 - 4 ms, depending on the VCC voltages.
Попробую емкость побольше.
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
16.06.2011, 11:58
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Сообщение от E_C_C
|
Попробую емкость побольше.
|
А как у вас организована схема контроля питания? Как настроен BOD?
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
16.06.2011, 12:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Схему детектора понижения покажите. Скорее всего он слишком поздно срабатывает - за 0,5 с контроллер сможет записать ваши данные раз 10 подряд. И сразу после записи программа должна переходить в бесконечный цикл с отключенными прерываниями, адрес ЕЕПРОМ установить в 000 - и соответственно в эту (000) ячейку ничего не писать
|
|
|
|
16.06.2011, 12:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Схема простейшая
Сообщение от niXto
|
И сразу после записи программа должна переходить в бесконечный цикл с отключенными прерываниями, адрес ЕЕПРОМ установить в 000 - и соответственно в эту (000) ячейку ничего не писать
|
Примерно так ?
Код:
|
// питание снялось PIND.1 = 0
Ex=x;Ey=y; // записали в EPROM
while(EECR & (1‹‹EEWE)); //ждем установки бита EEWE
EEAR = 0х000
#asm ("cli")
while(1); |
А компилятор не будет адресовать в ту же ячейку ? откуда ему знать что она занята ,наверное надо в программе указать начальный адрес например с ячейки 002 ?
Код:
|
while(EECR & (1‹‹EEWE));
EEAR = 0х002 //начальный адрес установил
eeprom int Ex,Ey; // и объявляю переменные |
Будет правильно воспринята такая конструкция ? переменные попадут в ячейки 002 и 004 ? или для надежности самому на ассемблере расписать все что связано с ЕЕПРОМ.
Сообщение от nml
|
А как у вас организована схема контроля питания? Как настроен BOD?
|
BOD ? если он есть в AT90S2313 , то никак по умолчанию.
__________________
Да здравствует Разум,да сгинет Маразм!
Последний раз редактировалось E_C_C; 16.06.2011 в 13:34.
|
|
|
|
16.06.2011, 13:20
|
|
Заблокирован
Регистрация: 08.08.2007
Сообщений: 2,843
Сказал спасибо: 378
Сказали Спасибо 1,368 раз(а) в 746 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Рисунок очень мелкий, не разобрать надпией. А сигнал состояния внешнего питания подан не на вход прерывания? Если не на прерывание, то контроллер время теряет напрасно. И для этого сигнала лучше использовать вход компаратора и не ждать, пока напряжение питания опустится практически до нуля. Если питание 12В, то срабатывание компаратора можно настроить вольт 8. Контроллер гораздо раньше получит сигнал о пропадании внешнего напряжения.
|
|
|
|
16.06.2011, 13:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Сообщение от RY723
|
И для этого сигнала лучше использовать вход компаратора и не ждать, пока напряжение питания опустится практически до нуля.
|
Заняты все ноги, если только снаружи компаратор лепить, что тоже не айс ,места мало.
з.ы рисунок перезалил.
__________________
Да здравствует Разум,да сгинет Маразм!
Последний раз редактировалось E_C_C; 16.06.2011 в 15:26.
|
|
|
|
16.06.2011, 14:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Некорректно пишется/читается EPROM в AVR
Сообщение от E_C_C
|
Заняты все ноги, если только снаружи компаратор лепить, что тоже не айс ,места мало.
|
После обнаружения отсутствия питания, запустить цикл, в цикле переменные ЕЕПРОМ и сверять с РАМ, если НЕ РАВНО - то записать переменую ПОБАЙТНО с паузами между БАЙТАМИ 5-10 милисек.
Хотите гарантированой записи ЕЕПРОМ? - пишите гарантированые алгоритмы, с проверками и выдержками времени между записью БАЙТ в ЕЕПРОМ.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
Последний раз редактировалось picavr; 16.06.2011 в 14:43.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:20.
|
|