Подключение кнопки и светодиода к одному порту микроконтроллера
Во многих случаях число выводов предполагаемого к использованию в разработке микроконтроллера оказывается недостаточным для раздельного подключения к нему всех необходимых внешних цепей. Применение же микроконтроллера с большим числом выводов приводит к удорожанию и увеличению размеров устройства. Но многие порты микроконтроллеров обладают свойством двунаправленности. Воспользовавшись этим, можно объединять на них устройства как ввода (например, кнопки управления), так и индикации (например, светодиоды). Это даст возможность применить микроконтроллер с меньшим числом выводов.
Возможная схема такого объединения показана на рисунке. Используемый вывод порта микроконтроллера, работая большую часть времени в режиме "Выход", управляет светодиодами HL1 и HL2. Подключённая к нему же цепь выключателя SA1, независимо от его положения, мало влияет на выходное напряжение на выводе порта и не изменяет состояния светодиодов Чтобы определить положение этого выключателя, микроконтроллер временно переводит вывод порта в режим "Вход" и подключает к нему свой внутренний резистор, соединяющий этот вывод с плюсом питания.
Когда выключатель SA1 разомкнут, ток внутреннего резистора создаёт на цепи R2,HL1,HL2 падение напряжения более 3 В, что соответствует высокому логическому уровню. Чтобы увеличить это напряжение (иногда оно оказывается недостаточным), можно заменить один или оба светодиода красного свечения светодиодами зелёного свечения, прямое падение напряжения на которых больше. Выполнив операцию ввода и обнаружив лог 1 в соответствующем разряде регистра используемого порта, микроконтроллер предпримет действия, соответствующие разомкнутому выключателю.
Если выключатель SA1 замкнут, ток внутреннего резистора создаст на резисторе R1 падение напряжения не более 1,5 В. При таком напряжении заметный ток через светодиоды HL1 и HL2 не течёт, и они не влияют на работу узла. При считывании порта в соответствующий разряд его регистра будет занесён лог 0, что послужит признаком замкнутого выключателя SA1. Определив положение выключателя, микроконтроллер возвращает используемый вывод порта в режим "Выход".
Поскольку интервал времени, необходимый для описанных операций, получается очень коротким, возможное мигание светодиодов при их выполнении остаётся совершенно незаметным наблюдающему. Видимое состояние светодиодов всегда определяется только логическим состоянием выходного буфера порта.
sbi PORTB,0 ;подключить внутренний резистор
ldi r18,200 ;задержка на переходной процесс
;(75 мкс с кварцем на 8 МГц)
delayPP:
dec rl8
brne delayPP
sbis PINB,0 ;пропустить при 1 на входе РВО,
ori REJIM,0bl0000000 ;иначе установить режим
cbi PORTB,0 ;отключить внутренний резистор
sbi DDRB,0 ;перевести РВО в режим "выход"
Выше приведён фрагмент программы на языке ассемблера для микроконтроллеров семейства AVR, в котором определяется состояние выключателя, соединённого по рассмотренной схеме с выводом порта РВО микроконтроллера. После переключения вывода в режим "Вход" выдерживается пауза длительностью 75 мкс, необходимая для завершения переходных процессов. Если выключатель замкнут, в старший разряд регистра REJIM будет записана единица.
А. МИХАЙЛОВ, г. Алматы, Казахстан