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

VladislavS

Свой
  • Постов

    1 240
  • Зарегистрирован

  • Посещение

  • Победитель дней

    9

Сообщения, опубликованные VladislavS


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

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

     

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

     

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

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

    post-4140-1262778892_thumb.jpg

     

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

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

     

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

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

     

    Я, кстати, уже сделал все остальные опции прошивки - нужные режимы яркости, защита АКБ от переразряда. Осталось только "память режимов" добить. А так пока при каждом включении новый режим.

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

     

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

     

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

     

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

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

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

     

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

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

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

     

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

     

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

     

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

  5. 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?

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

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

     

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

  7. Я в первом сообщении писал про схему. Питание от литиевого акб 3.7-4.2В. Контроллер запитан через диод и конденсатор. Диод обычный - падает на нём 0.65 В. Номинал конденсатора не измерял, но по цвету похож на 0.1 - 1 мкф. С резистивного делителя VCC->10к->3k->GND подано напряжение на ADC1. PORTB1 используеся для управления стабилизаторами тока AMC7135.

     

    p1040415f.jpg

  8. типовое время записи в EEPROM для tiny13 - 3,4мс. в чем вопрос?

    Вопрос в том ЗАЧЕМ и ЧТО надо писать в EEPROM при пропадании питания? Что мне это даст?

     

    galjoen, спасибо, попробую завтра так сделать. А на каком микроконтроллере и с какой схемой питания так делали?

     

    Да, не ищите Вы "китайское решение". Вполне возможно, оно настолько "кривое", что его трудно будет угадать... Сделайте свое.

    Собственно я и ищу своё. Совпадёт ли оно в конце концов с "китайским" всё равно узнать не представляется возможным - оригинальная прошивка защищена. Единственное ограничение - схема остаётся такой какая она есть.

     

    Поймите меня правильно. Если бы вопрос стоял в переделке нескольких моих фонариков, то я бы уже давно поставил электролит 100 мкФ, который позволил бы находиться в режиме Power Down нужное время и с мыслью "зато всё сделано правильно" не стал бы поднимать вопрос. Только я думаю, что люди, обитающие на данном форуме даже во время новогодних праздников, не только ради денег рисуют схемы и пишут программы. Я уже несколько лет на AVR ничего не делал - всё на молодых специалистов и студентов скинул. А тут зацепил меня этот китайский контроллер.

  9. Тинька, конечно, заметно не сможет "просадить". Но если включить светодиоды (фонарь же?), то "просадка" батареи может быть существенной. АЦП тиньки должно ее определить....

    Кстати, да. Интересно, как схема ведет себя при работе от сетевого БП, который не проседает?

     

    Светодиод, конечно же, просаживает. Я сейчас играюсь с двумя диодами - первый 1A кушает, а второй вообще до 2.8А.

    Но сам драйвер работает как задумано и без диода. И от источника пиитания тоже. Так что, версия с отслеживанием напряжения на акб на 99% ошибочна. Думаю там просто защита акб от переразряда организована.

     

    Уверены насчет выделенного слова? А то может всегда помнит? Тогда достаточно при подаче питания выбирать следующий режим. Номер его, естественно, хранить в EEPROM.

    Не, именно ПОМНИТ. Короткое нажатие - смена режима, длительное выключение - нет смены режима.

     

    Я делал такую потеху основываясь на битах BORF и PORF регистра MCUSR.

    Если PORF - берем из епрома режим и работаем

    Если только BORF - берем из епрома режим инкрементируем записываем и работаем.

    До какого значение опускалось питание при этом?

     

    Кстати, Автор, Вы опять про BOD и т.п., а если все поотключать, в т.ч. АЦП и компаратор чтоб внутрений ИОН тоже выключился - то потремление становится микроамперы, что возможно и позволит выиграть нужные пару секунд.

     

    Я же писал, что мне удалось проспать 4 мс до наступления BOR в то время как c оригинальной прошивкой всего 320 мкс до BOR. Раздел даташита "Minimizing Power Consumption" могу уже наизусть цитировать. Отключал всё что там написано. Да, отключение BOD увеличивает время сна, но не в требуемые 250 раз. Просто с включенным BOD проще замерять время по характерному перелому осциллограммы на 1.8 В.

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

    Я уже думал измерять что-то в окружении. Напряжение на акб как вариант. Только в одном из режимов диод потребляет всего 40 мА. Более того, плата вообще без диода тоже меняет режимы. Я не могу представить как на акб 18650 потребление tiny13 может что-то там "просадить". За идею спасибо. Попробую её подумать :) Еще бы приборы, способные это измерить были...

     

    С другой стороны, на сколько хватит EEPROM, если в него постоянно писать ADC? А записать его только после выключение всё равно не получится - нет у них даже 1.8 мс, не говоря уже о 2x1.8 мс.

     

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

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

     

     

    Может конденсатор там на единицы микрофарад и при вылизывании энергопортебления получим нужные секунды хранения в ОЗУ.

    Да какие там единицы... 0603 керамика. Максимум 1 мкФ и то сомневаюсь. Доберусь до работы - померяю. Одно я понял - вылизывай, не вылизывай проспать столько не получится всё равно.

     

     

    Чудес не бывает. Может действительно запоминается значение источника сброса. Нужно посмотреть что там есть.

    Что-то есть точно. И это что-то мне уже спать спокойно не даёт? :(

  11. Не помню чо там в tiny13, но в 2313 был регистр, хранящий тип только что произошедшего ресета (power-on, brown-out, user...). Если контроллер достаточно быстро вырубится по BOD, то возможно внутреннее состояние проживет достаточно долго, чтобы следующий ресет определился как BOR (в даташите где-то был рисунок с уровнями, на которые BOD реагирует).

    Может я конечно не умею BOD готовить, но на моей практике не было еще ни одного контроллера, который бы POR без BOR поднимал. Наоборот возможно, но за такое время дело доходит именно до POR.

     

    Что-то я уже расстроился. Перебрал почти все регистры аппаратуры - они при ресете зануляются намертво. А SRAM не держит нужное время... Чтож там китайцы нарыли то?

     

    Второй вариант - с тем же регистром, но как-то цепляющийся за постоянную времени RC-цепочки на ноге ресета

    Нет там ничего. Вся схема это диод с конденсатором на питании и два резистора делителя питания на АЦП. Единственный конденсатор разряжается полностью за единицы миллисекунд.

  12. Да не надо в EEPROM ничего при выключении писать. Надо при старте определять как давно были выключены и при хорошем питании уже всё что надо делать.

     

    Попробовал неинициализированную переменную проверять при старте. Хранится в памяти где-то 75 мс после выключения питания. После этого принимает произвольное значение, так как проверку ни на 0, ни на FF при старте не проходит. Маловато будет...

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

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

     

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

    Обижаешь :)

     

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

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

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

    post-4140-1262527876_thumb.png

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

    post-4140-1262527976_thumb.png

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

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

     

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

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

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

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

     

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

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

     

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

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

     

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

    Возможно.

     

     

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

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

  17. Инициализационные код в IAR-вских библиотеках достаточно быстрый. Врядли он тянет на срабатывание WD. Скорее всего вы на С++ наделали классов определённых глобально и это их конструкторы работают. В них тоже wdr натыкать надо. Ну и, как уже писали, в __low_level_init() задать корректные значения для WD. Мне кажется, что программа, ловящая WDR уже на инициализации, с такими параметрами WD будет ловить его и в ходе работы.

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

     

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

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

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

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

     

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

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

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

     

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

     

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

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

×
×
  • Создать...