|
Как распознать кратковременное выключение на Tiny13, Управление режимами фонарика кнопкой питания |
|
|
|
Jan 3 2010, 07:19
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(VladislavS @ Jan 3 2010, 09:44)  А вот найти какой регистр или флаг после POR и BOR не обнуляется да еще какое-то время сохраняет своё состояние без питания что-то не могу. Коллеги, есть свежие идеи? Попробуйте неинициализируемую переменную и проверяйте ее значение сразу после запуска. Но все же это кривой метод - не возможно предсказать время хранения этой переменной. Оно запросто может и 5 секунд оказаться.
|
|
|
|
|
Jan 3 2010, 09:14
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 10-12-08
Из: Ульяновск
Пользователь №: 42 362

|
Проще при вкл. сразу проверять из еепром режим,запускать нужную функцию,а потом сразу записывать в еепром след. режим и при след. включении режим сменится на др. А АЦП используется только для индикации разряда аккумулятора\батуреек.
Сообщение отредактировал tillman - Jan 3 2010, 09:28
|
|
|
|
|
Jan 3 2010, 11:16
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата Попробуйте неинициализируемую переменную и проверяйте ее значение сразу после запуска. Но все же это кривой метод - не возможно предсказать время хранения этой переменной. Оно запросто может и 5 секунд оказаться. Попробую. Кривой, не кривой, но как-то китайцы это сделали... Цитата Напряжение на резистивном делителе пропадает раньше питания. По этому можно изменить режим, запомнить в EEPROM, и отправиться в powerdown. Или запомнить в оперативной и уснуть до появления прерывания от подачи питания. Энергии в конденсаторе не хватает чтобы проспать столько времени. Так что, хоть сохраняй, хоть не сохраняй - всё одно впереди BOR и POR. Цитата Проще при вкл. сразу проверять из еепром режим,запускать нужную функцию,а потом сразу записывать в еепром след. режим и при след. включении режим сменится на др. Вариант на случай если ничего другого не получится. Но, как я уже писал, китайцы сделали выключение без смены режима. На той плате, на которой я сейчас экспериментирую так и работало - значит МОЖНО и НУЖНО повторить. Цитата А АЦП используется только для индикации разряда аккумулятора\батуреек. Возможно. Цитата Конденсатора 0.1мкф хватит только на 0.5сек, прийдется поставить что-то больше. Схему менять не представляется возможным. Платку китайцы продают готовой и она достаточно миниатюрна - ставится в бошку фонарика. У меня даже столько проспать не получается при том что ухожу в Power Down даже до выключения питания. Вместе с тем, попадаются фонарики у которых до 2-3 секунд в зависимости от температуры можно выключать питание. Не думаю, что можно столько проспать...
|
|
|
|
|
Jan 3 2010, 13:45
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата Я уверен, что китайский подход не позволяет делать все как положено. Это позволяет им делать вполне работоспособную вещь за смешные деньги и продавать её миллионами. Цитата Наверняка SRAM хранит данные какое-то время после выключения питания (чисто конструктивная особенность), а китайцы подметив это решили использовать с целью упрощения схемотехники до смешного. Сейчас попытаюсь проверить эту догадку. И когда я найду что там китайцы заметили и оно заработает, то разрешаю зачморить меня, предать анафеме и т.д. Лишь бы работало, как бы смешно это не было. Из него не стрелять и в космос не запускать.
|
|
|
|
|
Jan 3 2010, 13:56
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(VladislavS @ Jan 3 2010, 09:44)  В стремлении к совершенству полез программировать и пока не могу понять КАК они детектируют кратковременное отключение питания. Осциллографом вижу, что питания от конденсатора до BOD хватает где-то на 4 мс как бы я не усыплял контроллер. 4 ms - это уже в "своем" варианте или в "прототипе" ? Если они не используют BOD, то в "настоящем" power down потребление гораздо меньше... Дурацкий вопрос - а защита включена ? Может, попробовать вычитать, что они там понаписали ? Цитата Коллеги, есть свежие идеи? Я раньше полагал, что используют еще какой-то "вспомогательный" конденсатор. Но сейчас поглядел (правда, не знаю, что конкретно на этой платке стоит - маркировка стерта, а EEPROM внешняя, и на Vcc 10-uF электролит есть), что-то отдельного конденсатора не наблюдаю. А сам бы я попробовал именно с отдельным (для порядка - с последовательным токоограничивающим резистором), подключив его на какую-нибудь ногу ADC. При включении - измерить, что на нем, потом включить и оставить под напряжением. 0.1 uF и параллельно 10 MOhm для утечки. Ну да, при выключении он разрядится через защитный диод входа, но не ниже 0.6V, а дальше - через резистор. До единиц секунд можно поймать, я полагаю (только вот керамика очень уж от температуры плавает...) P.S. А сам я нафиг выдрал эту плату управления, потому как достала она меня этим постоянным переключением режимов и идиотским стробоскопом..
Сообщение отредактировал rx3apf - Jan 3 2010, 13:58
|
|
|
|
|
Jan 3 2010, 14:29
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата 4 ms - это уже в "своем" варианте или в "прототипе" ? Если они не используют BOD, то в "настоящем" power down потребление гораздо меньше... 4мс это мой код. Оригинал 320 мкс и упирается в BOD. Цитата Дурацкий вопрос - а защита включена ? Может, попробовать вычитать, что они там понаписали ? Обижаешь  Цитата P.S. А сам я нафиг выдрал эту плату управления, потому как достала она меня этим постоянным переключением режимов и идиотским стробоскопом.. Да уж очень он яркий, если без режимов использовать. У меня диод CREE XP-G R5 на 1А под 350 люмен по даташиту валит. А есть ведь ещё мощней. Вот стробоскопы и решил выкинуть, да управление ШИМ-мом не очень там сделано.
|
|
|
|
|
Jan 3 2010, 19:59
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 2-01-08
Пользователь №: 33 768

|
Цитата(VladislavS @ Jan 3 2010, 10:44)  Включение следующего режима работы осуществляется кратковременным отключением питания кнопкой. Причем, это "кратковременно" запросто может быть больше секунды. Если выключить на большее время, то после включения режим не меняется (помнится). Не помню чо там в tiny13, но в 2313 был регистр, хранящий тип только что произошедшего ресета (power-on, brown-out, user...). Если контроллер достаточно быстро вырубится по BOD, то возможно внутреннее состояние проживет достаточно долго, чтобы следующий ресет определился как BOR (в даташите где-то был рисунок с уровнями, на которые BOD реагирует). Второй вариант - с тем же регистром, но как-то цепляющийся за постоянную времени RC-цепочки на ноге ресета.
|
|
|
|
|
Jan 4 2010, 00:09
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата Не помню чо там в tiny13, но в 2313 был регистр, хранящий тип только что произошедшего ресета (power-on, brown-out, user...). Если контроллер достаточно быстро вырубится по BOD, то возможно внутреннее состояние проживет достаточно долго, чтобы следующий ресет определился как BOR (в даташите где-то был рисунок с уровнями, на которые BOD реагирует). Может я конечно не умею BOD готовить, но на моей практике не было еще ни одного контроллера, который бы POR без BOR поднимал. Наоборот возможно, но за такое время дело доходит именно до POR. Что-то я уже расстроился. Перебрал почти все регистры аппаратуры - они при ресете зануляются намертво. А SRAM не держит нужное время... Чтож там китайцы нарыли то? Цитата Второй вариант - с тем же регистром, но как-то цепляющийся за постоянную времени RC-цепочки на ноге ресета Нет там ничего. Вся схема это диод с конденсатором на питании и два резистора делителя питания на АЦП. Единственный конденсатор разряжается полностью за единицы миллисекунд.
|
|
|
|
Guest_@Ark_*
|
Jan 4 2010, 02:33
|
Guests

|
Цитата Что-то я уже расстроился. Перебрал почти все регистры аппаратуры - они при ресете зануляются намертво. А SRAM не держит нужное время... Чтож там китайцы нарыли то? IMHO, немного не там ищите... При подключении нагрузки к источнику, напряжение на нем будет заметно "проседать". А при отключении нагрузки - будет медленно восстанавливаться к прежнему уровню...
|
|
|
|
|
Jan 4 2010, 09:44
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата IMHO, немного не там ищите... При подключении нагрузки к источнику, напряжение на нем будет заметно "проседать". А при отключении нагрузки - будет медленно восстанавливаться к прежнему уровню... Я уже думал измерять что-то в окружении. Напряжение на акб как вариант. Только в одном из режимов диод потребляет всего 40 мА. Более того, плата вообще без диода тоже меняет режимы. Я не могу представить как на акб 18650 потребление tiny13 может что-то там "просадить". За идею спасибо. Попробую её подумать  Еще бы приборы, способные это измерить были... С другой стороны, на сколько хватит EEPROM, если в него постоянно писать ADC? А записать его только после выключение всё равно не получится - нет у них даже 1.8 мс, не говоря уже о 2x1.8 мс. Цитата Всеже если все так как описал автор, то я думаю, что решение именно в засыпании при нажатии кнопки с принятием максимальных мер по экономии потребления. Посмотри еще раз осциллограммы. Через 320 мкс они упираются в BOD. Всё, никакой жизни, кроме переходных процессов, в микроконтроллере после этого уже нет. И любое последующее включение пойдет по одному и тому же сценарию. Так что, полюбому надо какой-то побочный эффект искать. Цитата Может конденсатор там на единицы микрофарад и при вылизывании энергопортебления получим нужные секунды хранения в ОЗУ. Да какие там единицы... 0603 керамика. Максимум 1 мкФ и то сомневаюсь. Доберусь до работы - померяю. Одно я понял - вылизывай, не вылизывай проспать столько не получится всё равно. Цитата Чудес не бывает. Может действительно запоминается значение источника сброса. Нужно посмотреть что там есть. Что-то есть точно. И это что-то мне уже спать спокойно не даёт?
|
|
|
|
|
Jan 4 2010, 09:57
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 2-01-08
Пользователь №: 33 768

|
Цитата(@Ark @ Jan 4 2010, 06:33)  IMHO, немного не там ищите... При подключении нагрузки к источнику, напряжение на нем будет заметно "проседать". А при отключении нагрузки - будет медленно восстанавливаться к прежнему уровню...  Кстати, да. Интересно, как схема ведет себя при работе от сетевого БП, который не проседает? С другой стороны, тогда придется постоянно писать в EEPROM текущее значение напряжения, иначе можно не успеть.
|
|
|
|
Guest_@Ark_*
|
Jan 4 2010, 11:03
|
Guests

|
Цитата Я не могу представить как на акб 18650 потребление tiny13 может что-то там "просадить". Тинька, конечно, заметно не сможет "просадить". Но если включить светодиоды (фонарь же?), то "просадка" батареи может быть существенной. АЦП тиньки должно ее определить....
|
|
|
|
|
Jan 4 2010, 13:15
|
Участник

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

|
Емкость конденсатора может быть и больше( нада померять). Я делал такую потеху основываясь на битах BORF и PORF регистра MCUSR. Если PORF - берем из епрома режим и работаем Если только BORF - берем из епрома режим инкрементируем записываем и работаем.
|
|
|
|
|
Jan 4 2010, 13:49
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Цитата Уверены насчет выделенного слова? А то может всегда помнит? Тогда достаточно при подаче питания выбирать следующий режим. Номер его, естественно, хранить в EEPROM. Главный затык как я понял в величине времени отключенного питания при котором происходит смена режима. Т.е. если выключено надолго - режим не меняется, а если на пару секунд то меняется. Вот в этих секундах и затык. Кстати, Автор, Вы опять про BOD и т.п., а если все поотключать, в т.ч. АЦП и компаратор чтоб внутрений ИОН тоже выключился - то потремление становится микроамперы, что возможно и позволит выиграть нужные пару секунд.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
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, например. Или еще что-то...
|
|
|
|
Guest_@Ark_*
|
Jan 5 2010, 18:34
|
Guests

|
Цитата Если топикстартер подключался программатором, стирал исходную программу, заливал свою и его программа работала, то я таки думаю, что он правильно идентифицировал микроконтроллер... Безусловно. Осталось дождаться подтверждения этого факта топикстартером. И опубликования точной схемы, для конструктивного продолжения дискуссии...
|
|
|
|
|
Jan 5 2010, 20:29
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата Безусловно. Осталось дождаться подтверждения этого факта топикстартером. И опубликования точной схемы, для конструктивного продолжения дискуссии... Извини, но рисовать схему я не буду. Из неизвестного там только номинал конденсатора, но его я дома померить не могу - тупо нечем. Все остальное на 200% соответствует моему словеcному описанию. Укол про PIC, будем считать, я пропустил мимо ушей.
|
|
|
|
|
Jan 5 2010, 20:59
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Я все ж подозреваю (на 90%), что дело в сохранении содержимого памяти и после BOR. Пока из приведенных диаграмм вовсе не очевидно поведение напряжения на конденсаторе, поскольку "нуля" не видно (смотреть, само собой, надо по крайней мере 10-мегаомным делителем), как там дальше, за 1.8V ? Для пробы зашунтировать цепь питания у "прототипа" (сотню килоом) - переключение режимов должно бы перестать работать... А емкость вполне можно оценить - или скопом и хоть каким генератором прямоугольника, либо с помощью звуковой карты компьютера.
Сообщение отредактировал rx3apf - Jan 5 2010, 21:01
|
|
|
|
|
Jan 5 2010, 21:43
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата(galjoen @ Jan 4 2010, 20:14)  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;}
Как алгоритм? Не совсем понятна физика процесса. Вот берем мы две ячейки ОЗУ. После включения они с точностью до 6-7 бит стремятся к одному значению. Теперь начинаем одной переменной давать сильное воздействие посредством инвертирования битов, а вторую не трогаем. Чем больше бит совпало в той что "теребили" тем дольше было выключено питание. А вот зачем в процессе участвует ConstR ? Ведь у неё ожидается достаточно стабильное значение ConstN?
|
|
|
|
|
Jan 5 2010, 22:21
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата Я все ж подозреваю (на 90%), что дело в сохранении содержимого памяти и после BOR. Пока из приведенных диаграмм вовсе не очевидно поведение напряжения на конденсаторе, поскольку "нуля" не видно (смотреть, само собой, надо по крайней мере 10-мегаомным делителем), как там дальше, за 1.8V ? Для пробы зашунтировать цепь питания у "прототипа" (сотню килоом) - переключение режимов должно бы перестать работать... А емкость вполне можно оценить - или скопом и хоть каким генератором прямоугольника, либо с помощью звуковой карты компьютера. Там же две диаграммы. На одной из них развернуто на 80 мс после выключения и видно, что через 35 мс напряжение уже упало совсем. Оно ненулевое, но это особенности ключа, через который я подаю импульсы питания для измерений. Если выключать кнопкой, то оно естественно до нуля падает. Ну пусть еще на 5 мс дольше - это погоды не делает. Щуп 10 МОм - тут подвоха не стоит искать. По крайней мере, изменения диаграммы в зависимомсти от программы я вижу хорошо. Точное значение ёмкости, как мне кажется, непринципиально. Видно же, что запитать от неё микроконтроллер на время, соизмеримое со временем размыкания и замыкания кнопки человеком не получается. Изобретать из-за этого измерительный стенд дома не очень хочется. Обещаю, на работе в понедельник измерю - делов то на 1 минуту, когда приборы есть. Дома у меня даже паяльника чтобы 0603 паять нет.
|
|
|
|
|
Jan 5 2010, 22:23
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(VladislavS @ Jan 6 2010, 00:43)  Не совсем понятна физика процесса. Вот берем мы две ячейки ОЗУ. После включения они с точностью до 6-7 бит стремятся к одному значению. Теперь начинаем одной переменной давать сильное воздействие посредством инвертирования битов, а вторую не трогаем. Чем больше бит совпало в той что "теребили" тем дольше было выключено питание. А вот зачем в процессе участвует ConstR ? Ведь у неё ожидается достаточно стабильное значение ConstN? ConstN это база. У разных микросхем, и при разных включениях одной микросхемы, число "плавающих" бит может существенно различатся. Исходим из предположения, что на биты, из которых состоят, ConstR и VarR эти факторы влияют одинаково. Вам же не хочется для каждого фонарика ставить эксперименты с определением именно его значения ConstN. И изменять это число в программе. Вот для самонастройки на конкретный образец и используется ConstR. Алгоритм я несколько упростил. Реально у меня ConstR и VarR являлись разными битами одного байта. Т.е. это были 2 битовые строки, в перемешанном виде размещённые в ОЗУ. Наверно непонятно. Объясню на примере. Если представить ОЗУ как битовую строку, то биты относящиеся к ConstR и VarR размещались случайным (заданным 1 раз при написании программы) образом, например, так: ccvcvvcc cvvvccvc vccvvvcv cvcvccvv и т.д где "c" биты, относящиеся к ConstR, а "v" биты, относящиеся к VarR. Подредактировал из-за описок.
|
|
|
|
Guest_@Ark_*
|
Jan 5 2010, 22:39
|
Guests

|
Цитата Извини, но рисовать схему я не буду. Когда чел. задает вопрос и отказывается представить схему, то разговаривать не о чем ...
|
|
|
|
|
Jan 5 2010, 22:45
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(VladislavS @ Jan 6 2010, 01:21)  Видно же, что запитать от неё микроконтроллер на время, соизмеримое со временем размыкания и замыкания кнопки человеком не получается. Изобретать из-за этого измерительный стенд дома не очень хочется. И все ж предлагаю сделать простейший эксперимент (но именно с "прототипом", т.е. с платой, где прошивка не менялась) - зашунтировать питание сотней килоом. Если работа переключателя при этом не изменилась - то почти наверняка что-то со статистикой переброса битов памяти, непосредственно с питанием не связанной. Если перестало работать - банальное сохранение содержимого... Могу, в принципе, проверить то же самое с обломком моего драйвера, но там наверняка не tiny13 (иначе зачем бы там еще и отдельный EEPROM), а вот логика, скорее всего, похожая...
|
|
|
|
|
Jan 5 2010, 23:01
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата И все ж предлагаю сделать простейший эксперимент (но именно с "прототипом", т.е. с платой, где прошивка не менялась) - зашунтировать питание сотней килоом. В понедельник. Дома нет возможности. Цитата Когда чел. задает вопрос и отказывается представить схему, то разговаривать не о чем ... Когда человек не способен на слух воспринять схему из одной микросхемы, одного диода, одного конденсатора и двух резисторов, то разговаривать действительно не о чем ...
|
|
|
|
Guest_@Ark_*
|
Jan 5 2010, 23:27
|
Guests

|
Цитата Когда человек не способен на слух воспринять схему из одной микросхемы, одного диода, одного конденсатора и двух резисторов, то разговаривать действительно не о чем ... Когда человек не способен точно померить емкости и резисторы в схеме, и при этом задает вопросы, то разговаривать, действительно, не о чем...
|
|
|
|
|
Jan 6 2010, 10:53
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(stells @ Jan 6 2010, 13:30)  так автор несколько раз писал, что питание намного быстрее падает, чем требуется. если вот только содержимое хранится за счет собственной емкости ячеек? Писать-то писал... Просто я _очень_ сомневаюсь, что напряжение спадает до "настоящего" нуля в том случае, когда питается только микроконтроллер. После того, как все провалилось ниже предела работоспособности, потребление должно резко упасть и "остаток" может позволить продержаться содержимому памяти какое-то время. Уж чего проще - зашунтировать питание и посмотреть поведение ? Нет под рукой резистора - ну мультиметром на низких пределах, в конце концов...
|
|
|
|
Guest_@Ark_*
|
Jan 6 2010, 11:02
|
Guests

|
Цитата @Ark, номиналы резисторов я указал дважды. Резисторы это такие маленькие черненикие детальки прямоугольной формы - номиналы написаны прямо на них.. Конденнсатор мой опыт позволяет идентифицировать как 0.1-1 мкФ, а померить без паяльника дома просто нечем. Если не умеешь читать, то не встревай, пожалуйста, со своими PIC-ми. А тип МК тоже "на глаз" определили? По цвету корпуса?
|
|
|
|
|
Jan 6 2010, 11:18
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(@Ark @ Jan 6 2010, 14:02)  А тип МК тоже "на глаз" определили? По цвету корпуса?  Все ж даже как-то "неспортивно", честное слово... Если человек уже перешивал камень - то, наверное, так или иначе тип определился, разве нет ? А что до конкретной емкости - что, такая принципиальная разница, 0.1 или 1 uF ? Правда, факт применения 1 uF говорит, IMHO, именно в пользу моей версии с хранением содержимого на "остатках" питания (иначе я бы скорее ожидал 0.1 uF, а у меня в аналогичном драйвере, но с другим контроллером, правда - вообще дополнительно к керамике стоит танталовый электролит). А с остальными компонентами - не, неужели и в самом деле это так сложно - резисторный делитель, развязывающий диод ? Обязательно нужно рисовать схему ?
|
|
|
|
|
Jan 6 2010, 11:29
|
Участник

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

|
В пользу хранения каких то данных при питании от кондюка скажу, что тини13в с отключенным БОД и тактированием от 128 кГц генератора начинает работать при напряжении 0.9-1В !
Сообщение отредактировал pt200 - Jan 6 2010, 11:29
|
|
|
|
Guest_@Ark_*
|
Jan 6 2010, 11:35
|
Guests

|
Цитата Все ж даже как-то "неспортивно", честное слово... Если человек уже перешивал камень - то, наверное, так или иначе тип определился, разве нет ? Почему-то не подтвердил это топикстартер. Да и точную полную схему, неужели так сложно нарисовать? Хотя бы из уважения к присутствующим. А так, действительно как-то "неспортивно". Наверное - "большой китайский секрет".
|
|
|
|
|
Jan 6 2010, 12:10
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата А тип МК тоже "на глаз" определили? По цвету корпуса? Если бы вы хоть раз в руках держали AVR и PIC, то знали бы, что у 8-ногих AVR питание на 8-ю ногу заведено, а у PIC на 1-ю. Определив фирму производитель - подключаем программатор и считываем байты сигнатуры, которые однозначно называют нам тип микроконтроллера. А вообще, как и номинал на резисторах, название микроконтроллера я просто ПРОЧИТАЛ на корпусе. Впрочем умению читать не всех сейчас учат. Цитата И все-таки точную и полную схему в студию. Ребят, я понимаю что НГ и всё такое, но это уже за гранью добра и зла...
Цитата Просто я _очень_ сомневаюсь, что напряжение спадает до "настоящего" нуля в том случае, когда питается только микроконтроллер. Падает. Прибор это видит. Цитата Есть пара идей, но надо точно знать, как выглядит обвязка. С благодарностью выслушаю. Я, кстати, уже сделал все остальные опции прошивки - нужные режимы яркости, защита АКБ от переразряда. Осталось только "память режимов" добить. А так пока при каждом включении новый режим.
|
|
|
|
|
Jan 6 2010, 12:13
|

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

|
Цитата(stells @ Jan 6 2010, 13:30)  можно попробовать написать простенькую программку с выводом значения какой-либо ячейки в последовательном коде (скажем 1бит/с) на свободную ногу контроллера и последующей записью другого (инверсного) значения. дергая потом кнопку, можно проверить время хранения записанного значения попробовал на меге8 - через 1с (быстрее не успеваю передернуть питание и переключить осциллограф в режим ожидания) значение в ячейке уже сброшено. по питанию 1мкФ+0,1мкф, всю остальную нагрузку поотключал. так что видимо и тини13 в ОЗУ не получится ничего сохранить, ни за счет конденсатора по питанию, ни за счет емкости ячейки памяти кстати схемка все-таки полезной оказалась, я думал верхнее плечо делителя непосредственно на батарейке сидит
Сообщение отредактировал stells - Jan 6 2010, 12:39
|
|
|
|
|
Jan 6 2010, 12:55
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата попробовал на меге8 - через 1с значение в ячейке уже сброшено. Да. Именно ЗНАЧЕНИЕ на моей tiny максимум 75 мс удалось продержать. Сейчас попробую биты считать всеже. А то с этими номиналами емкости и схемой отвлеклись от задачи. Цитата быстрее не успеваю передернуть питание и переключить осциллограф в режим ожидания Тут я основательно подготовился. Соорудил из завалявшейся системы управления (контроллер, кнопки, жки) генератор импульсов и через ключ подаю питание с нужной для измерений времянкой.
|
|
|
|
|
Jan 6 2010, 15:20
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата то зачем целых 2 резистора тратить?! они ж денег стоят Ну это как раз понятно. В tiny на АЦП референс либо 1.1 В, либо VCC. Измерять что-то относительно VCC=2.2-3.6 В не представляется возможным. А чтобы мерять относительно 1.1 В нужен делитель. В пользу температурного эффектв есть и "за", и "против": за - у одного из фонариков в зависимости от нагрева время на которое его нужно выключить сильно плавает. Но там драйвер другой и я его схему не видел. против - там внутри фонарика очень жарко может быть. Современный светодиодный фонарь это 1 A и больше тока, текущие через диод с падением 3.5 В в объёме брелка для ключей. В любом случае, подумать в сторону тепла можно. Цитата Если бы резистор на 3 килоома был бы термистор, его можно было бы греть током с 7-ой ноги, В оригинальной схеме ничего похожего на "режим прогрева" не наблюдается - напряжение на делителе во всех режимах повторят VCC. Да и не похож он на термостор. Да, да по цвету  Кстати, я думаю делитель на VCC, а не на АКБ висит именно потому что для измерений напряжения используется. Яркость ШИМ-мом регулируется. И на VCC она хоть немного зафильтрована. Наверное поэтому же именно 1 мкФ, а не традиционные 0.1 мкФ стоят.
|
|
|
|
|
Jan 6 2010, 16:09
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(VladislavS @ Jan 6 2010, 18:20)  В любом случае, подумать в сторону тепла можно. Особенно т-ра самого светодиода интересна, т.к. падение на нём сильно от т-ры зависит. Соответственно работа стабилизатора его тока. От предыдущего режима время не зависит? А нас не сама т-ра интересут, а перегрев. От того горячо или холодно сильно зависить не должно. Если при ВКЛЮЧЕНИИ мы видим что что-то (опорное напряжение АЦП быстро устаканивается? м.б. и оно) остывает (нагревается? меняет т-ру?), то значит выключились недавно.
|
|
|
|
Guest_@Ark_*
|
Jan 6 2010, 16:55
|
Guests

|
Цитата блин, решение наверняка на поверхности лежит. я думаю, что если кто-то "раскусит" фокус, то все потом смеяться будут Я, кажется, раскусил этот китайский фокус... В качестве терморезистора используется диод в цепи питания...
|
|
|
|
|
Jan 6 2010, 17:03
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата опробовал читать нулевую ячейку EEPROM. Ну эту детскую болезнь Atmel уже давно побидила. Да и портилась она делаеко не при каждом включении.
|
|
|
|
|
Jan 6 2010, 18:22
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
А может, все-таки используется хранение в EEPROM? Тут же совсем не обязательно хранить что-то конкретное, важен сам факт попытки что-то туда записать (или стереть). А режим можно задавать не конкретной величиной, а адресом ячейки. И при старте восстанавливать содержимое. В AN103 пишут, что стирание/запись происходит побитно. Думаю, что 1,8 мс указаны для всего байта. Может быть, за 200 мкс один бит он успевает стереть? То есть, при возникновении прерывания от компаратора он выбирает ячейку и просто начинает стирание. И неважно, успеет стереть всю или нет, одного бита достаточно. А при следующем старте проверяет содержимое ячеек режима, та, что повреждена, дает предыдущий режим и восстанавливается. Может, так?
|
|
|
|
|
Jan 6 2010, 19:09
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Цитата(stells @ Jan 6 2010, 20:27)  может и успеет, но что это даст? как различить время в выключенном состоянии в 1 и 10 секунд? Даст то, что текущий режим сохранить можно, уже что-то  Думаю, стоит посмотреть графики питания при включении
|
|
|
|
|
Jan 6 2010, 19:47
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
HALFer, там по схеме параллельно 1 мкФ стоят 13 кОм. 10 МОм щуп там погоды не делает. Цитата Даст то, что текущий режим сохранить можно, уже что-то Текущий режим очень даже неплохо сохраняется при старте с хорошим питанием. Зачем для этого экстримизмом заниматься?
|
|
|
|
|
Jan 6 2010, 19:53
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Все-таки осциллограммы напряжения при включении хотелось бы увидеть. Возможно, время от момента включения до момента превышения порога на компараторе существенно зависит от времени отсутствия питания. Цитата(VladislavS @ Jan 6 2010, 21:47)  Текущий режим очень даже неплохо сохраняется при старте с хорошим питанием. Зачем для этого экстримизмом заниматься?  Невнимательно прочитал вводную, а по ходу топика сложилось впечатление, что момент сохранения - самый важный  Теперь вижу, что самое главное - надежное детектирования времени отсутствия питания
|
|
|
|
|
Jan 6 2010, 20:12
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
Послушайте, я наверное в танке сижу, причем очень глубоко)) Объясните пожалуйста почему это не может работать по следующему алгоритму?: Включаем. Код 1.Инициализация. 2.Читаем EEPROM (номер эффекта) 3.Инкрементируем 4.записываем в EEPROM следующий номер эффекта 5.Начинаем крутить выбранный эффект И так далее с первого пункта.
|
|
|
|
|
Jan 6 2010, 21:22
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата все ли точно в постановке задачи? Абсолютно. У меня на руках 3 фонарика с тремя разными драйверами, которые ведут себя именно так как я описал. Короткое выключение питания - смена режима. Длинное выключение питания - нет смены режима. Еще у меня россыпью два типа драйверов с одинаковой схемой, но разными топологиями и прошивками. Один из них я уже перепрошил и ставлю на нём опыты.
|
|
|
|
|
Jan 6 2010, 22:12
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 23-07-08
Пользователь №: 39 167

|
глупое предположение, но может какие-то переходные процессы на LED драйвере присутствуют? по включению нога PB1 на вход, проверяем наличие единицы, если есть, то горячий рестарт, нет - холодный. без драйвера режимы переключаются?
|
|
|
|
|
Jan 6 2010, 22:27
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата без драйвера режимы переключаются? Без нагрузки режимы переключаются. PB1 падает быстрей чем питание
|
|
|
|
|
Jan 6 2010, 22:34
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 23-07-08
Пользователь №: 39 167

|
похожий девайс
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 7 2010, 00:47
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата без драйвера режимы переключаются?
Без нагрузки режимы переключаются. PB1 падает быстрей чем питание Я вот тоже думаю, что дело в драйвере (и хотел это предложить раньше, да занят был). Если бы это был просто полевик, то его затвор вполне неплохо хранил бы напряжение ниже чем, примерно, полвольта. Постоянная времени по утечкам и прочему вполне может попасть в секунду. Кстати, даже десятимегаомный щуп быстро разрядит такой затвор. Поставьте щуп на "затвор" и посмотрите, будет ли переключать режимы. Для большей уверенности надо даташит на драйвер покурить (к сожалению, сам сейчас с трубы, сделать этого не могу). Но идея с саморазогревом мне вообще нравится.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jan 7 2010, 06:15
|

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

|
Цитата(Rst7 @ Jan 7 2010, 03:47)  Я вот тоже думаю, что дело в драйвере (и хотел это предложить раньше, да занят был). Если бы это был просто полевик, то его затвор вполне неплохо хранил бы напряжение ниже чем, примерно, полвольта. так PB1 не является ADC-входом. его можно инициализировать, как вход компаратора, но тогда затвор драйвера должен хранить не полвольта, а больше 1,1В - напряжение втроенного ИОН
|
|
|
|
|
Jan 7 2010, 09:04
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
Цитата(stells @ Jan 6 2010, 23:17)  потому что инкрементировать нужно только если питания не было 1-2с. а если больше - то инкрементировать не надо Ну тогда так: ----------------------------------- 1.Инициализация. 1.1 Смотрим питание (через ацп) 1.2 Сравниваем со значением ранее записанным. 1.3 Если напряжение выше, к примеру на 10%( чем ранее записанное значение), то пропускаем инкремент. (п.2 а потом п.5) 1.4 Если напряжение не выше 10% инкрементируем счетчик эффектов. 2.Читаем EEPROM (номер эффекта) 3.Инкрементируем 4.записываем в EEPROM следующий номер эффекта 5.Начинаем крутить выбранный эффект 6.Периодически читаем данные с АЦП, усредняем и записываем значение в память.Что дает нам средний уровень питающего напряжения под нагрузкой. ----------------------------------- т.о. если источник питания(в случае фонарика батарейка) отключается на продолжительное время уровень напряжения на холостом ходу поднимается до определенной величины, что не успевает произойти если нагрузку отключают на короткий промежуток времени. Эту версию просто проверить если запитать фонарик от стаб. ИП. :-) зы:Все таинства скорее всего происходят при включении контроллера, а не при его выключении как думают многие )))
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|