Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.02.2015, 06:42
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
А как разбудить МК коротким нажатием, если у него не работает тактовый генератор, да и почти все внутренние устройства?
|
А очень просто - прерывание по изменению сигнала на входах (кнопочка нажалась) выводит из слипа. Второй вариант - WDT периодически "будит" МК и МК быстренько опрашивает вход, на котором сидит кнопочка, и снова "засыпает", если состояние входа не изменилось. Этот вариант менее экономичный.
PS. Да, при работе ШИМа МК то будет тоже работать, это правда
Последний раз редактировалось NewWriter; 22.02.2015 в 06:45.
|
|
|
|
22.02.2015, 09:23
|
|
Вид на жительство
Регистрация: 26.10.2009
Сообщений: 379
Сказал спасибо: 47
Сказали Спасибо 146 раз(а) в 93 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от Proshha
|
Обычно я такие схемы сразу паяю, поглядывая на разводку в справочнике и прокручивая в голове логику работы
Нарисовал, чтоб не казаться голословным.
|
Не хочется быть нудным но тем не мение . 1) По условиям ТС изменения яркости должно быть реверсными, а с к561ИЕ10 это не прокатит.
2). Каким образом вы сбросите второй счётчик в "0", или заполните еденицами при коротком нажатии
кнопки?
__________________
..истина где то рядом..
Последний раз редактировалось proba60; 22.02.2015 в 09:41.
|
|
|
Сказали "Спасибо" proba60
|
|
|
22.02.2015, 11:11
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,969
Сказал спасибо: 2,554
Сказали Спасибо 11,850 раз(а) в 5,938 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от proba60
|
Не хочется быть нудным но тем не менее .
|
Когда человек уперся в своем заблуждении, медицина тут бессильна. Будет ужаком на скороводке извиваться, но свою неправоту не признает. В таких случаях проще перестать обращать вниматочность - сам остынет.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
22.02.2015, 11:45
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от NewWriter
|
А очень просто - прерывание по изменению сигнала на входах (кнопочка нажалась) выводит из слипа. Второй вариант - WDT периодически "будит" МК и МК быстренько опрашивает вход, на котором сидит кнопочка, и снова "засыпает", если состояние входа не изменилось. Этот вариант менее экономичный.
PS. Да, при работе ШИМа МК то будет тоже работать, это правда
|
Всем доброго утра.
Когда МК спит - изменение на входах не работает так, как тактовый генератор не работает тоже. Можно разбудить только прерыванием INT0, если нажатие будет достаточно длинным, чтобы успело вызваться прерывание, а перед этим должен запуститься тактовый генератор. Я вначале пытался разбудить прерыванием PCINT0 по заднему фронту - из Power Down не просыпается - проверено на демоплате о которой я писал выше, а использовать менее экономичные режимы сна или вывода я, думаю не имеет смысла, так как мы экономим деньги даже не на электроэнергии, на батарейках, которые будут бесполезно садиться, когда фонарь не работает.
|
|
|
|
22.02.2015, 12:04
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от Proshha
|
Работа ШИМ - это куда? В редкие моменты или в пиковое потребление, как раз тогда, когда потребителей и без того достаточно?
И, ради интереса - посмотрите потребление в статике КМОП микросхем. Оно уже и так на уровне саморазряда, и даже в динамике оно гораздо меньше потребления МК.
|
Давай, попробуем разобраться куда. Не надо спорить, что болше потребляет, логика или МК.
Представь, что Вы решили сэкономить на лампочке, когда вам не нужен яркий свет, и уменьшили напряжение на половину. При этом ток через Ваш управляющий элемент будет течь такой, как и через нагрузку, а напряжение поделится пополам между нагрузкой и управляющим транзистором. Падение мощности в нагрузке и в управляющем элементе будут равны. Значит КПД будет равен 50%.
А если вы захотите включить свою лампочку в режиме ночника, в целях экономии электроэнергии, и оставите на ней 10% напряжения? А в управляющем транзисторе упадет 90%. И КПД станет 10%.
Теперь рассмотрим ШИМ. Я думаю насыщение транзистора, с запасом, можно взять 1в. мощность рассеиваемая транзистором в этом случае будет P=1v*I(нагрузки). При этом, если мы уменьшаем напряжение в нагрузке - мы уменьшаем длительность открытого состояния. При этом коэффициент мощности рассеиваемой транзистором равен K=t(имп.)/t(периода) а это всегда меньше единицы. Кстати, Вы не задумывались, почему в китайских зарядках управляющий транзистор такой маленький, без радиатора и не греется?
Последний раз редактировалось МВА; 22.02.2015 в 15:50.
|
|
|
|
22.02.2015, 12:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от Proshha
|
Нарисовал, чтоб не казаться голословным.
|
Навскидку, чего здесь нет:
- нет подавления дребезга контактов, и сколько раз отработает D-триггер одному Аллаху известно. На этот раз конденсатор Вы забыли без кавычек;
- двойное короткое нажатие требовалось на включение подсветки заранее запомненной яркостью, а не для изменения яркости на одну дискрету. Одиночное короткое на выключение;
- длинное нажатие должно плавно менять яркость в обе стороны, по очереди (уже сказали);
- напрочь отсутствует пятнадцатиминутный таймер автоматического отключения подсветки;
Каждое длинное нажатие будет давать лишний такт на счётчик.
И, кстати, Вы не нарисовали большой радиатор для регулирующего элемента.
Последний раз редактировалось omercury; 22.02.2015 в 12:36.
|
|
|
|
22.02.2015, 12:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
использовать менее экономичные режимы сна или вывода я, думаю не имеет смысла, так как мы экономим деньги даже не на электроэнергии, на батарейках, которые будут бесполезно садиться, когда фонарь не работает.
|
Отчего же? Миллиампер-другой для батарейки - тоже хлеб.
Кстати, фонарь был в начале топика, сейчас речь про дисплей.
Сообщение от МВА
|
Представь, что Вы решили сэкономить на лампочке
|
Лампа накаливания весьма нелинейный элемент и сопротивление нити при половинной яркости значительно ниже, чем у горячей. Потери, соответственно увеличатся.
|
|
|
|
22.02.2015, 13:02
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от omercury
|
Отчего же? Миллиампер-другой для батарейки - тоже хлеб.
Кстати, фонарь был в начале топика, сейчас речь про дисплей.
Лампа накаливания весьма нелинейный элемент и сопротивление нити при половинной яркости значительно ниже, чем у горячей. Потери, соответственно увеличатся.
|
Вот, о том, что миллиампер-другой, тоже хлеб, и я говорю. что НЕ имеет смысла использовать менее экономичные режимы.
О линейности светодиода я тоже молчу. Там вообще сопротивление динамическое. По сравнению с ним лампочка просто идеально линейная.
Я имел в виду любую полезную нагрузку. И если, Вы заметили, я не использовал в расчетах сопротивление нагрузки, а только напряжение, ток и относительное распределение мощности в нагрузке и в управляющем элементе. И если на лампочке 10% от питающего напряжения, а ток в ней будет такой-же как и в управляющем элементе, потому, что они включены последовательно, то и распределение мощности будет 1/9. 10% полезной, а 90% просто на нагрев транзистора.
PS. В этом топике я не нашел обсуждения подсветки индикатора, правда, у Prosto Andriy есть тема
по ссылке https://kazus.ru/forums/showthread.php?t=110035&page=2 , где это обсуждалось, но там давно тишина.
Последний раз редактировалось МВА; 22.02.2015 в 13:45.
|
|
|
|
22.02.2015, 14:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от МВА
|
Вот, о том, что миллиампер-другой, тоже хлеб, и я говорю. что НЕ имеет смысла использовать менее экономичные режимы.
|
Почему? Кому оно мешает-то?
Тем более, что уже реализовано.
Ну да, продолжение здесь, с 17-ой страницы.
Кстати, вот идеальная модель (не учитываются задержки) Прошиного творения.
|
|
|
|
22.02.2015, 15:17
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от prosto_andriy
|
Посмотрел Ваш код, и хотя он имеет четкую структуру, я так и не понял, как в нем отфильтровывается дребезг?
Вот функция сканирования кнопки:
PHP код:
|
void key_scan(void) { if KeyPress //Если кнопка нажата { //Проверим, давно ли её нажали if (KeyNew) //Если флаг установлен (значит "давно") { count++; //Увеличиваем счётчик задержки if (count›longkey) //Если длинное нажатие { bright_ch(); //Начинаем менять компаратор ШИМ count--; //Декремент счетчика(увеличивать-то его больше никчему) PWM_on = 1; } //Выход } else //Нажали только что, на это и укажем { KeyNew = 1; //Устанавливаем флаг } //Выход systemClock = 0; //Сброс таймаута выключения подсветки } else //Если кнопка не нажата Это может означать, { //что её и не нажимали или только что отпустили, вот это и проверим даьше if (KeyNew) //Если флаг установлен (только что отпустили) { //Проверим, до скольки успели досчитать if (count‹longkey) //Если меньше длинного(короткое нажатие) {//Можно было и объединить, но не люблю я двойные условия, МК их всё равно по очереди сделает if (count›shortkey) //Если больше минимального (короткое, но не дребезг) { led_on_off(); //Включаем/выключаем фонарь } //Иначе - Это был дребезг } else {Dir_on=~Dir_on;} //Меняем направление изменения яркости } clr_var(); //Сброс переменных } //Выход KeyEXE = 0; //Запрет опроса кнопок #asm("sleep") //Усыпляем МК }
|
Мне непонятно, когда устанавливается флаг "KeyNew"? Сразу же после нажатия кнопки? А сбрасывается он сразу после её отпускания?
Объясните пожалуйста, если Вас это не затруднит!
|
Я вижу, что все так отвлеклись на Proshha, что Prosto Andriy никто не ответил.
Судя по коду, флаг "KeyNew" устанавливается сразу после нажатия, когда кнопка нажата, но флаг еще не стоит функция переходит к выполнению }else{, и там есть строчка, которая выполняется безусловно "KeyNew=1", сбрасывается этот флаг в функции
clr_var(); //Сброс переменных.
А защита от дребезга строчкой if (count›shortkey) //Если больше минимального (короткое, но не дребезг), если переменная count меньше shortkey - то функция включения/выключения пропускается. Значит это был дребезг.
Последний раз редактировалось МВА; 22.02.2015 в 15:42.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:14.
|
|