Добрый день,
возник вопрос о сохранинии данных при падении напряжении
или выключении устройства.
Дело в том что у меня программно реализованы часы реального
времени.. и есть данные которые обновляются много раз в
секунду и имеют накопительный характер. Важность этих
данных велика и хотелось бы их сохранять в EEPROM при
отключении питания. Сохранять их их периодически а не при
выключении.. то ресурса EEPROM хватит на сутки.. а устройство
должно работать без прерывания месяцами.
Может кто решал похожую задачу или знает её решение
стандартными средствами...
Устройство питается от 12В с преобразователем напряжения до
5В при помощи LM2575. Из потребляющих элементов - PIC18F452 и LCD
дисплей с подсветкой на диодах.
Спасибо
Re: Как сохранить данные в EEPROM при выключении PIC18F
1. Использовать энергонезависимую память не EEPROM, а FRAM (смотри у Ramtron).
Циклов чтения/записи у FRAM ~10^12. Таких ресурсов хватает?
2. Усовершенствовать блок питания: иметь схему анализа пропадания питания и некий
запаз энергии для сохранения данных в EEPROM.
> Добрый день,
> возник вопрос о сохранинии данных при падении напряжении
> или выключении устройства.
> Дело в том что у меня программно реализованы часы реального
> времени.. и есть данные которые обновляются много раз в
> секунду и имеют накопительный характер. Важность этих
> данных велика и хотелось бы их сохранять в EEPROM при
> отключении питания. Сохранять их их периодически а не при
> выключении.. то ресурса EEPROM хватит на сутки.. а устройство
> должно работать без прерывания месяцами.
>
> Может кто решал похожую задачу или знает её решение
> стандартными средствами...
> Устройство питается от 12В с преобразователем напряжения до
> 5В при помощи LM2575. Из потребляющих элементов - PIC18F452 и
> LCD дисплей с подсветкой на диодах.
вы же задачу м сформулировали.
у вашего проца (18F452) есть прямо специальный модуль для этого -LVD (Low Voltage Detect) - это
компаратор, заведете его вход (через делитель) на ваши 12 Вольт, и при каком-то пороге начинайте скидывать
свои данные. Вполне работоспособная схема...
Re: Как сохранить данные в EEPROM при выключении PIC18F
Имеется ввиду, что если сохранять их каждый раз при
изменении или хотябы 1 раз в секунду.. то 100000 записей
исчерпается через 27 часов.
Поэтому хотелось бы их сохранять их только при неожиданном
выключении
Re: Как сохранить данные в EEPROM при выключении PIC18F
Да, действительно данные меняются до 100 раз в секунду..
в общем то это накопительный счётчик..
Можно было бы конечно сделать меньше точность и сохранять
только старшую часть тем самым понизить точность... но
сделав сохранения 1 раз в несколько секунд или минут...
Но проблема с ресурсом всё равно остаётся.
Да именно об этом я думал...
механизм BOD был описан ранее в конфе.. но он не работает...
во время BOR ресета ничего в EEPROM записать нельзя..
А про механизм LVD, я читал... но нигде не нашел временного
интервала доступного после прерывания и до момента когда
записать в EEPROM уже невозможно.
Поэтому второй вопрос...
Есть ли опыт реального решения такой задачи через LVD?
Что нужно делать во время прерывания?... отключать все ноги
и потом писать... или сразу писать в EEPROM? Хватит ли времени
записать 20 байт данных?
Так же я специально написал про LCD, подсветка которого
потребляет около 50-100мА, в принципе подсветка отключается
программно.
Выходной конденсатор преобразователя напряжения 220uF
> Да именно об этом я думал...
> механизм BOD был описан ранее в конфе.. но он не работает...
> во время BOR ресета ничего в EEPROM записать нельзя..
>
> А про механизм LVD, я читал... но нигде не нашел временного
> интервала доступного после прерывания и до момента когда
> записать в EEPROM уже невозможно.
да какой угодно. Настройте LVD на 10 Вольт на входе (если например, точно знаете, что такой уровень - уже
кранты),
> Поэтому второй вопрос...
> Есть ли опыт реального решения такой задачи через LVD?
да
> Что нужно делать во время прерывания?... отключать все ноги
> и потом писать... или сразу писать в EEPROM? Хватит ли времени
> записать 20 байт данных?
конечно, хватит
там вопрос другой возникнет, ну записали вы данные, а процессор еще крутится, питание есть. А вдруг оно
возрастать начнет?
поэтому после записи можно выдержать большую паузу (достаточную, чтобы питание как бы пропало полностью),
после которой процессор можно перезагрузить (в 18 пиках есть команда ресет, или можно перестать сбрасывать
WDT)
> Так же я специально написал про LCD, подсветка которого
> потребляет около 50-100мА, в принципе подсветка отключается
> программно.
Ну если все так сложно - тогда батарейка (резерв).
Когда сетевое питание пропадает - от батарейки можно сохранить данные и
выключиться (чтоб её не сажать).
Если выключать питание не каждую секунду, то литиевой, мне кажется, хватит
вполне и надолго.
Я не сказал что меня абсолютно не устраивает вариант с FRAM
но есть несколько но.
1) Плата уже разведена и полностью собрана.. переделывать её
на данном этапе просто нехочется...
2) FRAM будет как внешнее устройство и будет медленнее чем
память PIC, таккак работа со счётчиками ведется из
прерываний для высокой точности. то данные придется
буферезировать и записывать не все изменения, а только с
какимто периодом.
3) хотелось бы сделать стандартным способом если PIC
позволит.
А припропадании напряжения питания? Самый "безболезненный" вариант притаком раскладе (где нет
возможности реализовать резервное питание типа литиевой батарейки, ИМХО - ионистор.
2Newbie25 А, кстати - почему бы и не прицепить к устройству литиевую батареечку 3V и выделить одну
ногу для контроля основного питания + LVD?
"Ignoramus et ignorabimus..."
(Не знаем и не будем знать...)
> А припропадании напряжения питания? Самый "безболезненный"
> вариант притаком раскладе (где нет
> возможности реализовать резервное питание типа литиевой
> батарейки, ИМХО - ионистор.
>
> 2Newbie25 А, кстати - почему бы и не прицепить к устройству
> литиевую батареечку 3V и выделить одну
> ногу для контроля основного питания + LVD?
да там пока совсем не пропало - миллисекунды - хватает и кондюка
Ну, мож и так. Но это смотря как схема прибора организована - ежели МК запитать, скажем, через диод
(отделить его от остальной схемы) и в эту же цепь повесить хороший конденсатор, тады - да, можно и
так. А ежели там схема ещё хавает немеряно (светодиодики там всякие, подсветки и прочая...) то боюсь
просто кондёра не хватит. ;)
"Ignoramus et ignorabimus..."
(Не знаем и не будем знать...)
>
> Обычно делаем так (пиво за вами :)
>
> 1. При изменении данных (пере)запускается таймер (допустим на
> 10 сек).
> всегда будет хранить последние данные.
да какие там последние данные...
они у него меняются 100 раз в секунду
очень правильное решение - сохранять в момент пропадания питания.
Мне не так важно сохранять 100 раз в секунду...
но даже сохранение 1 раз в 10 секунд израсходует ресурс
записи 100 тыс за 12 дней. Т.е. вариант с временными
интервалами не подходит...
Сама идея разработки такова..
Сделать бортовой компьютер с расходомером как моментальным
так и кумулятивным..
принцип:
устройство снимает временные интервалы открытия и закрытия
форсунок для инжектора и суммирует время открытой форсунки.
т.к. пропускная способность форсунки в среднем постоянна.
расход топлива определяется временем открытия форсунки.. т.
е. если к примеру форсунка была открыта 300 секунд то было
израсходаванно 1л топлива. Тем самым можно считать точное
кол-во топлива в баке зная сколько было при заправке и
сколько было израсходаванно.
Так вот изза того что суммарное время накопительное а
момент сброса неопределён.. хотелось бы иметь схему
сохранения данных при отключении компьютера..
предпологается компактность устройства.
в данный момент даже при питании от компьютерного блока
питания (+12) схема сбрасывается иногда. в среднем раз в 4-5
часов (буду дальше разбиратся).
Сам я не очень опытен. это моё хобби, в принципе это первый
мой опыт травления платы и программирования PIC, но пока всё
получается
В автомобиле всегда под рукой бааальшая батарейка.
И когда отключают эту батарейку, в этот момент двигатель обычно не
работает.
NSS скромно молчит, а с его проекта можно срисовать
// Включить и настроить монитор питания 2,77-3,01V
Почему 2.77 - 3.01V Не слишком ли это мало?
Помоему рабочее напряжение PIC18F > 4.2V
Т.е. LVD сработает когда PIC уже не сможет работать.
Наверное я попробую пойти по такому пути.. решить через LVD
> // Включить и настроить монитор питания 2,77-3,01V
> Почему 2.77 - 3.01V Не слишком ли это мало?
> Помоему рабочее напряжение PIC18F > 4.2V
> Т.е. LVD сработает когда PIC уже не сможет работать.
>
> Наверное я попробую пойти по такому пути.. решить через LVD
да не напрямую же вход LVD на питание, а через делитель!
Ведь это обычный компаратор
А зачем мне внешний вход LVD?
Я думал внутренний использовать, когда напряжение Vdd упадет
ниже 4.7V и будет падать.. значит пора сохранятся, по крайней
мере есть время пока оно не упадёт до 4.2V.
А вы предлогаете мне запитать LVDIN через делитель от 12В
которые до преобразователя напряжения в 5В. Правильно?
> А зачем мне внешний вход LVD?
> Я думал внутренний использовать, когда напряжение Vdd упадет
> ниже 4.7V и будет падать.. значит пора сохранятся, по крайней
> мере есть время пока оно не упадёт до 4.2V.
>
> А вы предлогаете мне запитать LVDIN через делитель от 12В
> которые до преобразователя напряжения в 5В. Правильно?
да, и начать порцедуру сохранения, когда наружное упадет, скажем, с 12 до 7, явно - тенденция.
А когда Vdd 4.5 Вольта уже, наверное, будет и поздно..., там времена действительно десятки и сотни
миллисекунд
> // Включить и настроить монитор питания 2,77-3,01V
> Почему 2.77 - 3.01V Не слишком ли это мало?
> Помоему рабочее напряжение PIC18F > 4.2V
> Т.е. LVD сработает когда PIC уже не сможет работать.
Запас энергии держать на конденсаторе до стабилизатора.
Там его и отслеживать.
Все дополнительные нагрузки программно отключаемы.
После записи в эпромину можно зациклить программу на слежение за первичным источником.
Если использовать слип с пробуждением от WDT то можно без перезагрузки вытягивать провалы
питания десятков секунд даже при небольшом конденсаторе.
не вижу разницы какой конеднсатор увеличивать
Просто подрукой был кондер на 10В.. его только на выходе
повесить можно.
к томуже как мне кажется преобразователь напряжения будет
работать и выдавать номинальное напряжение 5В вплоть до
разряда конденсатора с 14В до 7В. Насколько я помню
напряжение на конденсаторе падает по экспоненте.. так что с
момента 7В до полного разряда будет очень мало времени.
> не вижу разницы какой конеднсатор увеличивать
> Просто подрукой был кондер на 10В.. его только на выходе
> повесить можно.
>
> к томуже как мне кажется преобразователь напряжения будет
> работать и выдавать номинальное напряжение 5В вплоть до
> разряда конденсатора с 14В до 7В. Насколько я помню
> напряжение на конденсаторе падает по экспоненте.. так что с
> момента 7В до полного разряда будет очень мало времени.
>
> Если я ошибаюсь.. разъясните.
>
Запасённая энергия (C*U^2)/2 Не С в квадрате, а U. Проверка пропадания напряжения должна
быть на входе стабилизатора, а не на выходе. Это даст больший запас по времени. Разряд кондёра
I=C*dU/dt, т.е. собственно разряд зависит от потребления. При одинаковом потреблении с выхода
LM25xx разряд будет происходить с нарастающей скоростью, пока стабилизатор ещё может
стабилизировать.
Всё правильно... если делать проверку падения напряжения
как писал ранее Greg на входе в устройство.. т.е. еще до
стабилизатора.
Но у меня уже всё готово и решить проблему хотел
минимальными издержками.
Т.е. я не хотел освобождать ногу RA6, для того чтобы завести
внешний LVDIN с делителя питания до стабилизатора. Нужно было
бы модифицировать плату.
В случае только программного решения. Т.е. использовать VDD
для сравнения - лучше увеличивать конденсатор после
стабилизатора.
Re: наоборот же
Автор: back (---.kopideja.lv)
Дата: 18/01/2006 20:01
Если все готово так и вопросов нет, работает и ладно.
А если вопросы есть - значит неготово.
Наделал ошибок - исправляй.
У меня схемотехника во время написания софта много раз меняется и считаю это нормальным.
1. Разрешить прерывание LVD при определенном напряжении.
2. Если напряжение снижается до указанного порога, вызывается процедура обработки
этого прерывания, в которой и сохранять все значения.
Никуда ничего подключать не нужно. Все прекрасно работает
У меня при емкости конденсатора фильтра в БП 500 мкф успевает записаться до 40-50 байт