Страница 2 из 2
Re: Attiny13 через раз сохраняет данные EEPROM!?
Добавлено: Пн дек 30, 2013 15:05:34
kuber
Присоединяюсь к сказанному, Ни разу проблем с EEprom НЕ было.
Использую только ассемблер.
Re: Attiny13 через раз сохраняет данные EEPROM!?
Добавлено: Пн дек 30, 2013 16:36:35
BOB51
Интересно, чего можно всунуть в 512 команд (ATtiny 13/13A) под СИии?
Я еще понимаю, за 2 килобайта (в словах - ибо команда, в среднем, двухбайтовая), но у тинек....

Re: Attiny13 через раз сохраняет данные EEPROM!?
Добавлено: Пн дек 30, 2013 18:37:41
Viper115
Пишу тоже на ассемблере. Прерывается вообще не используются в программе, хотя при записи ставлю запрещение. Мк работает на частоте внутреннего генератора 9,6 МГц.
Спишем на брак пока.
Re: Attiny13 через раз сохраняет данные EEPROM!?
Добавлено: Пн дек 30, 2013 19:24:06
BOB51
Cкинь исходник со схемой - мож посмотрю чего там на досуге.

Re: Attiny13 через раз сохраняет данные EEPROM!?
Добавлено: Вс янв 05, 2014 19:35:49
Viper115
Как оказалось, такая проблема действительно иногда появляется в МК Atmel. Память EEPROM до сих пор не является надежной, хотя производители заботают над этим.
Нашел кое-какую информацию по решению этой проблемы в книге Котова И. Ю., откуда привожу выдержку:
Проще всего это сделать, если отвести сохраняемой переменной несколько ячеек энергонезависимой памяти. Вероятность того, что все ячейки повредятся одновременно намного меньше. Хранить одно значение по двум адресам имеет смысл тогда, когда необходимо выявить только саму ошибку, но никак не восстановить утерянные данные. Дублирование по трем и более адресам EEPROM уже дает возможность найти и устранить проблему, когда один или несколько байтов случайно претерпели изменения. Подпрограммы, приведенные ниже, производят восстановление 8-разрядной величины, для хранения которой отведено 4 б памяти EEPROM. При считывании, сначала, проверяется условие равенства всех байтов памяти. Если значение хотя бы одного из них отличается от остальных, то данные были повреждены. В этом случае производится по парное сравнение между собой содержимого всех ячеек (всего 6 операций сравнения). В случае равенства хотя бы одной пары число, размещенное в этих двух ячейках, считается уцелевшим. Иначе данные не подлежат восстановлению.
Re: Attiny13 через раз сохраняет данные EEPROM!?
Добавлено: Сб янв 18, 2014 01:16:36
amd9800
Viper115 писал(а):В случае равенства хотя бы одной пары число, размещенное в этих двух ячейках, считается уцелевшим. Иначе данные не подлежат восстановлению.
мне интересен такой момент. Насколько я понимаю некоторые биты единички могут стать нулями. Наоборот я думаю никак.
например мы записываем такой байт 0b00110101.
запишем его в еппром, но только не в один байт, а в три чтоб был резерв.
и например при чтение получим:
1) 0b00100100
2) 0b00000001
3) 0b00110100
применяя побитную операцию ИЛИ над этими тремя байтами получим изначальную ячейку.
a = 0b00100100 | 0b00000001 | 0b00110100;
a = 0b00110101
ну если не повезет то все биты одной и той же позиции будут битыми в разных ячейках то данные точно не восстановить.
Re: Attiny13 через раз сохраняет данные EEPROM!?
Добавлено: Сб янв 18, 2014 09:40:39
SmarTrunk
Viper115 писал(а):Как оказалось, такая проблема действительно иногда появляется в МК Atmel. Память EEPROM до сих пор не является надежной, хотя производители заботают над этим.
Об этом много кто пишет, например Ревич "Программирование микроконтроллеров avr на ассемблере".
Обычно считают, что требуется отслеживать напряжение питания (хоть аналоговым компаратором), для предотвращения записи в момент выключения питания, т.к. это гарантированное повреждение ЕЕПРОМ. Обеспечить достаточную емкость электролитических конденсаторов по питанию, для гарантированного бесопасного завершения записи, если она уже началась. А также обязательно включение BurnOut Detector (для параноиков - поставить внешний трехвыводный монитор питания) для предотвращения хаотического выполнения случайного кода при понижении напряжения питания ниже критического, что с большой вероятностью портит ЕЕПРОМ.