http://www.forum.getchip.net/ |
|
Кнопка http://www.forum.getchip.net/viewtopic.php?f=16&t=859 |
Страница 1 из 2 |
Автор: | -sergius- [ 30 апр 2018, 18:36 ] |
Заголовок сообщения: | Кнопка |
Здравствуйте уважаемые гуру Algoritm Builder. Покажите на примере как реализовать в Algoritm Builder короткое и длинное нажатие кнопки и тоже самое но в прерывании INT0. Я новичок в этом деле, по этому желательно с комментариями. Заранее благодарен! |
Автор: | SVN [ 30 апр 2018, 20:09 ] |
Заголовок сообщения: | Re: Кнопка |
Можно посмотреть или (в шаблонах модуль EX_Key). ИМХО. В прерывании по INT0 кнопки опрашивать не кошерно. |
Автор: | -sergius- [ 30 апр 2018, 22:36 ] |
Заголовок сообщения: | Re: Кнопка |
Автор: | SVN [ 01 май 2018, 07:04 ] |
Заголовок сообщения: | Re: Кнопка |
Автор: | -sergius- [ 01 май 2018, 13:15 ] |
Заголовок сообщения: | Re: Кнопка |
Автор: | SVN [ 01 май 2018, 15:59 ] |
Заголовок сообщения: | Re: Кнопка |
Если речь идут о реализации с помощью модуля EX_Key, то вначале нужно разобраться в алгоритме данного модуля. Ты это уже сделал? Если нет, то подскажу: В макрос «по нажатию» вход производится однократно, только в момент определения нажатия кнопки. В макрос «по удержанию» вход производится периодически – пока удерживается кнопка. В макрос «по отпусканию» вход производится так же однократно, как и при нажатии только в момент определения отпускания кнопки. Таким образом как я писал ранее, короткое нажатие лучше определять когда кнопка будет отпущена. А вот длительное нажатие можно зафиксировать в макросе «по удержанию». Что для этого понадобится? Создать дополнительно переменную счётчика удержание данной кнопки (назовём её допустим Timer_Key). Где будешь создавать данную переменную (в SRAM или в РОН) дело вкуса. Так вот количество отсчётов в данной переменной и будет соответствовать короткому или длительному нажатию. Увеличение на единицу данной переменной производится в макросе «по удержанию». Там же проверяется и результат суммы данной переменной. Если она достигла значения для длительного нажатия, то фиксируем данный момент (к примеру зажигаем красный светик LED_Red). В макросе «по отпусканию» проверяем состояние данного светика LED_Red. Если он не активен, то зажигаем зелёный светик (LED_Green - который указывает на короткое нажатие). Если же светик LED_Red активен, то тушим его и за одно очищаем переменную Timer_Key. Надеюсь сам догадаешься как можно потушить зелёный светик если он будет активирован. |
Автор: | -sergius- [ 02 май 2018, 12:55 ] | ||
Заголовок сообщения: | Re: Кнопка | ||
Проверьте пожалуйста и дайте свои рекомендации.
|
Автор: | SVN [ 02 май 2018, 14:54 ] |
Заголовок сообщения: | Re: Кнопка |
Закономерные ошибки начинающих: Не учтено быстродействие МК при выполнении процедур. Ты даже моргнуть не успеешь, а переменная Timer_Key переполнится несколько десятков раз. Если предположить, что твой МК остался на заводской частоте, то это 1 МГц… то бишь твоя переменная Timer_Key будет прибавлять 1 почти примерно каждые 10 мкс. А за секунду переменная сколько раз переполнится? Вот и я о том же… Подпрограмма Button в твоём варианте должна вызываться не из тела программы, а по какому либо прерыванию (к пимеру по Timer0 или Timer1.) И ещё… порт DDRB.0 должен быть сконфигурирован на вход, а не на выход… иначе при нажатии кнопки выгорит порт. PS. А вообще лучше пример свой кидать сюда полностью, а не скрин. |
Автор: | -sergius- [ 02 май 2018, 17:21 ] | ||
Заголовок сообщения: | Re: Кнопка | ||
|
Автор: | SVN [ 02 май 2018, 18:30 ] | |||
Заголовок сообщения: | Re: Кнопка | |||
|
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |