Кнопки и кнопочный интерфейс

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

у меня тоже есть проекты с подобным алгоритмом, но обработку кнопок я делаю не так: использую сканирование если есть дин. индикация или много кнопок, или счетчики итераций, (но всё единым блоком, считаю нечего там делить) за алгоритм с применением одного счетчика спасибо.
А вот алгоритм состояний использую вместо делай_мс: в начале функции счетчик, который заряжается для создания задержки, а саму функцию размазываю по свитч-кейс.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 225
Зарегистрирован: Сб янв 14, 2012 22:53:50

Сообщение philosoraptor »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3284504#p3284504"]из минусов - в таком включении (из осн. цикла) 1) при любом длительном вычислении (цикле, прерывании, ожидании события) клава мрёт и возможности нажать "Ctrl+Alt+Del" уже не будет, и при большом количестве тяжестей в коде в первую очередь будет страдать клавиатурный ввод[/uquote]

О, а вот и признак профнепригодности #1, когда у нас вся программа стопорится, ожидая события. Это уже клиника. Причем справедливо что для рилтайм, что для кодинга как такового вообще.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15600
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Подкапаю "дегтю"....
:wink:
У каждого из семейств МК имеются некоторые нюсансы в системе команд и устройстве ядра.
Поэтому алгоритм подогнанный и наиболее успешно работающий на одном из семейств может оказаться весьма неудачным для применения на другом семействе и наоборот.
Приходится всегда выбирать решение исходя из конкретной схемотехники применяемых датчиков и особенностей семейства применяемого в схеме МК.
8)
Насчет "стопорится исполнение до события" - ВСЕ зависит от цели ВСЕГО устройства.
Поэтому может в разных случаях быть как ОБЯЗАТЕЛЬНЫМ так и НЕДОПУСТИМЫМ для применения.
По крайней мере "безысходный останов в ожидании" парируется дополнительным таймером обработки аварийного состояния (аварийный останов по повреждении клавиатуры/Оператора).
:wink:
Нашел транзистор. Понюхал.
Сообщения: 187
Зарегистрирован: Пт апр 01, 2011 21:53:28

Сообщение SV12 »

Если в проекте много кнопок и ламп, я все это вешаю на микросхему TPIC6B595 (74HC595 + ULN2803). 8 кнопок + 8 ламп.
В регистр (595) записывается один 0 и 8 раз "двигается". В процессе зажигая(если нужно) лампы и опрашивая кнопки. Все это тактируется одним из таймеров (Timer0) чтоб свечение ламп было ровным. По окончании 8 тактов имеем в переменной состояние кнопок. НО эта информация не передается сразу на обработку. Состояние трех последних тактов "накапливается" в трех переменных и при их равенстве отправляется на обработку. Это и есть защита от дребезга. В приложенном примере - отправляется в подпрограмму-декодер после чего получаю код нажатой кнопки и флаг состояния. Этот код и обрабатывается программой. В примере программа реагирует и на длинное нажатие кнопок - декодер выдает соответствующий код.

Пример - это кусок бОльшего проекта. Программа на BascomAVR. Пр нажатии кнопки загорится соответствующая ей лампа, если её удерживать, то эта лампа погаснет, а остальные загорятся. При отпускании кнопки все лампы гаснут.

TEST_V14.bas - программа
drv_595_key_lamp_dim.bas - "драйвер" . Переменные и описание
drv_595_key_lamp_sub.bas - Программа "драйвера". Здесь же ПП "Sb_595_test1" Которая "реагирует" на кнопки и зажигает лампы.

Мне так удобно писать кусками. При необходимости цепляя код к нужному проекту.

Есть ещё нюансы в работе с кнопками: Чаще всего кнопку обрабатывают сразу после нажатия, НО по моему лучше это делать после отпускания кнопки, особенно если эта же кнопка должна еще реагировать и на длинное нажатие. А если нужно реагировать на комбинированные нажатия, то не представляю как это сделать до отпускания кнопок. В примере программа реагирует и на нажатие (зажигает 1 лампу) и на отпускание (гаснет все). А так же на удержание(все горят, кроме одной).

P.S. В схеме забыл нарисовать диоды перед каждой кнопкой.
Вложения
Пример на TPIC6B595.7z
Пример на TPIC6B595
(34.75 КБ) 121 скачивание
Одни хотели бы понимать то, во что верят, другие - поверить в то, что пнимают.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

[uquote="pyzhman",url="/forum/viewtopic.php?p=3278984#p3278984"]
довольно часто в поделках (причем не только любительских)
Примеры в студию. Особенно того, что в скобках.[/uquote] вот, из того, что у меня есть: (правда не кнопки, а энкодеры) климатконтроль фольксваген поло, и стиралка LG - стоит крутить чуть быстрее и... климат сразу по несколько пунктов добавляет, а стиралка вообще в игнор уходит.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Ответить

Вернуться в «AVR»