![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
dimoZa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 9.10.2005 Репутация: нет Всего: нет |
С какой частотой необходимо обращаться к портам ввода (PINx), чтобы успеть отследить любое нажатие кнопки с любой длительностью, с любым периодом и как при этом лучши поступать - подключать подтягивающие резисторы или нет.
|
|||
|
||||
Alexei |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 382 Регистрация: 20.8.2003 Репутация: 4 Всего: 4 |
Раз 5 в сек хватит.
Можно припаять снаружи ![]() Используй Pin Change Interrupt,или опрашивай все кнопки оптом, для установления нажатия. Обязательно задержка на подавление "дребезга" 15-50 мс. Посмотри на сайте Атмел док. AVR240, AVR243 |
||||
|
|||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
50-100 раз в секунду, чтобы отследить дребезг. Подсоеденить нужно матрицей. Метод анализа: "скользящий ноль".
СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
dimoZa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 9.10.2005 Репутация: нет Всего: нет |
Объясните вразумительно и толково, что такое дребезг клавиатуры, а то в общих чертах вроде понимаеться, но четкого представления нет и в литературе никак не найду про это.
|
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
Нет абсолютного мгновенного контакта, всегда в течении комутации существует "дребезг", и в течение этой коммутации нельзя определить есть нажатие или нет, т.к. сигнал дергается (если мяч уронить на пол, он не сразу успокаевается, а еще долго скачет, так же и контакт, только период "прыжка" очень мал). Яркий пример игнорирования дребезга: автоматы по оплате услуг мобильной связи, неаккуратное нажатие и цифра введена 5 раз вместо одного. Поэтому необходимо несколько раз опросить клавиатуру и не реагировать на первый же признак нажатие, а собрать статистику. Как правило 8-10 считанных состояний "НАЖАТО" свидетельствуют о нажатии (и наоборот при отпускании), частота опроса около 50-100 Гц, тогда и пользователь не учует запаздивание, и вы со спокойной душой проведете анализ на дребезг.
СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
dimoZa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 9.10.2005 Репутация: нет Всего: нет |
Большое спасибо, PILOT, за ответ, наконец-то стало понятно, особенно удачный пример привел!
|
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
А вот тебе, dimoZa, еще и картинка по теме contact bounce (проблема) и debouncing (решение проблемы):
http://www.elexp.com/t_bounc.htm -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
Alexei |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 382 Регистрация: 20.8.2003 Репутация: 4 Всего: 4 |
Не рационально.Сперва лучше установить факт нажатия, а после душить "дребезг" |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
Не знаю удачно ли я сейчас объясню, но есть такая реализация описанного мной метода.
Пусть у нас есть Байт (8 бит). Мы сканируем клавиатуру с определенным периодом (допускаем что период может быть не одинаковым, т.е. например опрос в общем цикле, к чему нам прерывания портить этой несрочной задачкой), после сканирования мы вдвигаем в этот Байт ровно один бит: 1 - если было нажатие 2 - если его не было если Байт равен $FF то было нажатие, если $00 то было отпускание (естественно нужно ввести признак предыдущего состояния чтобы работать по событиям). Как видно ни одного сканирования не проходит впустую, все фиксируются. Но реагируем только на события. СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
dimoZa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 9.10.2005 Репутация: нет Всего: нет |
Нет , немного не понятно - вдвигаем один бит, а в результате получаем или поностью заполненный байт или вообще пустой, как это?!
Добавлено @ 21:47 И вообще, если я правильно понял, если сканировать с большой частотой, то однократное нажатие может стать причиной появления несколько символов на дисплее (как будто нажали несколько раз) из-за так называемого дребезга, я прав? |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
Биты мы вдвигаем после каждого сканирования, т.е. этот Байт он каждый раз сдвигается (меняется).
Если сканировать оочень быстро, то можно зафиксировать ложные нажатия, т.е. дребезг. СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
Rolax |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 29.6.2005 Репутация: нет Всего: нет |
Прошу меня извинить!!!
Я только начинаю заниматься програмированием микроконтроллеров!!! Понятно что такое дребезг и понятно как опрашивается клавиатура, но не совсем понятно как избавляться от этого дребезга програмно! Вот здесь были упомянуты документы AVR240, AVR243 как в них организована эта подпрограмма! На какие строчки хоть смотреть?!! Об этом много говориться на разных форумах, но ничего конкретного. Помогите разобраться с этим раз и навсегда! И если можно небольшой пример, а то одни слова и слова!!! Пожалуйста!!!!! |
|||
|
||||
cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
Если просто - то так:
То есть если тебе надо просто что-то сделать по нажатию кнопки, то не бери ты в голову этот дребезг. ![]()
То есть задержка в столько то наносекунд. Сколько наносекунд зависит от кнопки. Чем лучше кнопка, тем меньше дребезга. Я думаю ты на самом деле больше будешь пытаться даже сэмулировать дребезг и получить плохой результат, чем он самом деле будет как-то влиять на обработку нажатия кнопки. Возможно если делать обработку нажатия клавиши по прерыванию (что как бы надо делать иначе частые нажатия будут игнорироваться), то тогда возможно дребезг влияет более важную роль и тогда надо подстраховываться, но сам не пробовал. -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
А еще посмотри (сверху ссылка) на figure 2 - hardware решение проблемы...
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
Если так думать, то дребезг не нужно фильтровать, но это неправильно. Смысл любой антидребезговой деятельности сводится к тому чтобы отреагировать только после того как перестали беспорядочно меняться состояния, т.е. реакция будет только тогда, когда состояние устойчиво заданный промежуток времени. Вот и вся задача. Игнорировать дребезг нельзя, иначе можно получить ложные срабатывания. А скорость контроллера достаточно высока, чтобы зафиксировать несколько нажатий (кардинал забыл о ложных "отпусканиях" в момент нажатия). СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
Rolax |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 29.6.2005 Репутация: нет Всего: нет |
Спосибо за ответы!!!
Стало намного понятнее. Но вот еще вопросы остались! №1 Вот PILOT описал способ, он же как я понимаю Задани №1-2(к лабораторной работе), процедура дребезг. А как сдесь можно подсчитать задержку? №2 Попрежнему остался вопрос с документом AVR240 и AVR242. Ну что-то я, ну ни как не могу найти и понять как организована задержка там? Помогите, уж очень хочется разобраться во всем этом! Вы меня уж извините за таки вопросы, но я же только учусь!!! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |