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

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

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

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

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

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


 
Опции темы
Непрочитано 03.02.2016, 11:23  
Реостат
Частый гость
 
Регистрация: 29.10.2015
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Реостат на пути к лучшему
По умолчанию Зажание кнопки (STM32F4)

Добрый день.
Исследую внешние прерывания для STM32F4 на плате Discovery. Не могу понять, как реализовать "зажатие" кнопки. Т.е. длительный процесс.

Сейчас я сделал простое нажатие и отжатие кнопки (мгновенное действие). Т.е. простое переключение диодов.

А хочется сделать это:
Зажал кнопку - загорелся зеленый диод.
Убрал палец с кнопки - загорелся оранжевый диод.

Как обработчик прерывания правильно написать/сконфигурировать?
Реклама:
Реостат вне форума  
Непрочитано 03.02.2016, 11:56  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,779
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Зажание кнопки (STM32F4)

А если использовать флаг нажатия кнопки, нажал кнопку - выставить флаг. В цикле проверять флаг, есть флаг, но не нажата кнопка, зажечь желтый и убрать флаг.
andries5 вне форума  
Непрочитано 03.02.2016, 12:00  
Реостат
Частый гость
 
Регистрация: 29.10.2015
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Реостат на пути к лучшему
По умолчанию Re: Зажание кнопки (STM32F4)

Да, да. Сейчас флаг состояния как раз используется.
Ааа, смысле в основном цикле делать проверку?
Реостат вне форума  
Непрочитано 03.02.2016, 12:08  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Зажание кнопки (STM32F4)

На таком камне есть смысл запускать RTOS. А там уже делать проверку кнопок в отдельной задаче.
Easyrider83 вне форума  
Непрочитано 03.02.2016, 12:21  
Реостат
Частый гость
 
Регистрация: 29.10.2015
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Реостат на пути к лучшему
По умолчанию Re: Зажание кнопки (STM32F4)

До RTOS пока еще не дошел.
Т.е. Вы хотите сказать, что отслеживание длительного процесса зажатия кнопки одним только внешним прерыванием не отделается?


А есть тут возможность отслеживать кроме нажатия кнопки еще и ее отжатие?
Т.е. при событии "кнопка нажата" ставим флаг состояния = ON. При событии "кнопка отпущена" - OFF.
Реостат вне форума  
Непрочитано 03.02.2016, 12:41  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Зажание кнопки (STM32F4)

Используйте прерывание по таймеру. По нажатию инкременируйте переменную. По отпусканию оценивайте результат.
RTOS не бойтесь. Там все просто. Руки сразу развяжутся.
Easyrider83 вне форума  
Непрочитано 03.02.2016, 13:56  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,779
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Зажание кнопки (STM32F4)

Сообщение от Реостат Посмотреть сообщение
А есть тут возможность отслеживать кроме нажатия кнопки еще и ее отжатие?
Т.е. при событии "кнопка нажата" ставим флаг состояния = ON. При событии "кнопка отпущена" - OFF.
Конечно есть. Можно вызвать прерывание по Rising событию и по Falling событию. В прерывании определить какое именно событие произошло и выполнить соответствующее действие. Не забывать про дребезг.
andries5 вне форума  
Непрочитано 03.02.2016, 21:09  
Реостат
Частый гость
 
Регистрация: 29.10.2015
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Реостат на пути к лучшему
По умолчанию Re: Зажание кнопки (STM32F4)

Да, и в самом деле - флаг "EXTI_Trigger_Rising_Falling".
Реостат вне форума  
Непрочитано 04.02.2016, 02:20  
kolobok0
Частый гость
 
Регистрация: 10.09.2010
Адрес: Резиновая
Сообщений: 45
Сказал спасибо: 3
Сказали Спасибо 14 раз(а) в 12 сообщении(ях)
kolobok0 на пути к лучшему
Счастье Re: Зажание кнопки (STM32F4)

Сообщение от Реостат Посмотреть сообщение
Добрый день.
...Не могу понять, как реализовать "зажатие" кнопки. Т.е. длительный процесс....Как обработчик прерывания правильно написать/сконфигурировать?
Тут уже выше всё ключевое прозвучало. Первое(чтоб не с граблей начинать) - проникнитесь темой дребезга контактов. Пока это не пощупаете - все Ваши алгоритмы будут на уровне пятиклассника.

вторую тему, я бы сразу обозвал - обработка нескольких клавиш(клавиатуры). Пускай это будет тупо несколько входов, а не матрица, пока.

сразу пишите по "взрослому" - нажатие, двойное нажатие, удержание(автоповтор клавиши), комбинация клавиш.

Если в рукопашную, чисто программно - то обычно прикрывают(как в писюке биос) тонким слоем обработчика аппаратуру(в данном случае обработчик прерывания). Ну и софтово разруливать состояния, функционал и внешний интерфейс (Ваш API).

Но можно и аппаратуру заставить выполнять какую-либо работу. Но это можно потом - более глубже задуматься, что можно "убрать в железо" мк.

обычно, чтоб отсечь дребезг - используют квантованный временной интервал. Обычно это один из таймеров.

И тут уже прозвучало замечание - для такой мощи как STM32F - делать на супер циклах можно в случае: когда Вы понимаете точно, что хотите добиться(в чём выигрыш). ну и в чём проигрыш конечно-же. Например: если Вы делаете на коленке чисто помигать светодиодами - тащить РТОС это явно перебор. А вот если это серьёзный распределённый проект(в котором сидят несколько программеров) - то использовать супер цикл= надо иметь веские аргументы.

удачи вам
(круглый)
kolobok0 вне форума  
Непрочитано 04.02.2016, 08:19  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Зажание кнопки (STM32F4)

Сообщение от kolobok0 Посмотреть сообщение
сразу пишите по "взрослому" - нажатие, двойное нажатие, удержание(автоповтор клавиши), комбинация клавиш.
Пусть вначале напишет для обычных нажатий, со срабатыванием при нажатии. Потом уже дальше "по-взрослому" будет. А то запутается. Пытаться сразу сделать всё сразу, не делав раньше даже простого - сломать себе мозг. Методы для обычной линейной клавиатуры и для матричной будут разными.
Да и далеко не в каждой клавиатуре нужен сразу весь набор обработок нажатий. То есть, если кнопки клавиатуры только на вкл/выкл, то зачем там автоповтор и длительное нажатие. Как бы принцип разумной достаточности.
NewWriter вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пишем свое API Easyrider83 Embedd С 96 22.05.2016 01:23
Как отследить короткое и продолжительное нажатие кнопки в фонаре? poligon_85 Микроконтроллеры, АЦП, память и т.д 414 08.04.2015 20:53
Режимы сна Атмега-8 putmannn AVR 123 08.03.2013 15:30
Западают от холода мембранные кнопки! Sukhanov Производственное оборудование 16 09.02.2012 07:32
usb-flash адаптер - самостирание от кнопки neokolyan Микроконтроллеры, АЦП, память и т.д 12 23.03.2011 17:33


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot