|
слетает память у Atmega16, слетает память у Atmega16 |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 34)
|
Sep 27 2013, 20:53
|
Местный
  
Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457

|
Цитата(aaarrr @ Sep 27 2013, 23:25)  То есто ПО цело, а изменились константы, записанные при производстве? так и есть, ПО рабочее примечание: константы питались из ПО питание 5V от USB
|
|
|
|
|
Sep 28 2013, 06:42
|
Местный
  
Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457

|
Цитата(kovigor @ Sep 28 2013, 01:51)  Согласен. Еще бы уточнить, где эти константы записаны - во Flash или в EEPROM. Впоследнем случае из-за ошибки в программе прибор может вместо одной записи константы эту самую запись зациклить, в результате EEPROM портится ... Записаны в EEPROM. Один раз при выпуске. Доступ к этой функции пользователю закрыт. От чего это может произойти "из-за ошибки в программе прибор может вместо одной записи константы эту самую запись зациклить, в результате EEPROM портится"? Питание прямо от USB. Паралельно 0,1 мкФ.
Сообщение отредактировал messenger - Sep 28 2013, 06:42
|
|
|
|
|
Sep 28 2013, 07:17
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879

|
Рекомендуется хранить константы во FLASH- памяти, если они не меняются во время работы программы. Меры предосторожности при работе с EEPROM хорошо написаны например в книге А.В. Евстефеев "Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel" см. стр 41.
Сообщение отредактировал Santy - Sep 28 2013, 07:18
|
|
|
|
|
Sep 28 2013, 10:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата(messenger @ Sep 27 2013, 23:53)  так и есть, ПО рабочее примечание: константы питались из ПО Вот с этого и надо было начинать... Цитата В процессе работы прибора запись в EEPROM не проводится. А когда и чем производится? В программе есть хоть одна процедура записи в eeprom ?
|
|
|
|
|
Sep 28 2013, 10:52
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879

|
Цитата(ArtemKAD @ Sep 28 2013, 13:25)  Это как? Процедура в программе есть или ее нет? Как определяется "Один раз при выпуске." Может быть подпрограмма для записи в EEPROM, которую можно вызвать только 1 раз.
|
|
|
|
|
Sep 28 2013, 13:15
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879

|
Цитата(ArtemKAD @ Sep 28 2013, 15:06)  Для того, что-бы "можно вызвать только 1 раз" нужен энергонезависимый признак того, что этот 1 раз уже был. Вопрос и состоит в том, что это за признак? Например, число читаемое из EEPROM.
|
|
|
|
|
Sep 28 2013, 13:32
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(messenger @ Sep 28 2013, 16:16)  Думаете есть вероятность того, что при подаче вполне определенных команд появилоась помеха начинающаяся командой и заканчивающаяся кодовым словом? Есть, безусловно. Если в программу заложена подобная "бомба замедленного действия", то она, как правило, взорвется, рано или поздно. CRC всей командной посылки и блока данных, включая кодовое слово, как я понял, не проверяется ?
|
|
|
|
|
Sep 29 2013, 09:51
|
Местный
  
Группа: Участник
Сообщений: 361
Регистрация: 23-03-07
Пользователь №: 26 457

|
Цитата(kovigor @ Sep 29 2013, 01:00)  Вы про защиту команд и данных с помощью CRC так и не ответили. Есть она ? Если нет, то банальный "мусор", принимаемый при переключении разъемов или плохом контакте в них может дать самые неожиданные и загадочные эффекты ... такое кодирование не делаю
|
|
|
|
|
Sep 30 2013, 04:38
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(kovigor @ Sep 29 2013, 16:04)  Тогда все ясно ... да ничего на самом деле не ясно. в практике с AT89S53 у меня был пренеприятный случай, когда в процессе эксплуатации с периодичностью примерно раз в 4-6 месяцев в EEPROM слетала 1 ячейка - строго определенная, и слетала всегда в строго определенное значение. Процедур записи в эту ячейку в коде не было вообще - EEPROM писалась 1 раз программатором, в коде только чтение. никакие аппаратные меры не помогали. после долгих мытарств пришлось уйти на AVR и для страховки писать все настроечные константы во FLASH - помогло. в случае топикстартера могу порекомендовать 2 варианта борьбы с бедой: 1. хранить в EEPROM 3 копии калибровочных констант, при старте программы считывать по мажоритарному принципу. 2. поступить так, как сделал я: калибровочные константы писать только программатором во FLASH, исключив из кода принципиальную возможность записи.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Sep 30 2013, 06:50
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 30-10-07
Пользователь №: 31 879

|
Цитата(Harbinger @ Sep 30 2013, 07:39)  Писать калибровки во Flash без возможности изменения не всегда получится - они могут настраиваться в процессе регулировки изделия. Поступал следующим образом. В EEPROM хранится несколько копий массива калибровочных параметров, защищённых CRC. При старте проверяются все копии. Если CRC в порядке, калибровки считываются в ОЗУ и переходим в штатный режим работы. В случае повреждения какой-либо копии массива она восстанавливается из неповреждённой. Если же совсем "всё пропало" - EEPROM переписывается из FLASH "среднепотолочными" значениями и выставляется признак, что устройство не настроено. Автоматически получается инициализация EEPROM при первом запуске. Как часто при этом появляется признак, что устройство не настроено?
|
|
|
|
|
Sep 30 2013, 07:44
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(krux @ Sep 28 2013, 17:41)  какой-нибудь M103С fuse? Не, это из оперы mega128, а тут mega16... Я храню 5 копий таких "сильно важных параметров" и, при старте, применяю к ним медианную фильтрацию. Потом сравниваю результат со всеми пятью записанными и, по мере надобности, восстанавливаю битые байты. Плюс такого метода: не нужно crc и надёжнее чем 3 копии  Минус: 5 копий съедают больше памяти чем 2-3 копии, нужна процедура медианной фильтрации для каждого типа хранимых данных (у меня поэтому сделано всё однотипно).
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Sep 30 2013, 09:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата Автоматически получается инициализация EEPROM при первом запуске. Делаю примерно аналогично. Причем по большей части по вот этой причине. PS. Слетаний EEPROM у AVR-ок уже больше 10 лет не наблюдаю. Ни на одном устройстве из тех десятков тысяч которые были выпущены.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|