Свежие обсуждения
Микроконтроллеры

Индикация нажатой кнопки

1 5

Каким образом можно сделать так, чтобы индицировать светодиодом, подключенным к выводу порта МК, нажатие кнопки, которая висит на том же выводе порта? Я понимаю, что после нажатия надо переводить вывод порта в состояние выхода и записывать туда 0 (если светодиод подключен к + пит. через резистор), но не могу придумать алгоритм для двух и более кнопок, чтобы состояние нажатой кнопки восстанавливалось при нажатии на другую... МК - ATMega16.

 


Алгоритм простой - при нажатии на любую кнопку сначала все выводы с кнопками переводим в режим ввода, а затем устанавливаем "нажатую" линию в режим вывода...

 

chav1961: ...при нажатии на любую кнопку сначала все выводы с кнопками переводим в режим ввода... А до нажатия, если эти выводы не входы как МК узнает что кнопка нажата? При инициализации портов эти выводы с кнопками всё равно же входы!?

 

А причем здесь выходы или входы? Регистр PINx связан непосредственно с пинами порта, ему вообще наплевать, в каком порт режиме. Он что видит на линии, то и поет

 

а почему формально не решить задачу? почему нельзя подключить светодиод параллельно контроллеру? при нажатии на кнопку он будет зажигатся и сигнал на МК пойдет..

 

BCluster: при нажатии на кнопку он будет зажигатся и сигнал на МК пойдет..Но в этом случае светодиод тут же погаснет как будет отпущена кнопка, а надо бы чтобы он продолжал подсвечиваться, понимаете? Вот такая сложная задача Ладно, алгоритм есть, буду разбираться.

 

BCluster: при нажатии на кнопку он будет зажигатся и сигнал на МК пойдет..
модифицируем:
... и МК принудительно "засветит" светодиод, так как вы и хотели с начала.

а вот на момент следующей проверки нажатости кнопки (если нужно) на короткое время МК погасит светик,(на единицы милисекунд) , перенастроит порты, проверит кнопку и снова вернет в предыдущее состояние.

Это чисто теоретически т.к с AVR близко не знаком.

 

Надо подумать как проще, по любому приходится мудрить с битовыми операциями; так подсвечивать постоянно светодиоды получается, но только такая проблема - подтяжка с некоторых входов почему-то отключается, это ещё не победил.

 

Может я что-то не понял. Порт настроен, как вход. Светодиоды подключены через резистор к плюсу, катодом к порту. Нажали кнопку, засветился соответствующий светодиод, порты перестроились, как выходы. На данном пине выводится 0, на остальных 1. Теперь нажимаем кнопку на другом пине, сажаем выход 1 на корпус, сжигаем порт.
Я правильно понял?

 

choroh: Нажали кнопку, засветился соответствующий светодиод, порты перестроились, как выходы.

Можно перестроить на выход только нужный разряд порта, остальные оставить входами. Еще в цепь светодиода обычно ставят резистор, можно кнопку поставить после него, тогда даже если порт в состоянии выхода, он будет на время нажатия нагружен не на корпус, а на этот резистор..