Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 07 апр 2020, 19:32

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Кнопка
СообщениеДобавлено: 30 апр 2018, 18:36 
Не в сети

Зарегистрирован: 30 апр 2018, 18:06
Сообщения: 9
Здравствуйте уважаемые гуру Algoritm Builder. Покажите на примере как реализовать в Algoritm Builder короткое и длинное нажатие кнопки и тоже самое но в прерывании INT0. Я новичок в этом деле, по этому желательно с комментариями. Заранее благодарен!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 30 апр 2018, 20:09 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3791
Откуда: Россия
Можно посмотреть тут или тут (в шаблонах модуль EX_Key).

ИМХО. В прерывании по INT0 кнопки опрашивать не кошерно. ;)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 30 апр 2018, 22:36 
Не в сети

Зарегистрирован: 30 апр 2018, 18:06
Сообщения: 9
SVN писал(а):
Можно посмотреть тут или тут (в шаблонах модуль EX_Key).

ИМХО. В прерывании по INT0 кнопки опрашивать не кошерно. ;)


По моему шаблон EX_Key работает неверно. Событие долгое нажатие выполнится только после выполнения простого нажатия кнопки. Или я не прав?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 01 май 2018, 07:04 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3791
Откуда: Россия
-sergius- писал(а):
Событие долгое нажатие выполнится только после выполнения простого нажатия кнопки. Или я не прав?

Прав, так и есть.
Не прав лишь в своём утверждении, что шаблон EX_Key работает не верно. ;)
Цитата:
По моему шаблон EX_Key работает неверно.

Он работает верно… потому там есть три подпрограммы для выполнения действий для одной кнопки (по НАЖАТИЮ; по УДЕРЖАНИЮ; по ОТПУСКАНИЮ).
Вообще-то логика работы при использовании нескольких действий (по кратковременному и по длительному нажатию) от одной кнопки, делается всегда по отпусканию. Только таким образом можно достоверно утверждать какое было нажатие – коротким или длинным. ;)
Вот как-то так.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 01 май 2018, 13:15 
Не в сети

Зарегистрирован: 30 апр 2018, 18:06
Сообщения: 9
SVN писал(а):
-sergius- писал(а):
Событие долгое нажатие выполнится только после выполнения простого нажатия кнопки. Или я не прав?

Прав, так и есть.
Не прав лишь в своём утверждении, что шаблон EX_Key работает не верно. ;)
Цитата:
По моему шаблон EX_Key работает неверно.

Он работает верно… потому там есть три подпрограммы для выполнения действий для одной кнопки (по НАЖАТИЮ; по УДЕРЖАНИЮ; по ОТПУСКАНИЮ).
Вообще-то логика работы при использовании нескольких действий (по кратковременному и по длительному нажатию) от одной кнопки, делается всегда по отпусканию. Только таким образом можно достоверно утверждать какое было нажатие – коротким или длинным. ;)
Вот как-то так.


Хорошо. Подскажите пожалуйста, как реализовать на одной кнопке короткое и длинное нажатие.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 01 май 2018, 15:59 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3791
Откуда: Россия
Если речь идут о реализации с помощью модуля EX_Key, то вначале нужно разобраться в алгоритме данного модуля. Ты это уже сделал? Если нет, то подскажу: В макрос «по нажатию» вход производится однократно, только в момент определения нажатия кнопки. В макрос «по удержанию» вход производится периодически – пока удерживается кнопка. В макрос «по отпусканию» вход производится так же однократно, как и при нажатии только в момент определения отпускания кнопки.
Таким образом как я писал ранее, короткое нажатие лучше определять когда кнопка будет отпущена. А вот длительное нажатие можно зафиксировать в макросе «по удержанию». Что для этого понадобится? Создать дополнительно переменную счётчика удержание данной кнопки (назовём её допустим Timer_Key). Где будешь создавать данную переменную (в SRAM или в РОН) дело вкуса.
Так вот количество отсчётов в данной переменной и будет соответствовать короткому или длительному нажатию. Увеличение на единицу данной переменной производится в макросе «по удержанию». Там же проверяется и результат суммы данной переменной. Если она достигла значения для длительного нажатия, то фиксируем данный момент (к примеру зажигаем красный светик LED_Red).
В макросе «по отпусканию» проверяем состояние данного светика LED_Red. Если он не активен, то зажигаем зелёный светик (LED_Green - который указывает на короткое нажатие). Если же светик LED_Red активен, то тушим его и за одно очищаем переменную Timer_Key.
Надеюсь сам догадаешься как можно потушить зелёный светик если он будет активирован.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 02 май 2018, 12:55 
Не в сети

Зарегистрирован: 30 апр 2018, 18:06
Сообщения: 9
Проверьте пожалуйста и дайте свои рекомендации.


Вложения:
button.jpg
button.jpg [ 78.79 КБ | Просмотров: 2702 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 02 май 2018, 14:54 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3791
Откуда: Россия
Закономерные ошибки начинающих:
Не учтено быстродействие МК при выполнении процедур. Ты даже моргнуть не успеешь, а переменная Timer_Key переполнится несколько десятков раз. Если предположить, что твой МК остался на заводской частоте, то это 1 МГц… то бишь твоя переменная Timer_Key будет прибавлять 1 почти примерно каждые 10 мкс. А за секунду переменная сколько раз переполнится? Вот и я о том же…
Подпрограмма Button в твоём варианте должна вызываться не из тела программы, а по какому либо прерыванию (к пимеру по Timer0 или Timer1.)
И ещё… порт DDRB.0 должен быть сконфигурирован на вход, а не на выход… иначе при нажатии кнопки выгорит порт.

PS. А вообще лучше пример свой кидать сюда полностью, а не скрин.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 02 май 2018, 17:21 
Не в сети

Зарегистрирован: 30 апр 2018, 18:06
Сообщения: 9
SVN писал(а):
Закономерные ошибки начинающих:
Не учтено быстродействие МК при выполнении процедур. Ты даже моргнуть не успеешь, а переменная Timer_Key переполнится несколько десятков раз. Если предположить, что твой МК остался на заводской частоте, то это 1 МГц… то бишь твоя переменная Timer_Key будет прибавлять 1 почти примерно каждые 10 мкс. А за секунду переменная сколько раз переполнится? Вот и я о том же…
Подпрограмма Button в твоём варианте должна вызываться не из тела программы, а по какому либо прерыванию (к пимеру по Timer0 или Timer1.)
И ещё… порт DDRB.0 должен быть сконфигурирован на вход, а не на выход… иначе при нажатии кнопки выгорит порт.

PS. А вообще лучше пример свой кидать сюда полностью, а не скрин.


Вот пожалуйста пример. Обработку кнопки поместил в прерывание по таймеру, а вот как его правильно рассчитать я пока не понимаю. Подскажите что да как!


Вложения:
Кнопка (нажать или удержать).zip [10.92 КБ]
Скачиваний: 82
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Кнопка
СообщениеДобавлено: 02 май 2018, 18:30 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3791
Откуда: Россия
Цитата:
Обработку кнопки поместил в прерывание по таймеру, а вот как его правильно рассчитать я пока не понимаю. Подскажите что да как!

Вложение:
1.png
1.png [ 26.26 КБ | Просмотров: 2685 ]


Вложение:
-sergius-_Button.zip [7.45 КБ]
Скачиваний: 101


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB