Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.04.2011, 00:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от oleg_harp
|
Мерцание исчезло. Других проблем не было.
|
Очень хорошо.
poligon_85, Теперь у Вас 2 варианта на выбор...
Сообщение от poligon_85
|
А так не прокатит?
|
К сожалению нет. Так отключится таймер, и весь опрос кнопки вместе с ним.
Всё достаточно просто. Кнопку надо подключить на вход внешнего прерывания. Пока кнопка не нажата, контроллер спит почти целиком. Будет работать генератор, контроллер прерываний и цепи запуска. При нажатии кнопки отключается внешнее прерывание прямо в обработчике этого прерывания и включается таймер. Дальше всё работает точно так же, как сейчас. При выключении фонаря, надо выдержать какое-то время (хотя и необязательно), и включить внешнее прерывание отключив таймер.
|
|
|
|
18.04.2011, 00:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Цитата:
|
Дык... ещё в начале сказал
|
st_1, это мы помним. И я лично очень уважаю Ваше мнение. Но ведь таймер уже ШИМит светодиод. Почему бы его не использовать для сканирования кнопки? По флагам в цикле МК должен работать постоянно, пока светит диод. У меня же он просыпается по таймеру и смотрит - как там кнопка? Всё остальное время честно спит.
а вот это следующий шаг...
https://kazus.ru/forums/showpost.php...8&postcount=86
https://kazus.ru/forums/showpost.php...&postcount=133
|
|
|
|
18.04.2011, 19:14
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от omercury
|
Пока кнопка не нажата, контроллер спит почти целиком. Будет работать генератор, контроллер прерываний и цепи запуска.
|
#asm("sleep") тогда что делает? Ну в смысле по каким критериям контроллер просыпается? Только внешнее прерывание? И зачем тогда это состояние если остается включенным таймер при этом?
|
|
|
|
18.04.2011, 19:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
До сих пор у нас просыпалось по таймеру. А вообще эти режимы описаны в Datasheet в разделе Power Management and Sleep Modes. Например http://www.gaw.ru/html.cgi/txt/ic/At...vr/atmega8.htm
|
|
|
|
18.04.2011, 20:07
|
|
Временная регистрация
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Ясно. Спасибо
|
|
|
|
29.04.2011, 01:43
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Здравствуйте уважаемые.
Я эту проблему решал таким образом:
if (butt==0){
delay_ms(50);
flags=1; // ставим флаг если кнопка нажата
tmr++;
if (tmr›40){
led_1=1;
flags=0; // выполнили команду сбрасываем флаг
tmr=0; // и сбрасываем счетчик
}
}
if (butt!=0){ // если кнопка отжата и флаг установлен
tmr=0;
if (flags==1){
led_2=1; // выполняем следующую команду
flags=0;
}
}
// дополнительная защита от переполнения переменной
if (tmr›100){
tmr=0;
}
Последний раз редактировалось artyomugr; 29.04.2011 в 20:23.
|
|
|
|
29.04.2011, 10:02
|
|
Прописка
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от artyomugr
|
Я эту проблему решал таким образом:
|
Задачу ТС Вы не выполнили (разные действия при коротком и длительном нажатии кнопки, и регулировка яркости). А если попробуете выполнить, то поймёте, что код Ваш не подойдёт из за Дребезг при отжатии кнопки Вы не обрабатываете. При нажатии дребезг вы обрабатываете некорректно: через 50mS Вы ставите flags, а если через 50 mS butt уже не равно 0(это был дребезг)? Так что код Ваш будет работать в Proteus, но через раз в реале, а ТС для его задачи вообще не подходит.
|
|
|
|
29.04.2011, 10:20
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Этот код работает так как реализован в устройстве.
Только я ошибся в первой задержке...
бегло писал код по памяти, так как исходник дома в проекте.
первая задержка должна быть 100ms не меньше.
Насчет ШИМ, да Вы правы. Работать не будет должным образом, но опять же, посидев с кодом можно выполнить ТЗ с ШИМ использованием.
|
|
|
|
29.04.2011, 10:47
|
|
Прописка
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
Сообщение от artyomugr
|
Этот код работает так как реализован в устройстве.
|
Попробуйте очень быстро понажимать и поотпускать кнопку в своём устройстве. Вы будете сильно удивлены. Если нет, Вам очень повезло с кнопкой.
|
|
|
|
29.04.2011, 16:02
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?
ни каких проблем нет при быстром нажатии и отпускании
там все решает задержка delay_ms(100);
этот код мне надо был для реализации сервис меню в проекте.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:26.
|
|