Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как распознать кратковременное выключение на Tiny13
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2, 3, 4, 5, 6, 7
galjoen
Цитата(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.

Подредактировал из-за описок.
@Ark
Цитата
Извини, но рисовать схему я не буду.

Когда чел. задает вопрос и отказывается представить схему, то разговаривать не о чем ...
rx3apf
Цитата(VladislavS @ Jan 6 2010, 01:21) *
Видно же, что запитать от неё микроконтроллер на время, соизмеримое со временем размыкания и замыкания кнопки человеком не получается. Изобретать из-за этого измерительный стенд дома не очень хочется.

И все ж предлагаю сделать простейший эксперимент (но именно с "прототипом", т.е. с платой, где прошивка не менялась) - зашунтировать питание сотней килоом. Если работа переключателя при этом не изменилась - то почти наверняка что-то со статистикой переброса битов памяти, непосредственно с питанием не связанной. Если перестало работать - банальное сохранение содержимого... Могу, в принципе, проверить то же самое с обломком моего драйвера, но там наверняка не tiny13 (иначе зачем бы там еще и отдельный EEPROM), а вот логика, скорее всего, похожая...
VladislavS
Цитата
И все ж предлагаю сделать простейший эксперимент (но именно с "прототипом", т.е. с платой, где прошивка не менялась) - зашунтировать питание сотней килоом.

В понедельник. Дома нет возможности.

Цитата
Когда чел. задает вопрос и отказывается представить схему, то разговаривать не о чем ...

Когда человек не способен на слух воспринять схему из одной микросхемы, одного диода, одного конденсатора и двух резисторов, то разговаривать действительно не о чем ...
@Ark
Цитата
Когда человек не способен на слух воспринять схему из одной микросхемы, одного диода, одного конденсатора и двух резисторов, то разговаривать действительно не о чем ...

Когда человек не способен точно померить емкости и резисторы в схеме, и при этом задает вопросы, то разговаривать, действительно, не о чем...
VladislavS
@Ark, номиналы резисторов я указал дважды. Резисторы это такие маленькие черненикие детальки прямоугольной формы - номиналы написаны прямо на них.. Конденнсатор мой опыт позволяет идентифицировать как 0.1-1 мкФ, а померить без паяльника дома просто нечем.

Если не умеешь читать, то не встревай, пожалуйста, со своими PIC-ми.

Винимание! Внимание!

Совершенно случайно у соседа нашел китайский тестер с измерением емкостей. Показывает 1.2 мкф. Берем ближайший из ряда и получаем 1 мкф. В чём я изначально почти не сомневался.
Rst7
И все-таки точную и полную схему в студию. Есть пара идей, но надо точно знать, как выглядит обвязка.
stells
Цитата(rx3apf @ Jan 6 2010, 01:45) *
И все ж предлагаю сделать простейший эксперимент (но именно с "прототипом", т.е. с платой, где прошивка не менялась) - зашунтировать питание сотней килоом. Если работа переключателя при этом не изменилась - то почти наверняка что-то со статистикой переброса битов памяти, непосредственно с питанием не связанной. Если перестало работать - банальное сохранение содержимого...

так автор несколько раз писал, что питание намного быстрее падает, чем требуется. если вот только содержимое хранится за счет собственной емкости ячеек?
можно попробовать написать простенькую программку с выводом значения какой-либо ячейки в последовательном коде (скажем 1бит/с) на свободную ногу контроллера и последующей записью другого (инверсного) значения. дергая потом кнопку, можно проверить время хранения записанного значения
rx3apf
Цитата(stells @ Jan 6 2010, 13:30) *
так автор несколько раз писал, что питание намного быстрее падает, чем требуется. если вот только содержимое хранится за счет собственной емкости ячеек?

Писать-то писал... Просто я _очень_ сомневаюсь, что напряжение спадает до "настоящего" нуля в том случае, когда питается только микроконтроллер. После того, как все провалилось ниже предела работоспособности, потребление должно резко упасть и "остаток" может позволить продержаться содержимому памяти какое-то время. Уж чего проще - зашунтировать питание и посмотреть поведение ? Нет под рукой резистора - ну мультиметром на низких пределах, в конце концов...
@Ark
Цитата
@Ark, номиналы резисторов я указал дважды. Резисторы это такие маленькие черненикие детальки прямоугольной формы - номиналы написаны прямо на них.. Конденнсатор мой опыт позволяет идентифицировать как 0.1-1 мкФ, а померить без паяльника дома просто нечем. Если не умеешь читать, то не встревай, пожалуйста, со своими PIC-ми.

А тип МК тоже "на глаз" определили? По цвету корпуса? biggrin.gif
rx3apf
Цитата(@Ark @ Jan 6 2010, 14:02) *
А тип МК тоже "на глаз" определили? По цвету корпуса? biggrin.gif

Все ж даже как-то "неспортивно", честное слово... Если человек уже перешивал камень - то, наверное, так или иначе тип определился, разве нет ? А что до конкретной емкости - что, такая принципиальная разница, 0.1 или 1 uF ? Правда, факт применения 1 uF говорит, IMHO, именно в пользу моей версии с хранением содержимого на "остатках" питания (иначе я бы скорее ожидал 0.1 uF, а у меня в аналогичном драйвере, но с другим контроллером, правда - вообще дополнительно к керамике стоит танталовый электролит). А с остальными компонентами - не, неужели и в самом деле это так сложно - резисторный делитель, развязывающий диод ? Обязательно нужно рисовать схему ?
pt200
В пользу хранения каких то данных при питании от кондюка скажу, что тини13в с отключенным БОД и тактированием от 128 кГц генератора начинает работать при напряжении 0.9-1В !
@Ark
Цитата
Все ж даже как-то "неспортивно", честное слово... Если человек уже перешивал камень - то, наверное, так или иначе тип определился, разве нет ?

Почему-то не подтвердил это топикстартер. Да и точную полную схему, неужели так сложно нарисовать? Хотя бы из уважения к присутствующим. А так, действительно как-то "неспортивно". Наверное - "большой китайский секрет". smile.gif
VladislavS
Цитата
А тип МК тоже "на глаз" определили? По цвету корпуса?

Если бы вы хоть раз в руках держали AVR и PIC, то знали бы, что у 8-ногих AVR питание на 8-ю ногу заведено, а у PIC на 1-ю. Определив фирму производитель - подключаем программатор и считываем байты сигнатуры, которые однозначно называют нам тип микроконтроллера.

А вообще, как и номинал на резисторах, название микроконтроллера я просто ПРОЧИТАЛ на корпусе. Впрочем умению читать не всех сейчас учат.

Цитата
И все-таки точную и полную схему в студию.

Ребят, я понимаю что НГ и всё такое, но это уже за гранью добра и зла... sad.gif
Нажмите для просмотра прикрепленного файла

Цитата
Просто я _очень_ сомневаюсь, что напряжение спадает до "настоящего" нуля в том случае, когда питается только микроконтроллер.

Падает. Прибор это видит.

Цитата
Есть пара идей, но надо точно знать, как выглядит обвязка.

С благодарностью выслушаю.

Я, кстати, уже сделал все остальные опции прошивки - нужные режимы яркости, защита АКБ от переразряда. Осталось только "память режимов" добить. А так пока при каждом включении новый режим.
stells
Цитата(stells @ Jan 6 2010, 13:30) *
можно попробовать написать простенькую программку с выводом значения какой-либо ячейки в последовательном коде (скажем 1бит/с) на свободную ногу контроллера и последующей записью другого (инверсного) значения. дергая потом кнопку, можно проверить время хранения записанного значения

попробовал на меге8 - через 1с (быстрее не успеваю передернуть питание и переключить осциллограф в режим ожидания) значение в ячейке уже сброшено. по питанию 1мкФ+0,1мкф, всю остальную нагрузку поотключал. так что видимо и тини13 в ОЗУ не получится ничего сохранить, ни за счет конденсатора по питанию, ни за счет емкости ячейки памяти

кстати схемка все-таки полезной оказалась, я думал верхнее плечо делителя непосредственно на батарейке сидит
rx3apf
Цитата(stells @ Jan 6 2010, 15:13) *
кстати схемка все-таки полезной оказалась, я думал верхнее плечо делителя непосредственно на батарейке сидит

Кстати да. Я тоже был уверен, что делитель до диода, иначе, ясен пень, ни о каком хранении на "остатке" и речи быть не может (постоянная времени маловата)...
VladislavS
Цитата
попробовал на меге8 - через 1с значение в ячейке уже сброшено.

Да. Именно ЗНАЧЕНИЕ на моей tiny максимум 75 мс удалось продержать. Сейчас попробую биты считать всеже. А то с этими номиналами емкости и схемой отвлеклись от задачи.

Цитата
быстрее не успеваю передернуть питание и переключить осциллограф в режим ожидания

Тут я основательно подготовился. Соорудил из завалявшейся системы управления (контроллер, кнопки, жки) генератор импульсов и через ключ подаю питание с нужной для измерений времянкой.
stells
а не может быть эффект как-то основан на известной "фиче" с порчей нулевой ячейки EEPROM при отключении/включении питания?
SFx
че то мне кажется намного проще постоянно включенную tyni к питанию, и кнопку отдельно к ней прицепить. сколько она потребляет в спящем виде?
galjoen
Меня тоже удивило подключение делителя АЦП. И заставило засомневаться в сохранении данных в ОЗУ.
Теперь я уже склоняюсь к тепловой версии. Постоянная времени у всей этой тиньки как-раз порядка секунды... А попробуйте слегка погреть тиньку паяльником. В разных вариантах. Особенно интересно, что будет, если выключить надолго, ткнуть паяльником, убрать его и включить. Переключится? А вдруг в этом дело? Чем чёрт китаец не шутит?
rx3apf
Цитата(SFx @ Jan 6 2010, 16:33) *
че то мне кажется намного проще постоянно включенную tyni к питанию, и кнопку отдельно к ней прицепить. сколько она потребляет в спящем виде?

Это принципиально невозможно для фонарей с торцевой кнопкой. Разве что дополнять корпус дополнительным проводником (печатного типа, на майларе), конструктивно весьма неудобно...
Maik-vs
Если бы резистор на 3 килоома был бы термистор, его можно было бы греть током с 7-ой ноги, а при включении девайсы АЦП-ом смотреть, как меняется напряжение на делителе. Если ОЗУ и т.п., то зачем целых 2 резистора тратить?! они ж денег стоят smile.gif...
VladislavS
Цитата
то зачем целых 2 резистора тратить?! они ж денег стоят

Ну это как раз понятно. В tiny на АЦП референс либо 1.1 В, либо VCC. Измерять что-то относительно VCC=2.2-3.6 В не представляется возможным. А чтобы мерять относительно 1.1 В нужен делитель.

В пользу температурного эффектв есть и "за", и "против":
за - у одного из фонариков в зависимости от нагрева время на которое его нужно выключить сильно плавает. Но там драйвер другой и я его схему не видел.
против - там внутри фонарика очень жарко может быть. Современный светодиодный фонарь это 1 A и больше тока, текущие через диод с падением 3.5 В в объёме брелка для ключей.

В любом случае, подумать в сторону тепла можно.

Цитата
Если бы резистор на 3 килоома был бы термистор, его можно было бы греть током с 7-ой ноги,

В оригинальной схеме ничего похожего на "режим прогрева" не наблюдается - напряжение на делителе во всех режимах повторят VCC. Да и не похож он на термостор. Да, да по цвету smile.gif

Кстати, я думаю делитель на VCC, а не на АКБ висит именно потому что для измерений напряжения используется. Яркость ШИМ-мом регулируется. И на VCC она хоть немного зафильтрована. Наверное поэтому же именно 1 мкФ, а не традиционные 0.1 мкФ стоят.
stells
блин, решение наверняка на поверхности лежит. я думаю, что если кто-то "раскусит" фокус, то все потом смеяться будут biggrin.gif

попробовал читать нулевую ячейку EEPROM. нормально читается, не портится (когда как-раз надо, чтобы модифицировалась). правда попробовал опять же на меге8, может с тини по-другому будет?
galjoen
Цитата(VladislavS @ Jan 6 2010, 18:20) *
В любом случае, подумать в сторону тепла можно.

Особенно т-ра самого светодиода интересна, т.к. падение на нём сильно от т-ры зависит. Соответственно работа стабилизатора его тока. От предыдущего режима время не зависит?

А нас не сама т-ра интересут, а перегрев. От того горячо или холодно сильно зависить не должно. Если при ВКЛЮЧЕНИИ мы видим что что-то (опорное напряжение АЦП быстро устаканивается? м.б. и оно) остывает (нагревается? меняет т-ру?), то значит выключились недавно.
@Ark
Цитата
блин, решение наверняка на поверхности лежит. я думаю, что если кто-то "раскусит" фокус, то все потом смеяться будут

Я, кажется, раскусил этот китайский фокус... В качестве терморезистора используется диод в цепи питания...
VladislavS
Цитата
опробовал читать нулевую ячейку EEPROM.

Ну эту детскую болезнь Atmel уже давно побидила. Да и портилась она делаеко не при каждом включении.
stells
Цитата(VladislavS @ Jan 6 2010, 20:03) *
Ну эту детскую болезнь Atmel уже давно победила. Да и портилась она далеко не при каждом включении.

еще полтора года тому назад я столкнулся с этим в тини26, хотя портилась конечно не при каждом включении

Цитата(@Ark @ Jan 6 2010, 19:55) *
Я, кажется, раскусил этот китайский фокус... В качестве терморезистора используется диод в цепи питания...

а с чего ему греться? токи-то миллиамперные или даже меньше (если учитывать то, что и без светодиода режим меняется)
Polaris
А может, все-таки используется хранение в EEPROM? Тут же совсем не обязательно хранить что-то конкретное, важен сам факт попытки что-то туда записать (или стереть). А режим можно задавать не конкретной величиной, а адресом ячейки. И при старте восстанавливать содержимое. В AN103 пишут, что стирание/запись происходит побитно. Думаю, что 1,8 мс указаны для всего байта. Может быть, за 200 мкс один бит он успевает стереть? То есть, при возникновении прерывания от компаратора он выбирает ячейку и просто начинает стирание. И неважно, успеет стереть всю или нет, одного бита достаточно. А при следующем старте проверяет содержимое ячеек режима, та, что повреждена, дает предыдущий режим и восстанавливается.
Может, так?
stells
Цитата(Polaris @ Jan 6 2010, 21:22) *
Может быть, за 200 мкс один бит он успевает стереть?

может и успеет, но что это даст? как различить время в выключенном состоянии в 1 и 10 секунд?
Polaris
Цитата(stells @ Jan 6 2010, 20:27) *
может и успеет, но что это даст? как различить время в выключенном состоянии в 1 и 10 секунд?

Даст то, что текущий режим сохранить можно, уже что-то smile.gif
Думаю, стоит посмотреть графики питания при включении
HALFer
что-то сильно зациклено на хранении. имхо все более примитивно. помнить тут вовсе не обязательно, достаточно чтобы после выключения программа продолжала выполняться. сколько там выдержка, 2-3 сек? уверен тинька с минимальным к-вом периферии протянет на 128кГц от 1мкФ. а дальше все просто. выключили - программа продолжает выполняться. разрядились до плинтуса - при включении будут повторная инициализация. а если разрядиться не успела, то ADC поймает момент появления питания и это будет знак для все еще выполняющейся программы. при этом она в eeprom пометит что "щас я перешел в режим N+1" и все.
stells
Цитата(HALFer @ Jan 6 2010, 22:10) *
уверен тинька с минимальным к-вом периферии протянет на 128кГц от 1мкФ

так осциллограммки питания приводились. напряжение питания падает до 1В где-то через 2мс, это и есть плинтус
HALFer
осциллограммы это хорошо, но где опыт когда сидим осциллографом на девайсе и проверяем на работоспособность с таким паразитом как щуп? кто его знает как осциллограф повлияет на работу. сели щупом - клац-клац и срзу станет ясно.
VladislavS
HALFer, там по схеме параллельно 1 мкФ стоят 13 кОм. 10 МОм щуп там погоды не делает.

Цитата
Даст то, что текущий режим сохранить можно, уже что-то

Текущий режим очень даже неплохо сохраняется при старте с хорошим питанием. Зачем для этого экстримизмом заниматься? smile.gif
Polaris
Все-таки осциллограммы напряжения при включении хотелось бы увидеть. Возможно, время от момента включения до момента превышения порога на компараторе существенно зависит от времени отсутствия питания.

Цитата(VladislavS @ Jan 6 2010, 21:47) *
Текущий режим очень даже неплохо сохраняется при старте с хорошим питанием. Зачем для этого экстримизмом заниматься? smile.gif

Невнимательно прочитал вводную, а по ходу топика сложилось впечатление, что момент сохранения - самый важный wink.gif Теперь вижу, что самое главное - надежное детектирования времени отсутствия питания
adc
Послушайте, я наверное в танке сижу, причем очень глубоко)) Объясните пожалуйста почему это не может работать по следующему алгоритму?:
Включаем.
Код
1.Инициализация.
2.Читаем EEPROM (номер эффекта)
3.Инкрементируем
4.записываем в EEPROM следующий номер эффекта
5.Начинаем крутить выбранный  эффект
И так далее с первого пункта.
stells
Цитата(adc @ Jan 6 2010, 23:12) *
Объясните пожалуйста почему это не может работать по следующему алгоритму?:
Код
3.Инкрементируем

потому что инкрементировать нужно только если питания не было 1-2с. а если больше - то инкрементировать не надо
HALFer
adc,
и что это даст? при каждом включении будем иметь новый режим работы. где момент определяющий повтор/переключение режимов в зависимости от выдержки без питания?
stells
VladislavS, все ли точно в постановке задачи? такое ощущение, что уравнение с двумя неизвестными. что-то скоро закипит biggrin.gif
VladislavS
Цитата
все ли точно в постановке задачи?

Абсолютно. У меня на руках 3 фонарика с тремя разными драйверами, которые ведут себя именно так как я описал. Короткое выключение питания - смена режима. Длинное выключение питания - нет смены режима.
Еще у меня россыпью два типа драйверов с одинаковой схемой, но разными топологиями и прошивками. Один из них я уже перепрошил и ставлю на нём опыты.
andrikk
глупое предположение, но может какие-то переходные процессы на LED драйвере присутствуют?
по включению нога PB1 на вход, проверяем наличие единицы, если есть, то горячий рестарт, нет - холодный.
без драйвера режимы переключаются?
VladislavS
Цитата
без драйвера режимы переключаются?

Без нагрузки режимы переключаются. PB1 падает быстрей чем питание smile.gif
andrikk
похожий девайс
Rst7
Цитата
без драйвера режимы переключаются?

Без нагрузки режимы переключаются. PB1 падает быстрей чем питание


Я вот тоже думаю, что дело в драйвере (и хотел это предложить раньше, да занят был). Если бы это был просто полевик, то его затвор вполне неплохо хранил бы напряжение ниже чем, примерно, полвольта.

Постоянная времени по утечкам и прочему вполне может попасть в секунду.

Кстати, даже десятимегаомный щуп быстро разрядит такой затвор. Поставьте щуп на "затвор" и посмотрите, будет ли переключать режимы.

Для большей уверенности надо даташит на драйвер покурить (к сожалению, сам сейчас с трубы, сделать этого не могу).

Но идея с саморазогревом мне вообще нравится.
stells
Цитата(Rst7 @ Jan 7 2010, 03:47) *
Я вот тоже думаю, что дело в драйвере (и хотел это предложить раньше, да занят был). Если бы это был просто полевик, то его затвор вполне неплохо хранил бы напряжение ниже чем, примерно, полвольта.

так PB1 не является ADC-входом. его можно инициализировать, как вход компаратора, но тогда затвор драйвера должен хранить не полвольта, а больше 1,1В - напряжение втроенного ИОН
adc
Цитата(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.Периодически читаем данные с АЦП, усредняем и записываем значение в память.Что дает нам средний уровень питающего напряжения под нагрузкой.
-----------------------------------
т.о. если источник питания(в случае фонарика батарейка) отключается на продолжительное время уровень напряжения на холостом ходу поднимается до определенной величины, что не успевает произойти если нагрузку отключают на короткий промежуток времени.
Эту версию просто проверить если запитать фонарик от стаб. ИП. :-)
зы:Все таинства скорее всего происходят при включении контроллера, а не при его выключении как думают многие )))
stells
Цитата(adc @ Jan 7 2010, 12:04) *
если источник питания(в случае фонарика батарейка) отключается на продолжительное время уровень напряжения на холостом ходу поднимается до определенной величины, что не успевает произойти если нагрузку отключают на короткий промежуток времени.

была такая версия, но автор топика сказал, что и без нагрузки контроллер "видит" длинное отключение sad.gif

Цитата(adc @ Jan 7 2010, 12:04) *
зы:Все таинства скорее всего происходят при включении контроллера, а не при его выключении как думают многие )))

безусловно... при выключении контроллер не может знать, на какое время его выключили
adc
Цитата(stells @ Jan 7 2010, 12:35) *
была такая версия, но автор топика сказал, что и без нагрузки контроллер "видит" длинное отключение sad.gif

Ну контроллер в каком то смысле тоже подобие нагрузки если постараться )))
Тут вопрос "видит" ли он короткое отключение?
stells
Цитата(adc @ Jan 7 2010, 12:40) *
Ну контроллер в каком то смысле тоже подобие нагрузки если постараться )))

как? даже если можно постараться, то делать это нужно непрерывно. т.е. разряжать батарею постоянно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.