Прерывание по нажатию кнопки самодельной клавиатуры
- Войдите на сайт для отправки комментариев
Вс, 27/09/2015 - 14:55
Подскажите, пожалуйста, на arduino UNO можно ли сделать так, чтобы при нажатии кнопки самодельной клавиатуры (какая кнопка нажата определяется уровнем напряжения, считываемым на аналоговом входе,например, A0), происходило еще и общее прерывание, например INT0 на pin2?
Нужно для оперативной обработки нажатия на клавиши.
Благодарю.
соединить пины
У Вас настолько тяжелые вычисления, что время цикла loop превышает требуемое время реакции на нажатие клавиши?
Так?
Просто привык делать все хорошо.
так, что бы на пине был логический сигнал.
*какой мудак, вообще, придумал кнопочный джойстик назвать клавиатурой и парить этим мосг неофитам дуино.
Заводить механические контакты на входы внешних прерываний -- это довольно порочная практика. Дребезг контактов может приводить к малообъяснимым эффектам, последствия которых будут непрогнозируемыми.
Благодарю за предупреждение.
А ответ на мой вопрос у вас есть?
Благодарю за предупреждение.
А ответ на мой вопрос у вас есть?
хм. я думал, ты понял что делать - соедини любой цифровой пин с пином прерывания, дёргай цифровыми пином пин прерывания по любым событиям - будь то состояния аналогового входа или что другое.
osetroff, компаратор нужен. Он будет сравнивать напряжение питания и напряжение на аналоговом пине. Как только на аналоговом напряжение станет меньше -компаратор дёрнет прерывание. Можно попробовать использовать внутренний компаратор контроллера, у него есть своё собственное прерывание. Тогда один пин, даже скажу конкретно -6й нужно будет отдать под образцовое +5 вольт прямо с места питания клавиатуры (или просто подтянуть вход внутренней подтяжкой, но это глючнее). Это будет неинвертирующий вход (+). А второй вход 7й, соединить с аналоговым входом, это будет (-). Есть вариант назначить один из аналоговых входов инвертирующим входом компаратора, тогда придётся в прерывании немножко пожонглировать битовыми операциями переназначая этот пин то на компаратор, то на аналоговый вход.
Поясню, вот какой у меня
При нажатии на клавиатуру, в прерывании устанавливается _keyb_pressed=TRUE;
Из основного цикла вылетим по проверке.
Из pwrdown вылетим по прерыванию.
Т.е. цель - максимально короткий отклик на реакцию пользователя.
дёргай цифровыми пином пин прерывания по любым событиям - будь то состояния аналогового входа или что другое.
Это - аппаратный вопрос, т.е. не программный.
При нажатии на клавишу, автоматически должно вызываться прерывание.
osetroff, компаратор нужен.
Благодарю, сейчас попробую в этом разобраться и попробовать!
osetroff, возможно там придётся изрядно повозится.. В принципе по-умолчанию компаратор включен, можете поэксперементировать без чтения талмудов. Подайте на 7 ногу gnd, на 6 ногу +питания. И командой Serial.print (bitRead(ACSR,ACO)) ; выведите что на выходе компаратора. Должна быть лог.1, а если поменять провода наоборот -лог.0
Это - аппаратный вопрос, т.е. не программный.
При нажатии на клавишу, автоматически должно вызываться прерывание.
кому должно?
У Вас "клавиши" не защищены от дребезга (аппаратно), поэтому прерываний там может оказаться несколько...
Тогда один пин, даже скажу конкретно -6й нужно будет отдать под образцовое +5 вольт прямо с места питания клавиатуры (или просто подтянуть вход внутренней подтяжкой, но это глючнее). Это будет неинвертирующий вход (+). А второй вход 7й, соединить с аналоговым входом, это будет (-).
В power-down только int0,int1 и pinchange.
Может и можно по pin change, но сложно.
Выводы:
Есл клавиш мало, то делаем цифровую клаву с прерываниями по pin change.
Вообще, клава должна быть цифровой, а не аналоговой!
У меня заработало по схеме (INT0 по RISING)
НО: после просыпания arduino проходит некоторое время, и, если пользователь долбит по клавишам быстро, то на аналоговом входе уже ловим напряжение отпущеной клавиши -> могут быть ошибки.
И еще, почему-то все замечательно работает от внешнего питания, и зависает при питании от USB через CH340G.
Надо бы как-то фильтровать помехи. Как?
Код для двух клавиш
Эволюция клавиатуры:
1. Все кнопки на один аналоговый вход.
2. Каждой кнопке свой pin и прерывание по pin change.
3. Доп микросхемы (контроллер клавиатуры).
Правильно понимаю?
Благодарю всех за поддержку!