Порты ввода/вывода микроконтроллера dsPIC33FJ32GP204. Выводы совмещённые с аналоговыми входами

Страницы работы

Фрагмент текста работы

Порты ввода/вывода микроконтроллера dsPIC33FJ32GP204

В DSPIC33FJ32GP204 имеется 3 порта ввода вывода. В основном все порты идентичны и мы будем считать их функциональность одинаковой. Однако стоит обратить внимание, что некоторые порты не полные. Ведь микроконтроллер 16 разрядный и поэтому требует для каждого порта аж 16 выводов. В данном микроконтроллере только PORTB является полным, а остальные 2 порта урезанными. Причём в PORTA даже есть пропущенные выводы. Так как порты мультиплексированы с выводами периферийных модулей, то для того, чтобы порты работали как цифровые входы/выходы – их нужно соответствующим образом настроить (так сказать проинициализировать).

Для работы с портом предназначены три основных регистра:

TRIS –  регистр для выбора направления передачи. Если «0» то канал работает на выход, а если «1», то канал работает как вход. (Для запоминания можно считать так: «1» похожа на латинскую букву I, т.е. Input-вход, поэтому и настраивает порт как вход). Например запись TRISС=0b0000011110 говорит о том, что каналы RС9-RC5,RC0 работают как выход, а RC4-RC1 – как вход)

PORT – регистр порта, вот именно с помощью этого регистра мы будем принимать данные или отправлять их. (Например запись value=PORTC, означает, что нужно данные присутствующие на выводах порта C, записать в переменную value, а запись PORTC=value означает что нужно на выводах порта C установить состояние, соответствующее переменной value).

Для доступа к одному каналу в отдельности, например к третьему каналу порта C используют запись вида _RC3 (RC3=0 сбрасываем третий бит регистра C).

Примечание: Обозначение отдельных выводов порта в компиляторе С30 и компиляторе HI-TECH отличается тем, что в С30 перед названием отдельного вывода нужно ставить знак подчёркивания. С моей точки зрения это более практично, так как сразу можно определить регистр это или бит.

LAT – Защелка портов ввода/вывода. В некоторых задачах она нам тоже может понадобится. Хотя не сразу можно понять зачем она нужно.

В микроконтроллере для каждого вывода можно сконфигурировать или как цифровой вывод или вывод с открытым коллектором. Для этого предназначен специальный регистр для каждого порта ODCA, ODCB, ODCC (“1” – вывод с открытым коллектором). 

Выводы портов имеют триггер Шмитта, который защищает от помех.

При запуске микроконтроллера некоторые входы настроены для работы с АЦП. И если нам необходимо, чтобы вход/вывод был именно цифровым, то за этим нужно следить. Для этого нужно при инициализации добавить следующую команду:

AD1PCFGL=0xffff;

что означает, что все выводы совмещённые с аналоговыми входами будут работать как цифровые входы выходы.

В микроконтроллере есть ещё очень полезное свойство. Все входы обозначенные как CN (CN1,CN8 и т.п.) имеют возможность подключать подтягивающие резисторы. А это означает, что, к примеру, не нужно для каждой кнопки устанавливать подтягивающий резистор, а только лишь установить соответствующий бит. Для подключения подтягивающих регистров служит два регистра CNPU1 и CNPU2, т.е. каждый вывод можно подтягивать индивидуально. Для того, чтобы отдельно подтянуть какой-нибудь один вывод можно обращаться непосредственно к биту соответствующего регистра (Например, запись _CN4PUE=1 означает, что нужно включить подтягивающий резистор на выводе CN4, что означает что и на  RB0)

Для примера поставим перед собой задачу:

ЗАДАЧА Разработать программу для управления 8-ю светодиодами. Конечно, особого смысла в управлении светодиодами нет, но на их место можно поставить силовые ключи и управлять уже электромеханизмами. А это уже намного интереснее. Но для ознакомления с портами нам достаточно и светодиодов. Для задачи необходимо выполнить следующие условия:

1)  При нажатии на кнопку SB1 зажечь первую четвёрку светодиодов, а вторую погасить.

2)  При нажатии на кнопку SB2 зажечь вторую четвёрку светодиодов, а первую погасить.

3)  При нажатии на кнопку SB3 зажигать первую четвёрку, вторую гасить, через паузу погасить первую четвёрку, а вторую зажечь и так мерцать непрерывно, пока не будет нажата кнопка SB1 или SB2.

Для начала разработаем схему. Она будет иметь приблизительно следующий вид (изображено в работе):

Пишем программу для микроконтроллера. Думаю комментариев будет достаточно, чтобы во всём разобраться

Похожие материалы

Информация о работе