Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Вс янв 22, 2012 01:16:43
Здравствуйте.
Заинтересовал такой вопрос: как успеть записать в EEPROM мк AVR (любая mega) значение перед отключением питания.
Смысл вот в чем. есть устройство, которое постоянно считает фронты на своем входе. фронты меняются часто - 1 раз в секунду в среднем.
Значение счетчика должно сохраняться между выключениями питания устройства (= храним в энергонезависимой памяти).
Постоянно писать в EEPROM нельзя - относительно мало циклов записи (100 000). Хватит чуть больше чем на сутки работы.
Если взять внешнюю EEPROM память - не сильно облегчит - хватит только на пару недель.
Один из выходов - мониторить питание, и в момент отключения (это ведь все-таки какое-то время занимает) дергать атмегу за ногу, чтобы та сохранила значение счетчика из оперативки в EEPROM.
Но, как я понимаю, супервизор питания здесь не совсем подходит.
Как быть?
Вс янв 22, 2012 01:56:39
Сказать наверняка не зная устройства сложно, т.к. неясно как быстро пропадает напряжение питания. Но можно питать МК от основного источника и от конденсатора через развязывающие диоды. Напряжение основного источника мониторить МК - как оно пропадет, прекращать программу и записывать данные в ЕЕПРОМ. Конденсатор подзаряжать от основного источника через диод.
Вс янв 22, 2012 01:56:57
отслеживать не питание мк, а входное напряжение стабилизатора питания, например, стало меньше 8 В, надо записывать....а конденсатор по входу стабилизатора выбрать такой, чтобы хватило на время записи...
Вс янв 22, 2012 02:06:28
Конденсатор - это хорошо.
Входное питание - 12в (от импульсника). Часть схемы (обмотки релюшек и кой-какая мелочь) питается именно от +12. Помимо этого есть стабилизатор 7805 для получения +5в.
Поэтому можно уловить падение напряжения еще до стабилизатора.
Но не уверен, что заряда конденсатора хватит. В схеме используется около 10ти светодиодов (10мА х 10 = 100мА) и шесть семисегментных индикатора(80мА при динамическом использовании).
Кроме того, есть еще другие микрухи - логика, RTC. Какой по емкости должен быть конденсатор в питании?
Вс янв 22, 2012 02:19:03
В предлагаемым мною способе от конденсатора будет питаться только сам МК. При пропадании напряжения будет запитан только МК (ножно применить суперкап), а вся остальнасхема обесточится, если толко светодиоды не подключены к портам МК напямую (я имею в виду плюс к МК, выход на землю). Если это так, можно подсоединить их между плюсом питания и выводом МК.
Вс янв 22, 2012 02:24:29
12 В с импульсника - это хорошо, значит, уже 11,5 можно сделать порогом, дальше диод, этот конденсатор и 7805....4700 поставь, например...или по сигналу сразу выключить все доступные мк потребители, а потом записывать, тогда и гораздо меньшей ёмкостью обойдётся...
Последний раз редактировалось
Enman Вс янв 22, 2012 02:30:09, всего редактировалось 2 раз(а).
Вс янв 22, 2012 02:25:20
На счёт постоянного использования EEPROM подтверждаю. Пару лет назад, когда AVR-ки осваивал, на тиньке (2313) часы сделал и, на случай сбоя питания, каждую минуту текущее время в EEPROM записывал. Так менее, чем через пол года эта функция перестала работать, из EEPROM читался какой-то мусор.
А на счёт супервизора, в AVR-ках есть BOD, который опционально следит за питанием, но он может толко давать сброс. Так что или схема с диодом и конденсатором, или можно внутренний компаратор использовать. Один его вход программно подключается к внутреннему ИОН, а второй к внешнему резистивному делителю на нужное значение и разрешаются прерывания по изменению состояния выхода компаратора. А по срабатыванию компаратора все нагрузки гасить. Ёмкость - С=I*T/U, размерности всех величин по системе СИ, T-необходимое время, I-потребляемый ток, U-разность напряжений, на которую допустимо опуститься для сохранения рабочих параметров микроконтроллера.
Вс янв 22, 2012 02:58:37
Хорошая идея насчет BOD. В Меге фьюзами можно выставить уровень BOD 4.3 В. Из-за двух развязывающих диодов напряжение на аварийном кондере при отключении питания будет 3.8 В - достаточное для записи в EEPROM. Произойдет Reset и программа начнется сначала. В самом ее начале можно проверять бит BORF в регистре MCUSR и по его установке производить запись в ЕEПРОМ.
Вс янв 22, 2012 03:04:45
Вот что у меня получилось на данный момент.
Компаратор сравнивает опорное напряжение 3.3в (просто такой стабилитрон был в наличие) и исходное +12в.
В нормальном режиме все "ок" - на выходе компаратора высокий уровень.
Если отключается входное напряжение, то оно будет снижаться быстрее всех. и компаратор своим выходом с открытым коллектором притянет выход к земле, что есть сигнал для мк.
По этому сигналу мк отключает все светодиоды, всю нагрузку. Останется только питание прочей логики. В этот момент питание схемы поддерживается конденсаторами C2 и C5. И их как раз и должно хватить на то, чтобы МК успел записать значение счетчика в ЕЕПРОМ.
С3 нужен для поддержания опорной точки после отключения питания - разряжаться с 3.3в будет ох как долго.
Грабли: пробовал поставить стабилитрон на 9.1 вольт - в итоге на выходе компаратора всегда 0. Подозреваю, что в этом случае его и питать надо от +12в. Но тогда возникает проблема с преобразованием уровня на выходе.
Я правильно все понял/сделал?
Есть другой вариант. В схеме в качестве RTC я использую DS1307. У нее вроде на борту есть целых 56 байт памяти, резервно питаемой от батарейки 3в.
Насколько я понимаю, там неограниченное число циклов записи (память, по сути, энергозависимая). Может значение счетчика каждый раз туда писать?
- Вложения
-
- Sch1.png
- (64.71 KiB) Скачиваний: 6348
Вс янв 22, 2012 03:08:50
Ser60 писал(а):Хорошая идея насчет BOD. В Меге фьюзами можно выставить уровень BOD 4.3 В. Из-за двух развязывающих диодов напряжение на аварийном кондере при отключении питания будет 3.8 В - достаточное для записи в EEPROM. Произойдет Reset и программа начнется сначала. В самом ее начале можно проверять бит BORF в регистре MCUSR и по его установке производить запись в ЕEПРОМ.
Так ведь сначала произойдет РЕСЕТ, вызванный BOD-ом. Я так понимаю, что значения всех переменных будут сброшены. Что тогда писать в ЕЕПРОМ после сброса?
Вс янв 22, 2012 03:19:11
смысла в большой ёмкости на ВЫХОДЕ 7805 нет, только на входе.....
Вс янв 22, 2012 03:33:46
RVL писал(а):Так ведь сначала произойдет РЕСЕТ, вызванный BOD-ом. Я так понимаю, что значения всех переменных будут сброшены. Что тогда писать в ЕЕПРОМ после сброса?
При ресете состояние RAM не меняется, если только напряжение питания будет выше порога сохранения RАМ - заведомо больше 1.8В
Если в системе есть 1307 - можно писать в ее RAM неограниченно. Данные сохранятся пока у нее будет работать своя баратея.
А насчет схемы: Д1 уберите, анод Д2 переключите на выход 7805 а вжод питания МК подсоедините через диод к выходу 7805 и через другой диод к C1.
Вс янв 22, 2012 11:45:42
BOD не катит.
RVL, я же написал, кмпаратор и источник встроенного внутри меги есть, надо только внешний делитель.
Вс янв 22, 2012 11:50:50
Ser60 писал(а):Хорошая идея насчет BOD. В Меге фьюзами можно выставить уровень BOD 4.3 В. Из-за двух развязывающих диодов напряжение на аварийном кондере при отключении питания будет 3.8 В - достаточное для записи в EEPROM. Произойдет Reset и программа начнется сначала. В самом ее начале можно проверять бит BORF в регистре MCUSR и по его установке производить запись в ЕEПРОМ.
как только напряжение снизится ниже порога BOD, МК будет не просто сброшен, а войдет в состояние сброса и там будет оставаться, пока напряжение не станет выше порога BOD. не выйдет номер.
Вс янв 22, 2012 12:06:32
Прошу прощения за офф
Мастер Ломастер, а ты не думаешь, что твоя аватарка является оскорбительной для твоих идейных собратьев?
Вс янв 22, 2012 12:08:35
РЕбята!
А почитать тему проваттметр тяжело?
там же всё расписано!!!
ставиш 10 000...100 000 мкф 6.3 вольт на выходе 7805
на компаратор через переменник 1-100 килоом заводиш 3.3 вольта, второй вывод внутреннего компаратора на внутреннюю опору 2.56 и ВУАЛЯ!
в прерывании по перекидыванию компаратора все выходы в Z состояние и пишеш свою еепром
BOD обязательно на 3.3 вольта и после завершения всех записей ОБЯЗАТЕЛЬНО почитать / записать ЛЮБУЮ другую НЕНУЖНУЮ ячейку еепрома...с вероятностью 70% последняя прочитанная или записанная ячейка ПОРТИТСЯ при выключении питания !!!
Ещё рекомендую в компараторном прерывании вконце войти в вечный цикл и взвести вачдог...тогда при кратковременном пропадании питания МК не перезагрузится но сохранится - лучше бы в таком случае МК Перезагрузить! вот вачдог(который не надо сбрасывать в вечном цикле вконце прерывания компаратора) и передернет красиво и аккуратно МК!
8 моих ваттметров и 2 теплосчетчика пищущих от 8-ми до 120-ти БАЙТ в еепром при выключении питания УСПЕШНО работают УЖЕ ПОЛ ГОДА и сбоев записи ещё небыло...единственное что - надо правильно подобрать напругу на выходе из переменника - она должна быть больше 2.56 при самом минимальном значении питания - процент помехи - (Корень с двух*значение RMS питания)тоесть для 16-тивольтового транса на делителе должно получиться вольт 5
Последний раз редактировалось
clawham Вс янв 22, 2012 12:10:33, всего редактировалось 1 раз.
Вс янв 22, 2012 12:09:05
ELcat писал(а):Прошу прощения за офф
Мастер Ломастер, а ты не думаешь, что твоя аватарка является оскорбительной для твоих идейных собратьев?
если хотите об этом поговорить - пишите в ЛС.
Вс янв 22, 2012 12:52:41
Наблюдается 4 варианта решения данной задачи.
1. Вести обмен с RAM RTC. Если переменные не быстро изменяются, то оперировать напрямую с ячейками RAM.
2. Организовать размазанную запись в ячейки EEPROM. Соответствующие даташиты есть на сайте атмела.
3. Через резистивный делитель с сопротивлением верхнего резистора> 20 кОм завести сигнал на ногу прерывания МК от выхода БП, развязанного через диод от конденсатора с кренкой. Вход МК зашунтировать мелкой керамикой.
4. Через оптопару мониторить переходы через "0" сетевого питания. В случае выпадания нескольких- записывать.
Какой способ более предпочителен нужно решать исходя из архитектуры системы.
Вс янв 22, 2012 13:05:19
я бы остановился на таком варианте:
1. схема перерабатывается так, что вся нагрузка МК запитывается от "мгновенно пропадающего" питания, а сам МК от питания, которое пропадает не мгновенно (например, через диодную развязку и конденсатор большой емкости).
2. встроенный компаратор настраивается, как было сказано ранее, и по прерыванию от него производится запись. можно использовать АЦП - в этом случае можно обойтись вообще без внешних компонентов (не для всех МК), но потребуется определенное ухищрение в программе.
мой вариант не исключает возможности "размазывания" данных по EEPROM.
Вс янв 22, 2012 13:10:55
У меня подобная задача решена так: на входе стабилизатора 2200 мкФ, стабилизатор ключевой, на MC34063. На выходе стабилизатора 220 мкФ. Входное напряжение через делитель 68 к и 10 к подается на встроенный компаратор ATmega8, второй вход компаратора подключен к внутренней опоре. При падении питания выключаю всё и сохраняюсь в EEPROM. Работает надежно.
Если есть DS1307, можно хранить данные в RAM, число записей не ограничено.
Можно поставить FRAM от Ramtron, FM24xxx, так тоже делал, когда данных нужно было много сохранять.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.