Работа портов ввода/вывода Изучив этот материал, в котором все очень подробно описано с большим количеством примеров, вы легко освоите и запрограммируете порты ввода/вывода микроконтроллеров AVR.
Часть 1. Работа портов ввода-вывода Часть 2. Подключение светодиода к линии порта ввода-вывода Часть 3. Подключение транзистора к линии порта ввода-вывода Часть 4. Подключение кнопки к линии порта ввода-вывода Мы рассмотрим пример на микроконтроллере.АТМега8 .
Мы напишем программу в Атмел Студия 6.0 .
Мы смоделируем схему в Протеус 7 Профессионал .
Микроконтроллер взаимодействует с внешним миром через порты ввода/вывода.
Схема портов ввода/вывода указана в даташите:
Но новичку разобраться в схеме довольно сложно.
Поэтому упростим схему:
Пксн – название вывода порта микроконтроллера, где 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 (Выход) Выход Выход высокий.
Общая картина работы порта представлена на рисунках:
Рис.
DDRxn =0 ПОРТxn =0 – Режим: Привет-Z – вход с высоким импедансом.
Рис.
DDRxn =0 ПОРТxn =1 – Режим: Остановить – вход с подтягиванием к лог.
1.
Рис.
DDRxn =1 ПОРТxn =0 – Режим: Выход – выходной лог.
0. (почти земля)
Рис.
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 #программирование
-
Важность Удобной Навигации В Веб-Дизайне
19 Oct, 24 -
4 Шага, Чтобы Стать Новым Медиа
19 Oct, 24 -
Принцип Сарафанного Радио На Shopping2.Ru
19 Oct, 24