реклама на сайте
подробности

 
 
23 страниц V  < 1 2 3 4 5 > »   
Closed TopicStart new topic
> Как распознать кратковременное выключение на Tiny13, Управление режимами фонарика кнопкой питания
VladislavS
сообщение Jan 4 2010, 14:43
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата
Тинька, конечно, заметно не сможет "просадить". Но если включить светодиоды (фонарь же?), то "просадка" батареи может быть существенной. АЦП тиньки должно ее определить....

Цитата
Кстати, да. Интересно, как схема ведет себя при работе от сетевого БП, который не проседает?


Светодиод, конечно же, просаживает. Я сейчас играюсь с двумя диодами - первый 1A кушает, а второй вообще до 2.8А.
Но сам драйвер работает как задумано и без диода. И от источника пиитания тоже. Так что, версия с отслеживанием напряжения на акб на 99% ошибочна. Думаю там просто защита акб от переразряда организована.

Цитата
Уверены насчет выделенного слова? А то может всегда помнит? Тогда достаточно при подаче питания выбирать следующий режим. Номер его, естественно, хранить в EEPROM.

Не, именно ПОМНИТ. Короткое нажатие - смена режима, длительное выключение - нет смены режима.

Цитата
Я делал такую потеху основываясь на битах BORF и PORF регистра MCUSR.
Если PORF - берем из епрома режим и работаем
Если только BORF - берем из епрома режим инкрементируем записываем и работаем.

До какого значение опускалось питание при этом?

Цитата
Кстати, Автор, Вы опять про BOD и т.п., а если все поотключать, в т.ч. АЦП и компаратор чтоб внутрений ИОН тоже выключился - то потремление становится микроамперы, что возможно и позволит выиграть нужные пару секунд.


Я же писал, что мне удалось проспать 4 мс до наступления BOR в то время как c оригинальной прошивкой всего 320 мкс до BOR. Раздел даташита "Minimizing Power Consumption" могу уже наизусть цитировать. Отключал всё что там написано. Да, отключение BOD увеличивает время сна, но не в требуемые 250 раз. Просто с включенным BOD проще замерять время по характерному перелому осциллограммы на 1.8 В.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jan 4 2010, 16:35
Сообщение #32





Guests






Цитата
Светодиод, конечно же, просаживает... Так что, версия с отслеживанием напряжения на акб на 99% ошибочна.

Да, не ищите Вы "китайское решение". smile.gif Вполне возможно, оно настолько "кривое", что его трудно будет угадать... Сделайте свое. Если не хотите зависеть от прихотей источника, то я бы рекомендовал вариант, предлагаемый rx3apf:
Цитата
А сам бы я попробовал именно с отдельным (для порядка - с последовательным токоограничивающим резистором), подключив его на какую-нибудь ногу ADC. При включении - измерить, что на нем, потом включить и оставить под напряжением. 0.1 uF и параллельно 10 MOhm для утечки. Ну да, при выключении он разрядится через защитный диод входа, но не ниже 0.6V, а дальше - через резистор. До единиц секунд можно поймать, я полагаю (только вот керамика очень уж от температуры плавает...).

Могу только добавить, что сопротивление входов МК, обычно, порядка гигаом, емкость порядка пикофарад. Соорудить RC-цепочку с нужной постоянной времени, добавив небольшую емкость - совсем не сложно.
P.S. А может и добавлять ничего не придется. Поробуйте ацп-ировать значение на свободном входе АЦП, которое имеется, непосредственно, при включении питания. Естественно, до выключения на нем нужно постоянно поддерживать высокий уровень...
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jan 4 2010, 17:14
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(VladislavS @ Jan 3 2010, 18:32) *
Попробовал неинициализированную переменную проверять при старте. Хранится в памяти где-то 75 мс после выключения питания. После этого принимает произвольное значение, так как проверку ни на 0, ни на FF при старте не проходит. Маловато будет...

Что-то маловато 75 mS. Это все биты или только некоторые сбрасываются?
Давным-давно делал защиту от копирования на том принципе, что ОЗУ при включении всегда похожее состояние принимает. Именно похожее, а не одинаковое. Так у меня как-раз единицы секунд проходили от выключения до сброса в это состояние. Приходилось различать ситуацию, когда простото ненадолго выключили, и из-за этого ОЗУ в нормальное состояние не успело прийти.
А тут наоборот, можно на этом принципе время выключенного состояния оценить...
Например так:
1. Выделяем и в ОЗУ и в EEPROM по две 8-ми байтных переменных. 1-ю пару назовём ConstR (ОЗУ) и ConstE (EEPROM), а 2-ю соответственно VarR и VarE.
2. При запуске побитно сравниваем ConstR с ConstE и VarR с VarE. Считаем кол-во отличающихся бит. ConstN и VarN соответственно.
3. Если ConstN > 0.8*VarN, то {времени от выключения прошло много; ConstE=ConstR; VarE=VarR; VarR=!VarR; }
иначе{времени от выключения прошло мало; ConstE=ConstR; VarR=!VarE;}

Как алгоритм?
Go to the top of the page
 
+Quote Post
stells
сообщение Jan 4 2010, 17:54
Сообщение #34


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(VladislavS @ Jan 3 2010, 09:44) *
В стремлении к совершенству полез программировать и пока не могу понять КАК они детектируют кратковременное отключение питания. Осциллографом вижу, что питания от конденсатора до BOD хватает где-то на 4 мс как бы я не усыплял контроллер. Это на 3 порядка меньше требуемого значения.

типовое время записи в EEPROM для tiny13 - 3,4мс. в чем вопрос? с кнопки сигнал на компаратор, с конденсатора за диодом - питание контроллера, по прерыванию от компаратора можно менять режим. откуда 3 порядка у Вас появились?
ну или непрерывное АЦ-преобразование, раз компаратор не используется

Сообщение отредактировал stells - Jan 4 2010, 18:02
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jan 4 2010, 22:26
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата
типовое время записи в EEPROM для tiny13 - 3,4мс. в чем вопрос?

Вопрос в том ЗАЧЕМ и ЧТО надо писать в EEPROM при пропадании питания? Что мне это даст?

galjoen, спасибо, попробую завтра так сделать. А на каком микроконтроллере и с какой схемой питания так делали?

Цитата
Да, не ищите Вы "китайское решение". Вполне возможно, оно настолько "кривое", что его трудно будет угадать... Сделайте свое.

Собственно я и ищу своё. Совпадёт ли оно в конце концов с "китайским" всё равно узнать не представляется возможным - оригинальная прошивка защищена. Единственное ограничение - схема остаётся такой какая она есть.

Поймите меня правильно. Если бы вопрос стоял в переделке нескольких моих фонариков, то я бы уже давно поставил электролит 100 мкФ, который позволил бы находиться в режиме Power Down нужное время и с мыслью "зато всё сделано правильно" не стал бы поднимать вопрос. Только я думаю, что люди, обитающие на данном форуме даже во время новогодних праздников, не только ради денег рисуют схемы и пишут программы. Я уже несколько лет на AVR ничего не делал - всё на молодых специалистов и студентов скинул. А тут зацепил меня этот китайский контроллер.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jan 5 2010, 01:35
Сообщение #36





Guests






Цитата
Единственное ограничение - схема остаётся такой какая она есть.

А можно попросить схему в студию? Желательно с номиналами. А то не совсем ясно, что обсуждаем.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jan 5 2010, 07:22
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Я в первом сообщении писал про схему. Питание от литиевого акб 3.7-4.2В. Контроллер запитан через диод и конденсатор. Диод обычный - падает на нём 0.65 В. Номинал конденсатора не измерял, но по цвету похож на 0.1 - 1 мкф. С резистивного делителя VCC->10к->3k->GND подано напряжение на ADC1. PORTB1 используеся для управления стабилизаторами тока AMC7135.

Go to the top of the page
 
+Quote Post
alevnew
сообщение Jan 5 2010, 08:35
Сообщение #38


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775



А может все проще - питание на проц всегда подается?
А с кнопки идет на просто на вход ?
Думаю, если проц спит больше всего времени в выключенном режиме, то не сильно нагружает аккумуляторы.

Или все совершенно точно ?


А если вот такая бредовая идея: к примеру после включения неинициализированное ОЗУ с высокой долей вероятности содержит в основном нули (или единицы, не суть важно).
Проц при включении считает кол-во единичных битов в озу и примерно оценивает время, сколько был проц выключен. Чем больше нулей, тем больше было время выключения. А после подсчета снова заполняет ОЗУ единичками.

Сообщение отредактировал alevnew - Jan 5 2010, 08:36
Go to the top of the page
 
+Quote Post
stells
сообщение Jan 5 2010, 08:56
Сообщение #39


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(@Ark @ Jan 4 2010, 19:35) *
Поробуйте ацп-ировать значение на свободном входе АЦП, которое имеется, непосредственно, при включении питания. Естественно, до выключения на нем нужно постоянно поддерживать высокий уровень...

подтяжкой поддерживать? попробовал на меге8 - за 10мкс напряжение падает до 0. если только подтяжку выключать перед отключением питания? но все-равно при Rвх=100МОм, Cвх=10пФ получатся миллисекунды
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jan 5 2010, 09:02
Сообщение #40


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(VladislavS @ Jan 5 2010, 01:26) *
А на каком микроконтроллере и с какой схемой питания так делали?

Делал на разных, начиная с 1816ВЕ35. Когда было внешнее ОЗУ - делал привязку к нему. Работало всегда. И на советских микроконтроллерах_с_внутренним_статическим_ОЗУ/внешних_микросхемах_статического_ОЗУ и на импортных. Когда была возможность использовал для этого больше байт ОЗУ. Часто, все неиспользуемые в программе байты ОЗУ, под это дело применял. Т.к. с используемыми, при недолгом выключении (единицы секунд), этот фокус не проходил. С динамическим ОЗУ не пробовал, но думаю, что с ним тоже будет работать.

Если заработает, то с вас переделанный фонарик smile.gif

alevnew, по опыту могу сказать, что нулей и едениц там примерно одинаково. Разные микросхемы ОЗУ из одной партии могут вести себя по разному. В принципе можно считать кол-во едениц/нулей, но без записи в EEPROM всё равно не обойтись. А в данном приложении EEPROM всё равно с избытком, а вот с ОЗУ м.б. напряг.
Go to the top of the page
 
+Quote Post
stells
сообщение Jan 5 2010, 09:06
Сообщение #41


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(alevnew @ Jan 5 2010, 11:35) *
А если вот такая бредовая идея: к примеру после включения неинициализированное ОЗУ с высокой долей вероятности содержит в основном нули (или единицы, не суть важно).
Проц при включении считает кол-во единичных битов в озу и примерно оценивает время, сколько был проц выключен. Чем больше нулей, тем больше было время выключения. А после подсчета снова заполняет ОЗУ единичками.

тоже попробовал. одна и та же ячейка у меня после подачи питания всегда (ну или может почти всегда) содержит значение 00001110. какое время она будет хранить другое (модифицированное) значение? мне кажется этот вопрос уже поднимался

там точно конденсатор на питании контроллера?

Сообщение отредактировал stells - Jan 5 2010, 10:02
Go to the top of the page
 
+Quote Post
pt200
сообщение Jan 5 2010, 11:34
Сообщение #42


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 19-05-09
Пользователь №: 49 263



Цитата(VladislavS @ Jan 4 2010, 18:43) *
Цитата
Я делал такую потеху основываясь на битах BORF и PORF регистра MCUSR.
Если PORF - берем из епрома режим и работаем
Если только BORF - берем из епрома режим инкрементируем записываем и работаем.

До какого значение опускалось питание при этом?

Не мерял, но работает.

“меньше знаешь – крепче спишь” smile.gif

P.S. разломал недавно современную видюху на кондючки и был сильно удивлен "килофарадными" керамическими кондючками.
Go to the top of the page
 
+Quote Post
ae_
сообщение Jan 5 2010, 14:46
Сообщение #43


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(pt200 @ Jan 5 2010, 19:34) *
...
P.S. разломал недавно современную видюху на кондючки и был сильно удивлен "килофарадными" керамическими кондючками.
1000 Ф конденсаторы на видео карте? может "кило-микрофарадные"="миллифарадные", т.е. 1000 мкФ ёмкость ?
хотя мне не встречалась керамика больше десятков мкФ, а тут килофарада. значит я сплю крепче smile.gif))
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jan 5 2010, 17:48
Сообщение #44





Guests






Цитата
Я в первом сообщении писал про схему...

Простите, но я просил не описание схемы (которое Вы дали, аж два раза), и не ее топологию. А точную, восстановленую по топологии, электрическую схему с номиналами. Только тогда можно что-то конкретно обсуждать, не занимаясь догадками...
P.S. Кстати, Вы уверены, что там Тинька стоит? Вполне может быть и PIC12, например. Или еще что-то...
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jan 5 2010, 18:25
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(@Ark @ Jan 5 2010, 20:48) *
P.S. Кстати, Вы уверены, что там Тинька стоит? Вполне может быть и PIC12, например. Или еще что-то...

Если топикстартер подключался программатором, стирал исходную программу, заливал свою и его программа работала, то я таки думаю, что он правильно идентифицировал микроконтроллер...
Go to the top of the page
 
+Quote Post

23 страниц V  < 1 2 3 4 5 > » 
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016