Проектирование И Работа Портов Ввода/Вывода Микроконтроллеров Avr. Часть 1

Работа портов ввода/вывода Изучив этот материал, в котором все очень подробно описано с большим количеством примеров, вы легко освоите и запрограммируете порты ввода/вывода микроконтроллеров AVR.

Часть 1. Работа портов ввода-вывода Часть 2. Подключение светодиода к линии порта ввода-вывода Часть 3. Подключение транзистора к линии порта ввода-вывода Часть 4. Подключение кнопки к линии порта ввода-вывода Мы рассмотрим пример на микроконтроллере.

АТМега8 .

Мы напишем программу в Атмел Студия 6.0 .

Мы смоделируем схему в Протеус 7 Профессионал .

Микроконтроллер взаимодействует с внешним миром через порты ввода/вывода.

Схема портов ввода/вывода указана в даташите:

Проектирование и работа портов ввода/вывода микроконтроллеров AVR. Часть 1

Но новичку разобраться в схеме довольно сложно.

Поэтому упростим схему:

Проектирование и работа портов ввода/вывода микроконтроллеров AVR. Часть 1

Пксн – название вывода порта микроконтроллера, где x – буква порта (A, B, C или D), n – номер цифры порта (7.0).

Cpin — паразитная емкость порта.

ВКК - напряжение питания.

Рпу — переключаемый верхний нагрузочный резистор (подтягивающий).

ПОРТxn — бит n регистра PORTx. PINxn — бит n регистра PINx. DDRxn — бит n регистра DDRx. Давайте посмотрим, что такое выход микроконтроллера.

На входе микроконтроллера имеется небольшая защита из двух диодов.

(см.

1) , он предназначен для защиты входа микроконтроллера от кратковременных импульсов напряжения, превышающих напряжение питания.

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

Если на вход поступит отрицательное (ниже нуля) напряжение, оно будет нейтрализовано через нижний диод и погашено на землю.

Однако диоды там слабые и эта защита помогает только от микроскопических импульсов и помех.

Если подать на ножку микроконтроллера 6-7 вольт при питании 5 вольт, то внутренние диоды его не спасут. Конденсатор (см.

2) — паразитная выходная емкость.

Хоть он и крошечный, но он присутствует. Обычно его не принимают во внимание, но он существует. Не волнуйся, просто знай это.

Далее идут клавиши управления (см.

3,4) .

Каждая клавиша подчиняется логическому условию, которое показано на рисунке.

При выполнении условия ключ закрывается.

Каждый порт микроконтроллера AVR (обычно называемый A, B, а иногда C или даже D) имеет 8 бит, каждый из которых назначен на определенный вывод корпуса.

Каждый порт имеет три специальных регистра.

DDRx , ПОРТx И PINx (где x соответствует букве порта A, B, C или D).

Назначение регистров: DDRx – Настройте биты порта x для ввода или вывода.

ПОРТx – Управляет состоянием выходов порта x (если соответствующий бит настроен как выход) или подключением внутреннего подтягивающего резистора (если соответствующий бит настроен как вход).

PINx –Читать уровни логических битов порта x. PINхn – это регистр чтения.

Из него можно только читать.

В реестре PINxn содержит информацию о реальном текущем логическом уровне на выводах порта.

Независимо от настроек порта.

Итак, если мы хотим узнать, что у нас на входе, мы читаем соответствующий бит регистра PINxn .

Причём есть две границы: граница гарантированного нуля и граница гарантированной единицы — пороги, за которыми мы можем четко и ясно определить текущий логический уровень.

Для пятивольтового блока питания это 1,4 и 1,8 вольта соответственно.

То есть при уменьшении напряжения от максимального до минимального биты в регистре PINx переключится с 1 на 0 только тогда, когда напряжение упадет ниже 1,4 вольта, но при увеличении напряжения от минимального до максимального бит переключится с 0 на 1 только тогда, когда напряжение достигнет 1,8 вольта.

То есть происходит гистерезис переключения от 0 до 1, что исключает хаотичное переключение под воздействием наводок и помех, а также исключает ошибочное считывание логического уровня между порогами переключения.

При уменьшении напряжения питания, конечно, эти пороги также уменьшаются.

DDRxn – Это регистр направления порта.

Порт в конкретный момент времени может быть как входом, так и выходом (но для состояния битов PINxn это не имеет значения.

Читать из PINxn реальная стоимость всегда возможна).

DDRxy = 0 – выход работает как ВХОД.

DDRxy = 1 – выход работает как ВЫХОД.

ПОРТxn – режим управления состоянием выхода.

Когда мы устанавливаем выход на вход, то из ПОРТх Тип входа зависит (Hi-Z или PullUp, об этом ниже).

Когда вывод настроен на выход, значение соответствующего бита в регистре ПОРТx определяет состояние выхода.

Если ПОРТxn =1, то выход будет лог.

1, если ПОРТxn =0, то выход будет лог.

0. Когда нога установлена на вход, то если ПОРТxn =0, то выход находится в режиме Hi-Z. Если ПОРТxn =1, то выход находится в режиме PullUp с резистором 100 кОм, подключенным к источнику питания.

Стол.

Конфигурация контактов порта.

DDRxn PORTxn Комментарий ввода/вывода 0 0 I (Вход) Вход Вход с высоким импедансом.

(Не рекомендую использовать, так как могут возникнуть помехи от блока питания) 0 1 I (Вход) Вход Внутреннее сопротивление увеличено.

1 0 O (Выход) Выход Выход низкий.

1 1 O (Выход) Выход Выход высокий.

Общая картина работы порта представлена на рисунках:

Проектирование и работа портов ввода/вывода микроконтроллеров AVR. Часть 1

Рис.

DDRxn =0 ПОРТxn =0 – Режим: Привет-Z – вход с высоким импедансом.



Проектирование и работа портов ввода/вывода микроконтроллеров AVR. Часть 1

Рис.

DDRxn =0 ПОРТxn =1 – Режим: Остановить – вход с подтягиванием к лог.

1.

Проектирование и работа портов ввода/вывода микроконтроллеров AVR. Часть 1

Рис.

DDRxn =1 ПОРТxn =0 – Режим: Выход – выходной лог.

0. (почти земля)

Проектирование и работа портов ввода/вывода микроконтроллеров AVR. Часть 1

Рис.

DDRxn =1 ПОРТxn =1 – Режим: Выход – на выходе лог.

1. (почти ВКК) Вход Привет-Z — режим высокоомного входа.

Этот режим включен по умолчанию.

Все переключатели разомкнуты, а сопротивление порта очень велико.

В принципе, по сравнению с другими режимами, это можно считать бесконечностью.

То есть электрический вывод как будто вообще никуда не подключен и ни на что не влияет. Но! При этом он постоянно считывает свое состояние в регистр ПИНн и мы всегда можем узнать, что у нас на входе — единица или ноль.

Этот режим хорош для прослушивания любой шины данных, поскольку не оказывает никакого влияния на шину.

Что будет, если вход повиснет в воздухе? И в этом случае напряжение на нем будет скакать в зависимости от внешних помех, электромагнитных помех и вообще от фазы Луны и погоды на Марсе (идеальный способ измельчения случайных чисел!).

Очень часто на порту в этом случае присутствует нестабильная синусоида 50Гц - помехи от сети 220В, причем в регистре.

ПИНн будет менять 0 и 1 с частотой около 50Гц Вход Остановить - вход с лифтом.

В DDRxn =0 и ПОРТxn =1, подтягивающий переключатель замыкается и к линии подключается резистор сопротивлением 100 кОм, что мгновенно приводит никуда не подключенную линию в состояние логической 1. Цель подтягивания очевидна — предотвратить хаотическое изменение состояния на входе под воздействием помех.

Но если на входе появится логический ноль (замыкание линии на землю кнопкой или другим микроконтроллером/микросхемой), то слабый резистор сопротивлением 100 кОм не сможет удержать напряжение на линии на уровне логической 1. и на входе будет логический 0. Выход из режима.

Тут, думаю, все понятно — если нам нужно вывести в порт лог.

1, то включаем выходной порт ( DDRxn =1) и вывести лог.

1 ( ПОРТxn =1) - в этом случае верхний ключ замыкается и на выходе появляется напряжение, близкое к питанию.

А если нужен лог.

0, то включаем выходной порт( DDRxn =1) и вывести лог.

0 ( ПОРТxn =1) - в этом случае открывается нижний клапан, что дает на выходе около нуля вольт. Теги: #программирование #Программирование микроконтроллеров #программирование avr #микроконтроллеры avr #подключение кнопки к avr #подключение светодиода к avr #программирование

Вместе с данным постом часто просматривают: