Перейти к содержанию
    

Как распознать кратковременное выключение на Tiny13

Что-то споткнулся на ровном месте - спасайте!

 

Китайские светодиодные фонарики. Режимамы работы (яркость ШИМ-ом, стробы, SOS-ы) задаёт Tiny13.

Схема примитивная. Кнопка отключает минус литиевого аккумулятора от корпуса фонаря. Микроконтроллер запитан через

диод и небольшую керамическую ёмкость. На PB2 (ADC1) через резистивный делитель (VCC->10k->3k->GND) заведено

напряжение питания. PB1 используется для управления стабилизатором. Собственно и всё.

 

Включение следующего режима работы осуществляется кратковременным отключением питания кнопкой.

Причем, это "кратковременно" запросто может быть больше секунды. Если выключить на большее время, то

после включения режим не меняется (помнится).

 

В стремлении к совершенству полез программировать и пока не могу понять КАК они детектируют кратковременное отключение питания. Осциллографом вижу, что питания от конденсатора до BOD хватает где-то на 4 мс как бы я не усыплял контроллер. Это на 3 порядка меньше требуемого значения. Значит, он всётаки выключается. А вот найти какой регистр или флаг после POR и BOR не обнуляется да еще какое-то время сохраняет своё состояние без питания что-то не могу.

 

Коллеги, есть свежие идеи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот найти какой регистр или флаг после POR и BOR не обнуляется да еще какое-то время сохраняет своё состояние без питания что-то не могу.

Коллеги, есть свежие идеи?

Попробуйте неинициализируемую переменную и проверяйте ее значение сразу после запуска. Но все же это кривой метод - не возможно предсказать время хранения этой переменной. Оно запросто может и 5 секунд оказаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Напряжение на резистивном делителе пропадает раньше питания. По этому можно изменить режим, запомнить в EEPROM, и отправиться в powerdown. Или запомнить в оперативной и уснуть до появления прерывания от подачи питания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проще при вкл. сразу проверять из еепром режим,запускать нужную функцию,а потом сразу записывать в еепром след. режим и при след. включении режим сменится на др.

А АЦП используется только для индикации разряда аккумулятора\батуреек.

Изменено пользователем tillman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно даже без диода в питании контроллера обойтись схема такая

 

выключатель - конденсатор - контроллер

выключаетль - диод - резистор на землю.

 

сигнал с резистора - на прерываение. как только происходит прерывание, запоминаем режим, меняем режим прерывания и в полный повердаун. Как только происходит второе прерывание, пробуждаемся и выполняем дальнейшие действия.

 

Конденсатора 0.1мкф хватит только на 0.5сек, прийдется поставить что-то больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте неинициализируемую переменную и проверяйте ее значение сразу после запуска. Но все же это кривой метод - не возможно предсказать время хранения этой переменной. Оно запросто может и 5 секунд оказаться.

Попробую. Кривой, не кривой, но как-то китайцы это сделали...

 

Напряжение на резистивном делителе пропадает раньше питания. По этому можно изменить режим, запомнить в EEPROM, и отправиться в powerdown. Или запомнить в оперативной и уснуть до появления прерывания от подачи питания.

Энергии в конденсаторе не хватает чтобы проспать столько времени. Так что, хоть сохраняй, хоть не сохраняй - всё одно впереди BOR и POR.

 

Проще при вкл. сразу проверять из еепром режим,запускать нужную функцию,а потом сразу записывать в еепром след. режим и при след. включении режим сменится на др.

Вариант на случай если ничего другого не получится. Но, как я уже писал, китайцы сделали выключение без смены режима. На той плате, на которой я сейчас экспериментирую так и работало - значит МОЖНО и НУЖНО повторить.

 

А АЦП используется только для индикации разряда аккумулятора\батуреек.

Возможно.

 

 

Конденсатора 0.1мкф хватит только на 0.5сек, прийдется поставить что-то больше.

Схему менять не представляется возможным. Платку китайцы продают готовой и она достаточно миниатюрна - ставится в бошку фонарика. У меня даже столько проспать не получается при том что ухожу в Power Down даже до выключения питания. Вместе с тем, попадаются фонарики у которых до 2-3 секунд в зависимости от температуры можно выключать питание. Не думаю, что можно столько проспать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит спать не надо. Нужно писать в EEPROM что требуется при следующем включении. Думаю, то что помнится - хранится в EEPROM, а то что меняется - в SRAM. Например так - если при включении режимы сохраненные в EEPROM и SRAM одинаковы (сравниваем заведомо известные адреса) - то меняем режим и пишем новый в EEPROM, иначе - не меняем режим.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я уверен, что китайский подход не позволяет делать все как положено.

Это позволяет им делать вполне работоспособную вещь за смешные деньги и продавать её миллионами.

 

Наверняка SRAM хранит данные какое-то время после выключения питания (чисто конструктивная особенность), а китайцы подметив это решили использовать с целью упрощения схемотехники до смешного.

Сейчас попытаюсь проверить эту догадку. И когда я найду что там китайцы заметили и оно заработает, то разрешаю зачморить меня, предать анафеме и т.д. Лишь бы работало, как бы смешно это не было. Из него не стрелять и в космос не запускать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В стремлении к совершенству полез программировать и пока не могу понять КАК они детектируют кратковременное отключение питания. Осциллографом вижу, что питания от конденсатора до BOD хватает где-то на 4 мс как бы я не усыплял контроллер.

4 ms - это уже в "своем" варианте или в "прототипе" ? Если они не используют BOD, то в "настоящем" power down потребление гораздо меньше... Дурацкий вопрос - а защита включена ? Может, попробовать вычитать, что они там понаписали ?

Коллеги, есть свежие идеи?

Я раньше полагал, что используют еще какой-то "вспомогательный" конденсатор. Но сейчас поглядел (правда, не знаю, что конкретно на этой платке стоит - маркировка стерта, а EEPROM внешняя, и на Vcc 10-uF электролит есть), что-то отдельного конденсатора не наблюдаю. А сам бы я попробовал именно с отдельным (для порядка - с последовательным токоограничивающим резистором), подключив его на какую-нибудь ногу ADC. При включении - измерить, что на нем, потом включить и оставить под напряжением. 0.1 uF и параллельно 10 MOhm для утечки. Ну да, при выключении он разрядится через защитный диод входа, но не ниже 0.6V, а дальше - через резистор. До единиц секунд можно поймать, я полагаю (только вот керамика очень уж от температуры плавает...)

 

P.S. А сам я нафиг выдрал эту плату управления, потому как достала она меня этим постоянным переключением режимов и идиотским стробоскопом..

Изменено пользователем rx3apf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это позволяет им делать вполне работоспособную вещь за смешные деньги и продавать её миллионами.

Им позволяет продавать миллионами и быстро делать - быстрое и дешевое изготовление пресс-форм на корпуса. Уж поверьте мне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Им позволяет продавать миллионами и быстро делать - быстрое и дешевое изготовление пресс-форм на корпуса. Уж поверьте мне.

Я бы даже поверил - но, увы, типичный китайский фонарик имеет точеный корпус из дюраля...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откопал еще одну плату, на которой ещё не успел стереть китайскую прошивку. Посмотрел как она работает. Похоже, они даже не парятся с засыпанием. Желтый луч питание на кнопке, зелёный - на котроллере. Чётко видно как они за 320 мкс доходят до BOD на 1.8 В и умирают.

post-4140-1262527876_thumb.png

Совсем умирают.

post-4140-1262527976_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откопал еще одну плату, на которой ещё не успел стереть китайскую прошивку. Посмотрел как она работает. Похоже, они даже не парятся с засыпанием. Желтый луч питание на кнопке, зелёный - на котроллере. Чётко видно как они за 320 мкс доходят до BOD на 1.8 В и умирают.

Нуля не видно. И какое входное сопротивление щупа ? В даташите нет данных о пороговом напряжении сохранения данных в RAM но, вполне возможно, что на этом все и построено....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 ms - это уже в "своем" варианте или в "прототипе" ? Если они не используют BOD, то в "настоящем" power down потребление гораздо меньше...

4мс это мой код. Оригинал 320 мкс и упирается в BOD.

 

Дурацкий вопрос - а защита включена ? Может, попробовать вычитать, что они там понаписали ?

Обижаешь :)

 

P.S. А сам я нафиг выдрал эту плату управления, потому как достала она меня этим постоянным переключением режимов и идиотским стробоскопом..

Да уж очень он яркий, если без режимов использовать. У меня диод CREE XP-G R5 на 1А под 350 люмен по даташиту валит. А есть ведь ещё мощней. Вот стробоскопы и решил выкинуть, да управление ШИМ-мом не очень там сделано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чётко видно как они за 320 мкс доходят до BOD на 1.8 В и умирают

 

За это время можно че хош в EEPROM записать. Во всяком случае один бит с номером режима точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...