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

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

Гость @Ark
Если топикстартер подключался программатором, стирал исходную программу, заливал свою и его программа работала, то я таки думаю, что он правильно идентифицировал микроконтроллер...

Безусловно. Осталось дождаться подтверждения этого факта топикстартером. И опубликования точной схемы, для конструктивного продолжения дискуссии...

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


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

Безусловно. Осталось дождаться подтверждения этого факта топикстартером. И опубликования точной схемы, для конструктивного продолжения дискуссии...

Извини, но рисовать схему я не буду. Из неизвестного там только номинал конденсатора, но его я дома померить не могу - тупо нечем. Все остальное на 200% соответствует моему словеcному описанию.

 

Укол про PIC, будем считать, я пропустил мимо ушей.

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


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

Я все ж подозреваю (на 90%), что дело в сохранении содержимого памяти и после BOR. Пока из приведенных диаграмм вовсе не очевидно поведение напряжения на конденсаторе, поскольку "нуля" не видно (смотреть, само собой, надо по крайней мере 10-мегаомным делителем), как там дальше, за 1.8V ? Для пробы зашунтировать цепь питания у "прототипа" (сотню килоом) - переключение режимов должно бы перестать работать... А емкость вполне можно оценить - или скопом и хоть каким генератором прямоугольника, либо с помощью звуковой карты компьютера.

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

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


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

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?

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


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

Я все ж подозреваю (на 90%), что дело в сохранении содержимого памяти и после BOR. Пока из приведенных диаграмм вовсе не очевидно поведение напряжения на конденсаторе, поскольку "нуля" не видно (смотреть, само собой, надо по крайней мере 10-мегаомным делителем), как там дальше, за 1.8V ? Для пробы зашунтировать цепь питания у "прототипа" (сотню килоом) - переключение режимов должно бы перестать работать... А емкость вполне можно оценить - или скопом и хоть каким генератором прямоугольника, либо с помощью звуковой карты компьютера.

 

Там же две диаграммы. На одной из них развернуто на 80 мс после выключения и видно, что через 35 мс напряжение уже упало совсем. Оно ненулевое, но это особенности ключа, через который я подаю импульсы питания для измерений. Если выключать кнопкой, то оно естественно до нуля падает. Ну пусть еще на 5 мс дольше - это погоды не делает.

 

Щуп 10 МОм - тут подвоха не стоит искать. По крайней мере, изменения диаграммы в зависимомсти от программы я вижу хорошо.

 

Точное значение ёмкости, как мне кажется, непринципиально. Видно же, что запитать от неё микроконтроллер на время, соизмеримое со временем размыкания и замыкания кнопки человеком не получается. Изобретать из-за этого измерительный стенд дома не очень хочется. Обещаю, на работе в понедельник измерю - делов то на 1 минуту, когда приборы есть. Дома у меня даже паяльника чтобы 0603 паять нет.

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


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

Не совсем понятна физика процесса.

Вот берем мы две ячейки ОЗУ. После включения они с точностью до 6-7 бит стремятся к одному значению. Теперь начинаем одной переменной давать сильное воздействие посредством инвертирования битов, а вторую не трогаем. Чем больше бит совпало в той что "теребили" тем дольше было выключено питание. А вот зачем в процессе участвует ConstR ? Ведь у неё ожидается достаточно стабильное значение ConstN?

ConstN это база. У разных микросхем, и при разных включениях одной микросхемы, число "плавающих" бит может существенно различатся. Исходим из предположения, что на биты, из которых состоят, ConstR и VarR эти факторы влияют одинаково.

Вам же не хочется для каждого фонарика ставить эксперименты с определением именно его значения ConstN. И изменять это число в программе. Вот для самонастройки на конкретный образец и используется ConstR.

 

Алгоритм я несколько упростил. Реально у меня ConstR и VarR являлись разными битами одного байта. Т.е. это были 2 битовые строки, в перемешанном виде размещённые в ОЗУ. Наверно непонятно. Объясню на примере. Если представить ОЗУ как битовую строку, то биты относящиеся к ConstR и VarR размещались случайным (заданным 1 раз при написании программы) образом, например, так:

ccvcvvcc cvvvccvc vccvvvcv cvcvccvv и т.д

где "c" биты, относящиеся к ConstR, а "v" биты, относящиеся к VarR.

 

Подредактировал из-за описок.

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


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

Гость @Ark
Извини, но рисовать схему я не буду.

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

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


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

Видно же, что запитать от неё микроконтроллер на время, соизмеримое со временем размыкания и замыкания кнопки человеком не получается. Изобретать из-за этого измерительный стенд дома не очень хочется.

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

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


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

И все ж предлагаю сделать простейший эксперимент (но именно с "прототипом", т.е. с платой, где прошивка не менялась) - зашунтировать питание сотней килоом.

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

 

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

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

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


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

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

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

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


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

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

 

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

 

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

 

Совершенно случайно у соседа нашел китайский тестер с измерением емкостей. Показывает 1.2 мкф. Берем ближайший из ряда и получаем 1 мкф. В чём я изначально почти не сомневался.

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


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

И все-таки точную и полную схему в студию. Есть пара идей, но надо точно знать, как выглядит обвязка.

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


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

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

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

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

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


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

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

Писать-то писал... Просто я _очень_ сомневаюсь, что напряжение спадает до "настоящего" нуля в том случае, когда питается только микроконтроллер. После того, как все провалилось ниже предела работоспособности, потребление должно резко упасть и "остаток" может позволить продержаться содержимому памяти какое-то время. Уж чего проще - зашунтировать питание и посмотреть поведение ? Нет под рукой резистора - ну мультиметром на низких пределах, в конце концов...

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


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

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

А тип МК тоже "на глаз" определили? По цвету корпуса? :biggrin:

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


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

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