Здравствуйте, недавно написал програмку для прибора с батарейным питанием. Контроллер mega168. Включается и выключается он с помощью тумблера. Хотелось бы при длительном нажатии на кнопку уволить мк в спящий режим, и при длительном нажатии будить его,точно так же как и в телефоне. Подскажите как это грамотно реализовать?
сие вполне разумно дерза1 но тумблеру там где есть мк не место...
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
варианты: 1) кнопку садить на пин с внешним прерыввнием, прерывание настраивать на низкий уровень и настроить глубокий спящий режим. 2) иногда просыпаться от собаки и проверять кнопку из глубокого спящего режима. 3) использовать неглубокий сон, при этом почти вся периферия остается в работе - кнопку можно опрашивать по таймеру или по прерыванию по фронту/спаду (энергопотребление будет выше). 4) сделать полное самоотключение (управляемый кнопкой и контроллером ключ в питании) контроллер сохраняет параметры в еепром и самовырубается, включается кнопкой.
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
По первому варианту. При удерживание кнопки тикает переменная, когда она достигнет какого то значения, уснуть. А как проснутся при удержании? По четвертому варианту можно взглянуть на схему?
Добавлено after 1 minute 44 seconds: Можно и триггер сделать по питанию, но больше интересен программный вариант
Добавлено after 2 minutes 58 seconds: Или например при удержании кнопки заряжать конденсатор через резистор,и при достижении 5 вольт будет подан сигнал на прерывание,и разбудит мк
Пробуждение из сна по прерыванию. А во время исполнительной части обработчика прерывания по пробуждению отменяем прерывание и выходим из обработчика. Далее программный опрос той же линии и соответствующая обработка. Я такую закладку в проекте firefly сделал, но доводить до обработки кнопы за пределами задачи по пробуждению не стал.
по 1) настраиваешь энергосбережение по максимуму, настраиваешь прерывание от кнопки по низкому уровню, но не разрешаешь его делаешь функцию (или дефайн) засыпания, в ней: |сбрасываешь флаг прерывания кнопки |разрешаешь прерывание от кнопки |усыпляешь контроллер эта функция должна вызываться из основного цикла по установленному флагу "засыпания" обработчик прерывания: |задержка |проверка кнопки |если не нажата: ставим флаг "засыпания" убираем флаг этого прерывания и выходим из прерывания |если нажата: отключаем прерывание кнопки и выходим из прерывания по 4)Спойлер по рис1.: кнопка нажата - питание приходит в любом случае. контроллер запущен, у него включена подтяжка порта, её тока хватает для удержания включенными цепей питания, пин читается при отпущенной кнопке 1, при нажатой 0. если отключить подтяжку - питание контроллера выключится. по рис2.: применен более распространенный н канальный мосфет, но рвет схема минус питания, а значит от этой батареи больше ничего не запитать (кроме того, что отключается) т.к. по общему минусу ток обойдет транзистор. т.к. авр не умеет подтяжку к минусу - сделан отдельный резистор подтяжки. для выключения надо настроить порт на выход и подать в него 1. так кнопка и включает контроллер и сама видна в нём, и тем же портом позволяет управлять питанием.
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Последний раз редактировалось Ivanoff-iv Чт авг 23, 2018 10:01:44, всего редактировалось 1 раз.
Во время исполнения обработчика прерывания сбрасываем флаги и изменяем режим работы прерывания, которое в данный момент обрабатывается. По выходу из обработчика режим работы у аппаратной схемотехники уже иной. И вместо прерывания сканируем линию программно.
Делал триггер на cd4093 и мосфете. Включение 1сек, выключение 3сек. Спасало от зависания контроллера. Кнопку можно было использовать в МК как например "назад".
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения