Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
20.03.2013, 12:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от metrA85
|
Эдак можно столько байт под флаги нарубить... куда экономичнее будет юзать отдельные биты для флага (на то он и флаг - емеет два состояния 0 и 1)
|
А если не примитивное пользование флагов типа
PHP код:
|
if ( ( flag1 & ( ~flag2 ) ) || ( flag3 & ( flag1 || flag2 ) ) )
{
.....
}
|
С битовыми флагами то как тут быть? А если их исчо до дури, и в одно слово они не лезут?
|
|
|
|
20.03.2013, 13:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от Easyrider83
|
Ибо на проверку установки бита уходит еще несколько циклов.
|
Это Вы о каком-то конкретном процике, а здесь, насколько я вижу, прицик-то не задан. В атмелах, сами знаете - всего одна инструкция.
__________________
There's always more than one way to skin a cat.
|
|
|
|
20.03.2013, 13:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от Boba_spb
|
А если не примитивное пользование флагов
|
Здесь конкретный пример, а не вообще о флагах.
__________________
There's always more than one way to skin a cat.
|
|
|
|
20.03.2013, 13:05
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Еще вариант - проверять порт по маске. Кнопки-то всяко не по разным портам разбросаны. Если маска не ноль - какая-то кнопка нажата, подняли флаг, в теле обработали нажатие. Хоть тем же инкриментом. Там уже без разницы.
Еще способ - по прерыванию PIN CHANGE. В прерывании прочитали порт (без этого не сбросить флага прерывания), выключили это прерывание, подняли флаг. В таймере увидели поднятый флаг, опустили, подняли другой флаг или инкременировали переменную. В теле проверили. Если больше определенного значения, значит нажата кнопка. Это обработка антидребезга.
|
|
|
|
20.03.2013, 13:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от Easyrider83
|
Еще вариант - проверять порт по маске.
|
Это уже было - По байту под каждую кнопку - многовато,... : "#define READKEYB_ ((~PINx) & _KEYS_MASK_)"
Сообщение от Easyrider83
|
Еще способ - по прерыванию PIN CHANGE.
|
- там же.
__________________
There's always more than one way to skin a cat.
|
|
|
|
20.03.2013, 13:18
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
tempora, это все очень хорошо и правильно. Просто чужие коды лопатить утомительно. Важно ведь идея, а не сотня чужих процедур сомнительного происхождения.
|
|
|
|
20.03.2013, 13:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от Easyrider83
|
Просто чужие коды лопатить утомительно.
|
В некоторых случаях выбор настолько небогат, что лучше-таки "лопатить".
__________________
There's always more than one way to skin a cat.
|
|
|
|
20.03.2013, 13:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,730
Сказал спасибо: 2,439
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Так пусть и лопатит,кому насоветовали. Главное-напредлагать вариантов,чтобы выбирать или обдумать было что.
|
|
|
|
20.03.2013, 13:38
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Вот вы говорите "дребезг-антидребезг"... Запускаете счётчики после первого непустого чтения клавы. И когда счётчик достигнет какого-то значения, принимаете решение о нажатии кнопки.
Мне кажется всё это ни к чему. Механический дребезг присущ всем кнопкам, тут спорить трудно. Первые несколько милисекунд (не более 5мс) сигнал от нажатия прыгает вверх-вниз, может создаться ощущение, что пользователь многократно нажал кнопку.
Так опрашивайте клаву с периодом большим, чем дребезг, например 20мс, или 50 раз в секунду. И всего делов-то. Даже если при опросе вы попали область дребезга - то и хрен с ним. Поймали единичку, значит юзер нажал кнопку. Поймали нолик при нажатой кнопке - ничего страшного, через 20 мс поймаем точно единичку. И к следующему опросу дребезг заведомо кончится. И счётчики не нужны.
А использование подобных накопительных счётчиков - это есть борьба с помехами. Типа, чтобы не было ложных срабатываний от импульсных помех. Ну, если у вас по линии клавы гуляют такие большие помехи, то тут уже надоть и фильтры ставить, и программные счётчики применять. Но такая ситуация встречается нечасто. И не имеет никакого отношения к антидребезгу ...
|
|
|
|
20.03.2013, 13:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Опрос кнопки/клавиатуры
Сообщение от Yurkin2007
|
Даже если при опросе вы попали область дребезга - то и хрен с ним.
|
То есть, если пользователь нажал "Тише", а программа считала и выполнила "Громче" - то " и хрен с ним"? Не самое удачное решение...
__________________
There's always more than one way to skin a cat.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:44.
|
|