TL / DR: вам нужно установить 7-й бит в DDRB
на один.
В AVR порты конфигурируются битами в двух регистрах: DDRx
и PORTx
.
* 1007. * Когда соответствующий бит в регистре
DDRx
установлен в единицу, порт конфигурируется как выходной. И соответствующий бит в регистре
PORTx
выбирает, какой электрический уровень выводится на вывод. Если он равен 0, то внутренний полевой МОП-транзистор замыкает контакт на линию «заземления» и отводит ток от внешнего источника. Когда бит
PORTx
равен единице, тогда вывод подключен к «VCC», что приводит к выделению большого количества тока, достаточного для того, чтобы загорелся светодиод.
Но если вывод подключен к чему-то, что потребляет слишком много тока, или контакт закорочен на GND или VCC (скажем, у вас есть кнопка, подключенная и нажатая), то выходные МОП-транзисторы могут быть перегружены иповрежден.
Если бит в DDRx
установлен на ноль, то вывод настроен как вход. Если соответствующий бит в PORTx
равен нулю, то вывод не имеет внутреннего соединения с линиями электропередачи, это называется состоянием "высокого импеданса" или три-состоянием. Он не искажает и не поглощает ток. Таким образом, если внешний источник тока не подключен, то уровень на контакте является плавающим, под влиянием электрических помех. Логический уровень не обнаруживается и может время от времени меняться. Если вы хотите подключить, например, кнопку (между контактом и GND), то логический уровень будет определяться только при нажатии кнопки. Когда он будет выпущен, логический уровень будет неопределенным.
Но! Если бит в PORTx
установлен в единицу, то внутренний полевой МОП-транзистор соединяет контакт через резистор (около 35 кОм) с линией VCC. Это делает вывод для небольшого количества тока, устанавливая высокий логический уровень. Поэтому, если кнопка подключена, когда она отпущена, тогда пин будет иметь высокий уровень. Это называется «подтягивающий резистор». Когда кнопка нажата, она не закоротит и не повредит MCU, потому что ток, протекающий через кнопку, ограничен резистором, но логический уровень будет определен как низкий.
Что если вместо кнопки у вас есть светодиодподключен к контакту? Через светодиод протекает очень небольшое количество тока, и он едва светится.
Подробнее в таблице (глава 13. Порты ввода / вывода )