|
|
  |
Как распознать кратковременное выключение на Tiny13, Управление режимами фонарика кнопкой питания |
|
|
|
Jan 4 2010, 14:43
|
Местный
  
Группа: Свой
Сообщений: 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 В.
|
|
|
|
Guest_@Ark_*
|
Jan 4 2010, 16:35
|
Guests

|
Цитата Светодиод, конечно же, просаживает... Так что, версия с отслеживанием напряжения на акб на 99% ошибочна. Да, не ищите Вы "китайское решение".  Вполне возможно, оно настолько "кривое", что его трудно будет угадать... Сделайте свое. Если не хотите зависеть от прихотей источника, то я бы рекомендовал вариант, предлагаемый rx3apf: Цитата А сам бы я попробовал именно с отдельным (для порядка - с последовательным токоограничивающим резистором), подключив его на какую-нибудь ногу ADC. При включении - измерить, что на нем, потом включить и оставить под напряжением. 0.1 uF и параллельно 10 MOhm для утечки. Ну да, при выключении он разрядится через защитный диод входа, но не ниже 0.6V, а дальше - через резистор. До единиц секунд можно поймать, я полагаю (только вот керамика очень уж от температуры плавает...). Могу только добавить, что сопротивление входов МК, обычно, порядка гигаом, емкость порядка пикофарад. Соорудить RC-цепочку с нужной постоянной времени, добавив небольшую емкость - совсем не сложно. P.S. А может и добавлять ничего не придется. Поробуйте ацп-ировать значение на свободном входе АЦП, которое имеется, непосредственно, при включении питания. Естественно, до выключения на нем нужно постоянно поддерживать высокий уровень...
|
|
|
|
|
Jan 4 2010, 17:14
|
Знающий
   
Группа: Свой
Сообщений: 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;} Как алгоритм?
|
|
|
|
|
Jan 4 2010, 22:26
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата типовое время записи в EEPROM для tiny13 - 3,4мс. в чем вопрос? Вопрос в том ЗАЧЕМ и ЧТО надо писать в EEPROM при пропадании питания? Что мне это даст? galjoen, спасибо, попробую завтра так сделать. А на каком микроконтроллере и с какой схемой питания так делали? Цитата Да, не ищите Вы "китайское решение". Вполне возможно, оно настолько "кривое", что его трудно будет угадать... Сделайте свое. Собственно я и ищу своё. Совпадёт ли оно в конце концов с "китайским" всё равно узнать не представляется возможным - оригинальная прошивка защищена. Единственное ограничение - схема остаётся такой какая она есть. Поймите меня правильно. Если бы вопрос стоял в переделке нескольких моих фонариков, то я бы уже давно поставил электролит 100 мкФ, который позволил бы находиться в режиме Power Down нужное время и с мыслью "зато всё сделано правильно" не стал бы поднимать вопрос. Только я думаю, что люди, обитающие на данном форуме даже во время новогодних праздников, не только ради денег рисуют схемы и пишут программы. Я уже несколько лет на AVR ничего не делал - всё на молодых специалистов и студентов скинул. А тут зацепил меня этот китайский контроллер.
|
|
|
|
Guest_@Ark_*
|
Jan 5 2010, 01:35
|
Guests

|
Цитата Единственное ограничение - схема остаётся такой какая она есть. А можно попросить схему в студию? Желательно с номиналами. А то не совсем ясно, что обсуждаем.
|
|
|
|
|
Jan 5 2010, 09:02
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(VladislavS @ Jan 5 2010, 01:26)  А на каком микроконтроллере и с какой схемой питания так делали? Делал на разных, начиная с 1816ВЕ35. Когда было внешнее ОЗУ - делал привязку к нему. Работало всегда. И на советских микроконтроллерах_с_внутренним_статическим_ОЗУ/внешних_микросхемах_статического_ОЗУ и на импортных. Когда была возможность использовал для этого больше байт ОЗУ. Часто, все неиспользуемые в программе байты ОЗУ, под это дело применял. Т.к. с используемыми, при недолгом выключении (единицы секунд), этот фокус не проходил. С динамическим ОЗУ не пробовал, но думаю, что с ним тоже будет работать. Если заработает, то с вас переделанный фонарик alevnew, по опыту могу сказать, что нулей и едениц там примерно одинаково. Разные микросхемы ОЗУ из одной партии могут вести себя по разному. В принципе можно считать кол-во едениц/нулей, но без записи в EEPROM всё равно не обойтись. А в данном приложении EEPROM всё равно с избытком, а вот с ОЗУ м.б. напряг.
|
|
|
|
|
Jan 5 2010, 11:34
|
Участник

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

|
Цитата(VladislavS @ Jan 4 2010, 18:43)  Цитата Я делал такую потеху основываясь на битах BORF и PORF регистра MCUSR. Если PORF - берем из епрома режим и работаем Если только BORF - берем из епрома режим инкрементируем записываем и работаем.
До какого значение опускалось питание при этом? Не мерял, но работает. “меньше знаешь – крепче спишь”  P.S. разломал недавно современную видюху на кондючки и был сильно удивлен "килофарадными" керамическими кондючками.
|
|
|
|
|
Jan 5 2010, 14:46
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(pt200 @ Jan 5 2010, 19:34)  ... P.S. разломал недавно современную видюху на кондючки и был сильно удивлен "килофарадными" керамическими кондючками. 1000 Ф конденсаторы на видео карте? может "кило-микрофарадные"="миллифарадные", т.е. 1000 мкФ ёмкость ? хотя мне не встречалась керамика больше десятков мкФ, а тут килофарада. значит я сплю крепче  ))
|
|
|
|
Guest_@Ark_*
|
Jan 5 2010, 17:48
|
Guests

|
Цитата Я в первом сообщении писал про схему... Простите, но я просил не описание схемы (которое Вы дали, аж два раза), и не ее топологию. А точную, восстановленую по топологии, электрическую схему с номиналами. Только тогда можно что-то конкретно обсуждать, не занимаясь догадками... P.S. Кстати, Вы уверены, что там Тинька стоит? Вполне может быть и PIC12, например. Или еще что-то...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|