Перейти к содержимому

Сколько ом на атмеге 644

  • автор:

Введение

В этом материале мы рассмотрим возможные проблемы при работе с EEPROM. Часть из них связана с аппаратным стороной микроконтроллера, такие как повреждение EEPROM при пониженном напряжении питания и ограниченный ресурс EEPROM, а часть с программным обеспечением, например, при использовании EEPROM в прерываниях. Также рассмотрим способы решения этих проблем и методы повышения надежности хранения данных в EEPROM.

Повреждение EEPROM при пониженном напряжении питания

Одна из старых проблем AVR — это повреждение EEPROM данных при пониженном питании микроконтроллера. Это может происходить в двух случаях:

— Если напряжение питания ниже определенной величины, запись в EEPROM будет выполняться некорректно.
— При пониженном напряжении питания микроконтроллер сам может выполнять команды некорректно.

Этих повреждений EEPROM данных можно избежать, соблюдая следующие рекомендации:

— Нужно удерживать микроконтроллер AVR в состоянии сброса, если напряжение питания находится ниже нормы. Для этого можно использовать внешние супервизоры питания или встроенный детектор пониженного питания — Brown-out Detector (BOD). Встроенный детектор управляется с помощью fuse битов микроконтроллера — BODEN и BODLEVEL. BODEN — разрешает/запрещает работу детектора, а BODLEVEL — определяет его уровень срабатывания.
Если сброс микроконтроллера происходит во время процесса записи в EEPROM, то операция записи будет завершена только при достаточном уровне напряжения.

— Также в многие разработчике рекомендуют не использовать 0-ую ячейку EEPROM`a, поскольку именно ее содержимое чаще всего повреждается при снижении питания микроконтроллера.

Проблемы с EEPROM из-за прерываний

Операция записи в EEPROM состоит из нескольких шагов. Вспомним эту последовательность:

1. Ожидаем готовности EEPROM, опрашивая бит EEWE регистра EECR.
2. Устанавливаем адрес в регистре EEAR.
3. Записываем байт данных в регистр EEDR.
4. Устанавливаем основной флаг разрешения записи EEMWE регистра EECE
5. Устанавливаем флаг разрешения записи EEWE регистра EECE

Бит EEWE должен быть установлен в течении 4-ех тактов после установки бита EEMWE. Если этого не произойдет по причине прерываний, то запись в EEPROM не будет произведена. Этого легко избежать, если запретить прерывания перед 4-м шагом, а после 5-го снова разрешить их.

Однако есть еще один подводный камень. Если прерывание возникло после 1-го, 2-го или 3-го шага, и в прерывании тоже используются операции с EEPROM (чтение или запись), то запись может не состояться, или запишутся не те данные и не туда, потому что содержимое регистров EEAR (адрес) и EEDR (данные) будет изменено.

Описанное выше касается и процедуры чтения EEPROM.

Лечить это можно следующими способами:

— Не использовать операции чтения и записи EEPROM в прерываниях.
Это особенно касается операции записи, потому что она медленная и выполняется с использованием внутреннего RC генератора. Например, для mega16 в даташите указано, что при записи в EEPROM используется внутренний RC генератор с частотой 1 МГц (независимо от установок fuse битов CKSEL) и время записи составляет 8.5 мс. Для прерывания это очень долго.

— Запрещать прерывания на время всей процедуры записи (чтения) EEPROM, то есть в самом начале.

— Сохранять в начале обработчика прерывания содержимое регистров EEAR (адрес) и EEDR (данные), а перед выходом восстанавливать их.

— Использовать флаги (семафоры) для сигнализации о выполнении работы с EEPROM.
Перед выполнением записи в основном цикле программы (или задаче, если используется ос) устанавливать программный флаг, а в прерывании (или другой задаче) проверять его.

Ресурс EEPROM

EEPROM имеет ограниченный ресурс. Atmel гарантирует, что количество циклов перезаписи EEPROM составляет не меньше 100000. Цифра довольно большая, однако и она может быть достигнута, если записывать в EEPROM часто и на протяжении долгого времени.
Есть два приема по «увеличению» ресурса EEPROM.
Первый — простой и состоит в том, чтобы записывать в EEPROM данные, только если они изменили свое значение.

 
__eeprom uint8_t data;
uint8_t newData;

.
if (newData != data) data = newData;
>

Второй- хитрый и состоит в том, чтобы хранить данные не в одной ячейки памяти (или группе ячеек, если речь идет о многобайтных переменных), а в нескольких, и записывать в них по очереди.
Допустим, нам нужно хранить в EEPROM один байт. Выделяем под него 8 байтов и каждый раз записываем в следующую ячейку, когда доходим до последней ячейки, то записываем в первую. И так по кругу, как в кольцевом буфере. Если каждая ячейка EEPROM имеет ресурс 100000, то записывая в 8 ячеек по очереди, мы получаем ресурс перезаписи байта 800000.

EEPROM и оптимизация компилятора

Переменные, которые объявлены, но не используются, часто удаляются компилятором в процессе оптимизации. Если такие переменные нужны, перед ними следует добавлять ключевое слово volatile.


//для IAR AVR
volatile __eeprom char name[] = "prog 12.3";

Если используются свои функции для работы с EEPROM, то могут возникнуть проблемы при высоких уровнях оптимизации компилятора. Компилятор может объединить одинаковые (с его точки зрения) части кода в одну подпрограмму и нарушить логику работы вашей функции. Чтобы этого не происходило нужно или запрещать оптимизацию данной функции, или отключать перекрестную оптимизацию (cross call optimization) для функции или файла. Как это делается зависит от компилятора. Как правило, для этого существуют определенные ключи и прагмы.

Программные способы повышения надежности EEPROM

Один из простых способов повышения надежности хранения данных в EEPROM — это метод мажоритарного резервирования. Суть метода заключается в том, что для хранения данных выделяется нечетное количество ячеек памяти — N. При сохранении данных — запись производится во все выделенные ячейки. При чтении — читаются тоже все, но решение относительно содержимого принимается на основе равенства (N+1)/2 ячеек.

Рассмотрим пример тройного мажоритарного резервирования байта данных. Для сохранения байта используются три байта EEPROM, а решение о содержимом принимается на основании равенства 2 байтов. Код приведен для компилятора IAR AVR.


//функция сохранения
void EEPROM_SaveByte(uint8_t value, uint8_t __eeprom *buf)
buf[0] = value;
buf[1] = value;
buf[2] = value;
>

//функция считывания
uint8_t EEPROM_LoadByte(uint8_t *value, uint8_t __eeprom *buf)
uint8_t a = buf[0];
uint8_t b = buf[1];
uint8_t c = buf[2];

if ((a == b)||(a == c)) *value = a;
return 0;
>
else if (b == c) <
*value = b;
return 0;
>
>
return 1;
>

.
//пример использования

__eeprom uint8_t buffer[3];
uint8_t data;

EEPROM_SaveByte(125, buffer);
EEPROM_LoadByte(&data, buffer);

В случае повреждения одной из ячеек или неудачной записи в одну из них, такой метод поможет избежать ошибки. Но если неправильное значение запишется в две ячейки, то прочитанные данные будут неверными.

Другой метод повышения надежности хранимых данных состоит в использовании контрольных сумм, например CRC. Я не использовал этот метод в своей практике, поэтому о нем мало чего могу сказать.

На этом все.

Управление токарным на Atmega. Электронная гитара.

Ртуть

Олег А.

Какая версия «гитары», в текущий момент, установлена на Вашем станке?

1. Какая версия «гитары», в текущий момент, установлена на Вашем станке?

Digital_Feed_2e
Digital_Feed_3b
Digital_Feed_3b_Uno
Digital_Feed_4k
Digital_Feed_4k_lite
Digital_Feed_5d
Digital_Feed_6c_auto
Digital_Feed_7e2

Рекомендуемые сообщения

Рекомендуемое

quqdron

Опубликовал quqdron, 25.04.2022 08:21

Т.К. Топик «Управление токарным на Atmega. Электронная гитара» не подъемен для новичков , да и для самого автора проекта уже многое забылось . В процессе чтения создались документы (структурированная подборка по теме ): Эл. гитара.docx — старта проекта, конструкция. ЭлГитараПрог .docx — про програму. Разделы Доработки, Проблемы могут быть интересны не только новичкам, но и старожилам, надеюсь. акцент на Digital_Feed_7e2 (Олег.А 20.10.18). Работа не закончена (законченный проек

Рекомендовал Ртуть

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Войти

Уже есть аккаунт? Войти в систему.

Сколько ом на атмеге 644

Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [44] 45

09.05.2021, 23:41

но не могу найти тему где идёт обсуждение этой моделиОтдельной темы не было. Все это небольшие модификации от версии 2015.

13.05.2021, 19:58

Добрый день, коллеги.
Дайте, пожалуйста, кто нибудь фюзы для прошивки Atmega 644 в SW2019 mini
через ПониПрог. Спасибо

15.05.2021, 10:12

Добрый день ! В процессе настройки микрофонных цепей обнаружил, что резистор R102 в плате от SW-RADIO с выхода ОУ идет не на землю, а к 7 выводу операционника, т.е. ко второму выходу. Это ошибка разводки ?

Victor US0IZ
09.06.2021, 19:52

Решил в своем Mini SW2017 перепрошить синтезатор.
Приглянулся программатор:
Макетная плата 1 шт. Новинка для ATMEL AVR ATMega ATTiny 5 USB ISP программатор Dreamcast Esp32 механическая клавиатура
Прошу дать комментарий по этому программатору.

10.06.2021, 17:20
Victor US0IZ, https://prom.ua/p1220814538-avr-atmega16-plata.html :super::super:
Victor US0IZ
10.06.2021, 20:41
Спасибо все теперь понял.
11.06.2021, 11:38

В моем mini SW2017 какая то проблема которая проявляет себя не постоянно но с самых первых дней аппарата. Иногда, не часто при включении аппарата белый экран и тишина, приходится вкл/выкл несколько раз (иногда раз 10), потом все начинает работать. Еще в процессе сборки когда установил дисплей и решил все это дело проверить в работе, при включении оказалось что горит белый экран, перепаивал его, пропаивал, но ничего не помогло. В загашниках нашел старенький дисплей поставил его и он заработал. В то время не обратил внимание на эту мелочь, подумал что не рабочий дисплей был.
Дисплей тот я не выкинул и потом при сборке версии 2019 г. решил его поставить и там он заработал.
Вот и думаю, а в чем же кроется причина не стабильной работы которая может проявить себя один раз в неделю, а то и раз в месяц.

11.06.2021, 13:19
замените кварц 8000
11.06.2021, 13:28
R9IT,
Видимо ошибка, делить образуется для выходного сигнала МУ.
21.06.2021, 15:26
Всем добра!
Пожалуйста ткните носом, где можно взять инфу по доработке mini SW2018 для цифры?!
26.06.2021, 07:44
Делают ли sw20** mini с монохромным дисплеем ?что бы на солнце не слеп
07.07.2021, 12:41

Как малой кровью переделать SSB фильтр на 2100Гц ну или на крайний случай 2400Гц?

Может у кого есть готовые наминали конденсаторов (кварцев)?

07.07.2021, 18:54
на крайний случай 2400Гц?
Так сразу на 6 кгц нужно переделывать 🙂
07.07.2021, 21:37
Мне бы SNR побельше, 6кГц такое себе.
08.07.2021, 11:01

Сделал CAT интерфейс, и возник вопрос — нужно ли подавать питание +5В от USB порта компьютера на адаптер FT232R, или оставить питание +5В только с платы SW2020mini?

Genadi Zawidowski
08.07.2021, 11:07

Делайте как в не-мини трансивере. ПРоцессор с питанием 3.3, обеспечьте чтобы из адаптера не прилетело +5

10.08.2021, 09:17

Приветствую.
Не нашёл темы про mini-2017. Какие отличия от mini-2016.
Возможен ли САТ.
Кто сейчас их производит.

10.08.2021, 15:37

Не нашёл темы про mini-2017В течении времени были незначительные изменения ради которых не стоило открывать новую тему. Сейчас это уже Мини SW2019. В таком виде и изготавливается.

23.08.2021, 22:00

В SW2019 mini не могу добиться чувствительности микрофона, приходится громко кричать в микрофон буквально в притык, чтобы появилась отдача на дисплее, резистор по микрофону на максимуме. Хотя в режиме tune все нормально 16ватт. Подключал этот же микрофон к SW2013_v3 там все ОК!, можно держать микрофон на расстоянии 15см. Менял операционник на NЕ5532? не помогло, поднимал делителем напряжение для питания микрофона до 3в, мало что дает. Я в ступоре, что можете посоветовать?

23.08.2021, 22:05

Explorer, Нет усиления, проверьте номиналы в цепи ОС со 2-й ноги 4558 ОУ 150 ом и 1 мкф. Если обрыв усиление ноль.

23.08.2021, 22:14

Вроде бы на месте, но уже с утра проверю может действительно обрыв. А то что на входе то и на выходе. Спасибо Александр.

24.08.2021, 21:08

Заменил С100 1мкф на 0,1 то что было в наличии и все заработало. Еще раз спасибо Александр за помощь.

25.08.2021, 00:05
Заменил С100 1мкф на 0,10,1 не пойдет. Сильно мало, снизу весь спектр будет обрезан.
19.09.2021, 16:52

to amator
Добрый день, Александр Николаевич!
Подскажите, пожалуйста. Планирую применить оконечник по схеме SW в конструкции, где есть напряжения +13,6 вольт и 10 вольт.
Не хочется городить туда еще стабилизатор на 8 вольт, можно ли запитать предварительные каскады оконечника от 10 вольт, выдержат ли 591-е транзисторы?

19.09.2021, 16:58
3,14RAT, 10 вольт можно, устроит вполне.
20.09.2021, 11:13

Добрый день, может кто-то ткнет на плате, где находится резистор для самоконтроля при передачи в телеграфе (на сколько мне известно он устанавливает уровень/громкость прямо с ноги контроллера)?

Работаю в наушниках, получается громче чем хотелось бы во время передачи.

20.09.2021, 15:58

где находится резистор для самоконтроляСигнал контроля идет с 16-й ноги процессора через rc цепочку 100 ком и 0.1 мкф на землю. Увеличьте вдвое любой из этих номиналов. Поставьте параллельно 0.1 еще один 0.1. Станет вдвое тише. Вот плата, конденсатор выделен желтым.

20.09.2021, 18:23

Работаю в наушниках, получается громче чем хотелось бы во время передачи.
Но не только в наушниках, на динамик тоже сильно громко. Такое наблюдается во всех версиях SW. -( По хорошему изготовителям SW следует откорректировать номиналы деталей.
АРУ тоже работой не блещет. Была модернизация системы АРУ, но результатов не видно. В первом SW-2012mini там АРУ работала безукоризненно. На передачу тоже если сравнивать SW-2012mini и теперешние, завалы на ВЧ диапазонах стали больше. Потому как сейчас видно другое отношение к изготовлению и настройке аппарата.

21.09.2021, 09:28

Ну моя проблема с громкостью решаться просто, берется переходник с регулятором громкости и уменьшается уровень пока самоконтроль ну устраивает, потом на самом трансивере увеличиваем громкость и наслаждаемся.

Просто иногда могу забыть наушники или переходник, потому решил на плате поменять в будущем.
363768

21.09.2021, 10:53

to: Amator — Александр Николаевич, здравствуйте, задавал этот вопрос в ветке SW2015 — аппарат SW2015 (судя по плате внутри) в корпусе от 13-го. Кто делал, не знаю, беру у товарища для ОЧ и выездов (иногда).
Раньше не замечал, но сейчас, при прослушивании на соседний, рядом TRX, заметил в режиме CW при Тх (хоть VOX, хоть педаль) постоянный сигнал (небольшого уровня) на выходе с частотой как и у манипулируемой ключем, но этот сигнал не реагирует на регулировку Ур.Тх. Т.е., при контроле сигнала другим RX, этот сигнал остаётся на одном уровне, а манипулируемый меняет уровень согласно регулировке. Оба сигнала абсолютно одной частоты. И, когда пробовать принимать на соседний RX, на малых уровнях очень тяжело читать инфо (режим QRP на ОЧ). При заметно большем уровне Тх текст читаемый, (но и сигнал узнаваемый,hi!). На дальних расстояниях этого никто не замечал, почему я и не обращался ранее. Аппарат очень удобный и с прекрасным приёмом, но у меня (кроме схемы) нет описаловки по построению сигналов коммутации режимов-мод, может где-что нарушилось.
Если у кого есть готовый ответ или варианты «где заглянуть», буду очень благодарен!
Vlad-UT8AS

21.09.2021, 15:20

постоянный сигнал (небольшого уровня)Возможно в паузах не полностью запирается IC3 по 1-й ноге. Заменить диодом R53 по схеме 430 ом идущим на 1-ю ногу IC3. Будет запираться надежно.

ATmega

Справочная информация:
Буква V в названии микросхемы означает пониженное напряжение питания;
Буква A — микросхема имеет расширенный диапазон питания от 1.8 до 5.5 Вольт;
Буква P — PicoPower — пониженное потребление;
Для уточнения названия столбца (например, если смотреть таблицу далеко от шапки) нужно просто подвести курсор к ячейке — всплывет подсказка.
Таблица находится в постоянной доработке. О замечаниях и неточностях пишите Moriam ˆˆ

Об atmega: все из нижеперечисленных микросхем имеют сторожевой таймер (watchdog), систему контроля питания brown-out detection, RC-генератор и имеют возможность внутрисхемного программирования

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *