Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Записване в EEPROM по време на спиране на захранването
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=4338
Страница 1 от 1

Автор:  i_dachev [ Сря Юни 13, 2007 9:15 am ]
Заглавие:  Записване в EEPROM по време на спиране на захранването

Здравейте,

Проблема е следния как да направя при спиране на захранването
да се запише част от RAM паметта на PIC16F877 в EEPROM-a.

Моето решение е при спиране на захранването да подам логическа единица
на едно краче, с което да започна да записвам в EEPROM-a.
Като през това време държа захранването с един по-голям
кондензатор за да му стигне за записа.

Това решение изисква доста разправии с захранването около PIC-a.
Както и отделянето му от цялата друга периферия.
Също едно реле в обратен режим, че да се държи включено докато
кондензатора не се разреди.

Идеята ми е ако има начин да спестя тези неща.

Автор:  Predator_MF [ Сря Юни 13, 2007 9:22 am ]
Заглавие: 

Правил съм подобно нещо, с 877A, нямам спомен как точно реших проблема там, беше софтуерно, но в следващата ревизия на устройството сложих 18F452 (има същия корпус), в него има Low Voltage Detect схема с регулируем threshold, давам ти го само като идея

Автор:  i_dachev [ Сря Юни 13, 2007 9:58 am ]
Заглавие: 

А дали ще ми стигне времето да запиша 16 байта в EEPROM-a преди BrownOutReset?
Или ако си го правя специално за PIC16F877 аз ще си регулирам времето.

Автор:  Цецо [ Сря Юни 13, 2007 10:59 am ]
Заглавие: 

Ами относно дали ще ти стигне времето - въпрос на сметки и подбор на компоненти....

1. Времето за запис е дадено в дейта шита.
2. Консумцията на помпата по време на запис също е дадена там. Не забравяй да прибавиш и собствената консумация на чипа, както и всичко де що консумира около него.
3. Така можеш да си сметнеш горе долу колко енергия ти трябва за да изършиш записа.
4. Като си знаеш кондензатора(капацитета му), до колко волта е зареден и до колко може да падне за да е работоспособен все още пика (това също го има в спецификацията), можеш да си сметнеш дали ще "удържи" и ако не с колко трябва да го вдигнеш.

Не се доверявай на принципа на проба и грешка. Сметни най-тежките условия и го разчети по тях. Повечето пикове работят и на 2В, обаче в спецификацията пише друго(а там е истината). Тъй че сметка му е майката.

Като цяло, 16 байта са си доста нещо, тъй че може би ще да е голям кондензатора дето ще храни всичко туй.

Много си зависи и как отпада захранването - с скок или плавно (ако там също има голям капацитет).

Вариант е supercap, в комет ги има и не са кой знае колко скъпи.

Автор:  Wise [ Сря Юни 13, 2007 11:31 am ]
Заглавие: 

Принципно, ако имаш свободни ресурси, може да запуснеш таймер и да го ресетираш
от входа на захранването на 20 милисекунди. Така, още при първата липсваща синусоида
ще знаеш, че трябва да спасяваш.

Автор:  i_dachev [ Сря Юни 13, 2007 11:41 am ]
Заглавие: 

Благодаря за идеите за сега май ще си остане с кондензатор и флагче.
За това със supercab не се бях сетил аз ползвам обикновени и не съм имал
проблеми, но цялата реализация не ми харесва, но май няма и друг начин.

Wise написа:
Принципно, ако имаш свободни ресурси, може да запуснеш таймер и да го ресетираш
от входа на захранването на 20 милисекунди. Така, още при първата липсваща синусоида
ще знаеш, че трябва да спасяваш.


Можели да обясниш малко повече това с таймера?

Автор:  Zeus [ Сря Юни 13, 2007 12:24 pm ]
Заглавие: 

Ако нямаш навързани големи консуматори към портовете на ПИК-а, можеш само него да го захраниш през резистор, и кондензатора да го сложиш след резитора. Така като спре захранването, кондензатора по-дълго ще ти захранва чипа. Трябва да вземеш предвид обаче закъснението за пускане на ПИК-а след включване на захранването (Пак въпрос на сметки)

Автор:  Nikola Kirov [ Сря Юни 13, 2007 1:19 pm ]
Заглавие: 

Има друга тема в форума в която има повече информация по въпроса. Реконструктора беше задал подобен въпрос в академия. Виж там.

Автор:  Wise [ Сря Юни 13, 2007 1:29 pm ]
Заглавие: 

Ами то няма много за обяснение - таймерът ти генерира прекъсване на примерно 30 или 50 милисекунди.
От захранването преди греца вземаш сигнал - (примерно през диод и транзистор) и го вкарваш на външно
прекъсване. Когато настъпи - презареждаш таймера. Когато таймерът прекъсне - значи липсва
захранване. Но все още се предполага, че напрежението на кондензатора не се е променило.
Т.е. знаем веднага, че предстои отпадане на напрежението и имаме повече време за запис.

Автор:  i_dachev [ Сря Юни 13, 2007 1:55 pm ]
Заглавие: 

Nikola Kirov написа:
Има друга тема в форума в която има повече информация по въпроса. Реконструктора беше задал подобен въпрос в академия. Виж там.


Да намерих я темата и доста са разнищили точно по същия проблем.
При мен ще е по лесно защото записвам много малко 16 байта и в EEPROM-a
на процесора, но явно друго решение няма.

http://mcu-bg.com/mcu_site/viewtopic.php?t=3272

Автор:  i_dachev [ Сря Юни 13, 2007 2:00 pm ]
Заглавие: 

Wise написа:
Ами то няма много за обяснение - таймерът ти генерира прекъсване на примерно 30 или 50 милисекунди.
От захранването преди греца вземаш сигнал - (примерно през диод и транзистор) и го вкарваш на външно
прекъсване. Когато настъпи - презареждаш таймера. Когато таймерът прекъсне - значи липсва
захранване. Но все още се предполага, че напрежението на кондензатора не се е променило.
Т.е. знаем веднага, че предстои отпадане на напрежението и имаме повече време за запис.


Сега разбрах мерси. Наистина решението за моя проблем е едно просто въпроса е
как най-добре да се реализира. Явно се свежда до следните проблеми:

1. Как да детектна реално отпадане на захранването възможно най-рано.
2. Как най-добре да си отделя консумацията, че да имам достатъчен запас за запис.
3. Какъв източник на енергия да ползвам по време на запис кондензатор, супер кондензатор, батерия

...

Ползване на друго решение с FRAM, MRAM и други нови технологии...

Автор:  sthx [ Сря Юни 13, 2007 10:10 pm ]
Заглавие: 

При регистриране на отпадане на напрежението можеш да изключиш всички консуматори на ток - светодиоди, релета и други.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/