Рис. 11.5.
Ситуация, изображенная на Рис. 11.5,
г) Запись в вывод порта, сконфигурированного как вход (TRIS = 1)
В этом случае будет изменено соответствующим образом состояние триггера данных. Однако, поскольку буфер TRIS отключен, это изменение никоим образом не отразится на состоянии соответствующего вывода микроконтроллера до тех пор, пока он не будет переведен в режим выхода. Эту возможность установки состояния портов «незаметно» для внешних цепей мы использовали в Программе 11.2 при инициализации параллельных портов после сброса. Напоминаю вам, что после сброса все порты работают как входы, другими словами, во всех регистрах TRIS находится значение Ь’11111111’.
Большинство выводов, сконфигурированных как входы, имеют буферы с триггером Шмитта. Особенностью этих триггеров является то, что при изменении уровня входного сигнала с НИЗКОГО на ВЫСОКИЙ они переключаются при напряжении на входе, составляющем более 80 % от напряжения питания, а при изменении сигнала в обратном направлении — менее 20 % от напряжения питания. Такой гистерезис значительно увеличивает надежность при считывании логических состояний в средах с повышенным уровнем помех. Порт GPIO в 8-битных устройствах (исключая линию GP3), порт В, а в некоторых старых моделях, таких как PIC16F84, еще и порт А (кроме RA4) имеют обычные буферы без гистерезиса, с порогами переключения VIL =< 0.5 В и VIH >= 2 В.
Любой вывод, сконфигурированный как выход, должен быть способен давать ток, требуемый для управления нагрузкой. В большинстве случаев выходы микроконтроллера нагружаются током величиной всего несколько миллиампер. И тем не менее очень важно иметь представление об ограничениях нагрузочной способности выходов портов.
В документации на устройства обычно указываются два параметра:
1. Ток, потребляемый выводом (IOL) при наличии на выходе напряжения НИЗКОГО уровня, не должен превышать 8.5 мА, если напряжение НИЗКОГО уровня VOL не превышает 0.6 В.
2. Ток, отдаваемый выводом (IOH) ПРИ наличии на выходе напряжения ВЫСОКОГО уровня, не должен превышать —3 мА, если напряжение ВЫСОКОГО уровня падает не более чем на 0.7 В ниже VDD. Отрицательное значение тока соответствует источнику тока, т. е. ток вытекает из устройства.
Если допускается изменение логических уровней относительно их номинальных значений, то устройство может потреблять или отдавать большие токи (как показано на Рис. 11.5). При этом следует учитывать, что имеется еще одно ограничение — ток через любой вывод порта не должен превышать ±25 мА во избежание повреждения микроконтроллера. Если для управления используется более одного вывода, то необходимо учитывать ограничения, накладываемые на суммарный ток порта, В 8-выводных устройствах суммарный ток их единственного порта ввода/вывода (который является комбинацией портов А и В более старших собратьев) должен находиться в пределах ±125 мА. В моделях с большим числом выводов суммарный ток портов А, В и, при его наличии, С ограничивается на уровне ±200 мА. Аналогично, суммарный ток портов D и Е тоже должен находиться в пределах ±200 мА.
Каждый вывод, отдающий или потребляющий ток, будет рассеивать мощность, что проявляется в виде нагрева корпуса. Из упрощенной модели, изображенной на Рис. 11.6, можно заметить, что рассеивание мощности происходит на трех компонентах (на рисунке они изображены в виде резисторов):
1. С линии питания VDD мы потребляем ток IDD. Однако ток через сопротивление R1, представляющее собой сопротивление всего микроконтроллера в целом, будет меньше на величину токов, вытекающих через выводы портов. Таким образом, рассеиваемая мощность (определяемая, как известно, выражением V x I) равна VDD х (IDD — ΣIOH).
Рис. 11.6.
2. Падение напряжения на эквивалентном сопротивлении R2 между выходными контактами и выводом питания составляет ΔV = VDD — VOH. Соответственно рассеиваемая мощность равна ΔV x ΣIOH.
3. Ток, протекающий от выходов к общему проводу (через вывод VSS), рассеивает на резисторе R3 мощность VOL х ΣIOL.
Сложив эти компоненты, получим выражение, которое приводится в документации: