mp41 0 Posted January 7, 2010 · Report post Я бы сделал так: 1. Подаётся питание, начинает работать программа. 2. Проверяем сразу же ячейку №2 EEPROM: - если она равна 0, то режим не меняем, а просто читаем его из ячейки №1 EEPROM. - если она равна 1, то читаем режим из ячейки №1 EEPROM, инкрементируем, применяем маску и загоняем назад в эту ячейку. 3. Пишем в ячейку №2 единицу. 4. Запускаем таймер, чтобы реализовать задержку, скажем, в 1 секунду (я понимаю, что таймер там один и задействован он на ШИМ, но это не проблема, задержку и без таймера можно сделать). 5. Спустя задержки пишем в ячейку №2 значение 0. Т.е., если контроллер поработает до отключения меньше секунды, то при следующем включении режим сменится. Share this post Link to post Share on other sites
galjoen 0 Posted January 7, 2010 · Report post Т.е., если контроллер поработает до отключения меньше секунды, то при следующем включении режим сменится. Просьба к МП41 и всем остальным, кто сюда пишет. Прежде, чем писать - прочитайте эту тему. Я понимаю, что это трудно т.к. постов много, но всётаки. А так ещё больше постов станет, и вообще разобраться будет невозможно... Share this post Link to post Share on other sites
mp41 0 Posted January 7, 2010 · Report post Я прочитал всю тему до этого. Если Вас смущает задержка в одну секунду, то это для примера. Её можно сделать хоть в 5 секунд, если опрос АЦП и работа ШИМа идёт через прерывания, то визуально это не повлияет на работу фонаря. Share this post Link to post Share on other sites
andrik.kiev.ua 0 Posted January 7, 2010 · Report post поддерживаю МП41, идея достойная жизни, правда еепром дергаем часто. void main() { unsigned char mode; mode = read_mode_from_ee(); set_lighting_mode(mode); mode++; write_mode_to_ee(mode); wait_one_second(); mode--; write_mode_to_ee(mode); while(1); } Share this post Link to post Share on other sites
Guest @Ark Posted January 7, 2010 · Report post поддерживаю МП41, идея достойная жизни... Только, совсем не по теме топика... :) Share this post Link to post Share on other sites
Rst7 0 Posted January 7, 2010 · Report post Эту теорию можно было бы "притянуть", если бы в момент пропадания на выходе всегда был "1". А если "0" ? Там же есть возможность измерить напряжение питания. А значит, задолго до умирания перевести ножку в лог. 1 При выключении питания быстро отключить АЦП, чтобы не разрядить конденсатор, а при старте - посмотреть, осталось ли там что-нибудь... Такой вариант мне в голову приходил. Но помнится мне, что постоянная времени там хиленькая - раз, второе - как произвести преобразование без внутреннего цикла выборки АЦП? Ибо подключение конденсатора ко входным цепям в момент семплирования (курить диаграммы работы АЦП) , боюсь, приведет к отрицательным результатам. Хотя.. Если в комплексе - собственная емкость висящей в воздухе ножки и конденсатор хранения, то может оказаться вполне-вполне. Share this post Link to post Share on other sites
Guest @Ark Posted January 7, 2010 · Report post Такой вариант мне в голову приходил... Это нужно пробовать. К сожалению, Тиньки под рукой нет. А результаты экспериментов на PIC12, боюсь, автор темы не примет. :) Share this post Link to post Share on other sites
mp41 0 Posted January 7, 2010 · Report post Только, совсем не по теме топика... :) Хм, я - в танке что-ли? :) Вопрос был у топикстартера, как контроллер определяет кратковременное отключение питания. Share this post Link to post Share on other sites
Guest @Ark Posted January 7, 2010 · Report post Вопрос был у топикстартера, как контроллер определяет кратковременное отключение питания. А у Вас получается - кратковременное подключение питания! Дык, кто из нас в танке? :) Share this post Link to post Share on other sites
VladislavS 0 Posted January 7, 2010 · Report post Хм, я - в танке что-ли? Спишем на НГ :) Ибо предложил ты алгорит определения кратковременного включения :) Share this post Link to post Share on other sites
rx3apf 0 Posted January 7, 2010 · Report post Хм, я - в танке что-ли? :) Вопрос был у топикстартера, как контроллер определяет кратковременное отключение питания. Ну да, _отключение_. А предложенное решение - как определить кратковременное _включение_. Решение неплохое, кстати - переключение кратковременным разрывом интересно для оперативного управления и оно часто "достает", срабатывая когда не надо (и всякие "шаманства" с сохранением содержимого неудобны непредсказуемым и ненормированным временем реакции, что уще усугубляет - потому я и предлагал отдельный конденсатор с отдельным резистором утечки, и конденсатор взять не керамический, а пленочный, для стабильности). А переключать кратковременным включением удобно для "долговременного" использования, чтобы выбрать режим и им пользоваться, все время не дергая (хотя тоже проблема - короткие световые сигналы кнопкой с прямым кликом уже подавать нельзя), только надо разумно использовать ресурс EEPROM, "размазать" его... Share this post Link to post Share on other sites
andrik.kiev.ua 0 Posted January 7, 2010 · Report post Фото фанарика можно? куплю и тоже засяду за измерениями, уж очень как-то мистически все получается. Share this post Link to post Share on other sites
galjoen 0 Posted January 7, 2010 · Report post только надо разумно использовать ресурс EEPROM, "размазать" его... Мои девайсы на AVR, которые имеют загрузчик, переходят в режим загрузчика после двух, следующих друг за другом, кратковременных включений (менее 2 сек). По EEPROM всё "размазано", также поддерживается счётчик включений. НО объяснить пользователю как перевести девайс в режим загрузки крайне сложно. Не всем конечно. Некоторые сразу попадают. Зато другие... Инструкции им не помогают... Переписка через электронную почту тоже. Так они и выключают девайс на 2 секунды... Неделями... Помогает только телефонный звонок и работа с девайсом по командам в реалтайме (в телефонную трубку). Вот поэтому я думаю, а м.б. это более естественно - девайс выключать на 2 секунды. Ну или можно сделать чтобы и так и так в загрузчик он переходил. Простите за оффтоп. Share this post Link to post Share on other sites
mp41 0 Posted January 7, 2010 · Report post А у Вас получается - кратковременное подключение питания! Дык, кто из нас в танке? :) А-а-а, ну понятно. Согласен. :) Будем думать дальше над усовершенствованием алгоритма. Насчет ресурса EEPROM: не думаю, что китайцы сильно об этом беспокоятся. Даже лучше, если фонарик сам "сдохнет" когда-нибудь, чтобы пользователь купил новый. Share this post Link to post Share on other sites
VladislavS 0 Posted January 7, 2010 · Report post Фото фанарика можно? http://www.dealextreme.com/products.dx/category.940 - выбирай :) 99% из них с торцевой кнопкой. Так что, те что многорежимные и те что с памятью это оно. http://www.dealextreme.com/details.dx/sku.6190 - отдельно драйвер. http://www.dealextreme.com/details.dx/sku.7612 - отдельно драйвер. Думаю что вот эти точно с таким драйвером: http://www.dealextreme.com/details.dx/sku.32720 http://www.dealextreme.com/details.dx/sku.15335 Share this post Link to post Share on other sites