Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Непрочитано 18.04.2011, 00:24  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от oleg_harp Посмотреть сообщение
Мерцание исчезло. Других проблем не было.
Очень хорошо.

poligon_85, Теперь у Вас 2 варианта на выбор...

Сообщение от poligon_85 Посмотреть сообщение
А так не прокатит?
К сожалению нет. Так отключится таймер, и весь опрос кнопки вместе с ним.
Всё достаточно просто. Кнопку надо подключить на вход внешнего прерывания. Пока кнопка не нажата, контроллер спит почти целиком. Будет работать генератор, контроллер прерываний и цепи запуска. При нажатии кнопки отключается внешнее прерывание прямо в обработчике этого прерывания и включается таймер. Дальше всё работает точно так же, как сейчас. При выключении фонаря, надо выдержать какое-то время (хотя и необязательно), и включить внешнее прерывание отключив таймер.
Реклама:
omercury вне форума  
Непрочитано 18.04.2011, 00:38  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Цитата:
Дык... ещё в начале сказал
st_1, это мы помним. И я лично очень уважаю Ваше мнение. Но ведь таймер уже ШИМит светодиод. Почему бы его не использовать для сканирования кнопки? По флагам в цикле МК должен работать постоянно, пока светит диод. У меня же он просыпается по таймеру и смотрит - как там кнопка? Всё остальное время честно спит.

а вот это следующий шаг...
https://kazus.run/forums/showpost.ph...8&postcount=86
https://kazus.run/forums/showpost.ph...&postcount=133
omercury вне форума  
Непрочитано 18.04.2011, 19:14  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
Пока кнопка не нажата, контроллер спит почти целиком. Будет работать генератор, контроллер прерываний и цепи запуска.
#asm("sleep") тогда что делает? Ну в смысле по каким критериям контроллер просыпается? Только внешнее прерывание? И зачем тогда это состояние если остается включенным таймер при этом?
poligon_85 вне форума  
Непрочитано 18.04.2011, 19:24  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

До сих пор у нас просыпалось по таймеру. А вообще эти режимы описаны в Datasheet в разделе Power Management and Sleep Modes. Например http://www.gaw.ru/html.cgi/txt/ic/At...vr/atmega8.htm
omercury вне форума  
Непрочитано 18.04.2011, 20:07  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Ясно. Спасибо
poligon_85 вне форума  
Непрочитано 29.04.2011, 01:43  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию 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.
artyomugr вне форума  
Непрочитано 29.04.2011, 10:02  
oleg_harp
Прописка
 
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
oleg_harp на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от artyomugr Посмотреть сообщение
Я эту проблему решал таким образом:
Задачу ТС Вы не выполнили (разные действия при коротком и длительном нажатии кнопки, и регулировка яркости). А если попробуете выполнить, то поймёте, что код Ваш не подойдёт из за
Код:
delay_ms(50);
Дребезг при отжатии кнопки Вы не обрабатываете. При нажатии дребезг вы обрабатываете некорректно: через 50mS Вы ставите flags, а если через 50 mS butt уже не равно 0(это был дребезг)? Так что код Ваш будет работать в Proteus, но через раз в реале, а ТС для его задачи вообще не подходит.
oleg_harp вне форума  
Непрочитано 29.04.2011, 10:20  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Этот код работает так как реализован в устройстве.
Только я ошибся в первой задержке...
бегло писал код по памяти, так как исходник дома в проекте.
первая задержка должна быть 100ms не меньше.
Насчет ШИМ, да Вы правы. Работать не будет должным образом, но опять же, посидев с кодом можно выполнить ТЗ с ШИМ использованием.
artyomugr вне форума  
Непрочитано 29.04.2011, 10:47  
oleg_harp
Прописка
 
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
oleg_harp на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от artyomugr Посмотреть сообщение
Этот код работает так как реализован в устройстве.
Попробуйте очень быстро понажимать и поотпускать кнопку в своём устройстве. Вы будете сильно удивлены. Если нет, Вам очень повезло с кнопкой.
oleg_harp вне форума  
Непрочитано 29.04.2011, 16:02  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

ни каких проблем нет при быстром нажатии и отпускании
там все решает задержка delay_ms(100);
этот код мне надо был для реализации сервис меню в проекте.
artyomugr вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Электронная библиотека 11242 29.12.2015 23:45
Как правильно отследить импульс sdsrem Микроконтроллеры, АЦП, память и т.д 8 17.08.2010 21:28
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33


Часовой пояс GMT +4, время: 17:14.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.