Kомпоненты, приборы, оборудование      
 |  Главная |  Каталог предприятий Украины |  Схемотехника |
 

Раздел на реконструкции, некоторые ссылки могут не работать!
  • Аудио
  • Безопасность
  • Бытовая электроника
  • Видео
  • Видеокамеры
  • Высоковольтные
  • Генераторы
  • Измерения
  • Интерфейсы
  • Коммутация
  • Компьютер
  • Медицина
  • Моделирование
  • Передатчики
  • Питание
  • Обработка данных
  • Предусилители
  • Радио

  • Веб-мастерам
    и писателям:
    Биржа статей. Продать - купить статью. Уникальные статьи: готовые и на заказ.


    Назад
       Проектирование микропроцессорных устройств. Часть 4
       
       А. Александров, г. Киев
       Использование портов вход/выход микроконтроллера Даже самый совершенный микропроцессор будет всего лишь интересной игрушкой, если в нем не предусмотрено подключение внешних устройств для передачи или приема данных или обмена информацией. В микроконтроллерах семейства '51 для реализации таких подключений служат порты (сгруппированные выводы чаще всего по 8 линий), которые используются в качестве входов или выходов цифровых сигналов. Микроконтроллеры АТ89С5х имеют четыре таких порта (обозначаются от Р0 до Р3), микроконтроллеры АТ89Сх051 - два порта (Р1 и Р3). Каждый вывод любого порта может трактоваться как единичная линия. В таком случае к обозначению порта добавляем номер линии (например, запись Р1.4 означает пятую линию (нумерация от нуля) порта номер 1). Кроме стандартных функций линий вход/выход некоторые порты или некоторые их выводы могут выполнять альтернативную функцию (что оговаривается совместно с используемыми периферийными устройствами). Нужно помнить, что исправная работа порта или единичной линии в качестве входа возможна только при программной установке данного порта (линии) в состояние лог."1" (например, применение инструкции MOV P1, #0FFH определяет работу всего порта Р1 как входного устройства, инструкция SETB P1.2 - как входную только единичную линию 2 порта Р1). Также стоит помнить, что в результате обнуления микроконтроллера все линии портов устанавливаются в лог."1". При необходимости использования линий равно как в качестве входов, так и в качестве выходов следует устанавливать соответствующие линии (в процессе их использования) как входные. Свойства и способы использования портов рассмотрим на примере микроконтроллеров АТ89С51. Чаще всего начинающим разработчикам доставляет неприятности порт Р0 (обычно при реализации первого проекта на данном микроконтроллере), потому что они забывают одну важную деталь - линии порта Р0, работающего в режиме вход/выход, не имеют выходных резисторов и являются стандартными выходами с открытым коллектором. Часто вину за неудачу в приеме или передаче данных с порта Р0 взваливают на неисправный микроконтроллер, тогда как в действительности устройство работает нормально, а виноватым оказывается разработчик, который неправильно собирает схему устройства. На рис.9а показан способ подключения к порту Р0 нагрузки, управляемой через p-n-p транзистор. В данном случае нет необходимости применять дополнительный резистор линии порта, поскольку установка линии в высокое состояние приводит вход в состояние высокого импеданса (отсутствие выходного резистора) и приводит к закрытию транзистора. Резистор R1 ограничивает ток базы до безопасной величины равно как для микроконтроллера, так и для транзистора, и должен быть подобран в зависимости от усиления применяемого транзистора и ожидаемого тока в нагрузке - чтобы полученный ток базы ввел транзистор в насыщение. Наличие резистора R2 здесь необязательно (он ускоряет выход транзистора из насыщения и его выключение, что целесообразно при больших частотах переключения). При необходимости применить управление с использованием n-p-n транзистора можно воспользоваться способом, показанным на рис.9б. Здесь резистор R1 необходим для подачи высокого потенциала на базу транзистора. Резистор R2 нужен для защиты выхода микроконтроллера от повреждения в результате повреждения транзистора коротким замыканием в транзисторе (в цепи коллектор-база), что может привести к появлению на выводе микроконтроллера напряжения питания нагрузки. Это напряжение может быть выше напряжения питания микроконтроллера и привести к повреждению линии, а если на данном выводе будет низкий уровень - может произойти токовая перегрузка. Примененный резистор ограничивает этот ток и работает как делитель и ограничитель напряжения на выводе порта. На рис.9в показан способ управления входами цифровых устройств. Для элементов с CMOS структурой необходимо применять резистор R1, однако для элементов TTL его наличие не обязательно. Порт Р0 может управлять (согласно техническим данным фирмы-производителя) до 8 входами устройств TTL, что позволяет нагрузить каждый вывод микроконтроллера в низком состоянии током около 13 мА (этого вполне достаточно для управления светодиодом, пример схемной реализаци показан на рис.9г). Используя линии порта Р0 в качестве входов, нужно также учитывать необходимость применения (во многих случаях) дополнительных резисторов. Такие резисторы чаще всего нужны, если к микроконтроллеру будут подключаться буферные или цифровые схемы (или единичный транзистор), работающие с выходом типа открытый коллектор (см. рис.10а). Величины резисторов R1 и R2 должны быть подобраны таким образом, чтобы не перегружать выходы подключенных устройств. Применение резистора R4 обеспечивает низкий уровень на входе Р0.3 при отпущенной кнопке S1, а резистор R3 предохраняет вывод микроконтроллера от случайного короткого замыкания, которое может произойти при программном обнулении линии Р0.3. Как видно из рис.10а, нажатие кнопки S1 вызывает высокое состояние на входах микроконтроллера, а нажатие кнопки S2 - низкое. На рис.10б показано подключение устройств с комплиментарными выходами (цифровые схемы, компараторы) без применения дополнительных резисторов. Стоит напомнить, что порт Р0, работающий в качестве входа без дополнительных резисторов, имеет высокий входной импеданс (почти как у MOS транзистора), благодаря чему возможно управление от источников с малой производительностью. Остальные порты микроконтроллера Р1...Р3 работают (по аналогии с МОS транзисторами) как токовые источники с внутренними резисторами сопротивлением от 50 до 100 кОм. Данные порты имеют меньшую токовую производительность, соответствующую управлению входами четырех устройств TTL (максимальный ток в низком состоянии около 6,5 мА). Схемы подключения периферийных устройств не отличаются от ранее описанных для порта Р0 (рис.9 и рис.10), за исключением ненадобности дополнительного резистора R1. Анализируя свойства портов Р1 и Р3 микроконтроллера АТ89Сх051, нужно учитывать несколько существенных отличий, влияющих на способ их использования для обслуживания внешних устройств. Прежде всего нужно помнить о свойствах токовых портов: линии портов Р1 и Р3 могут в низком состоянии одинаково проводить ток до 20 мА (согласно характеристикам производителя полный ток, поступающий одновременно на все используемые линии портов, не должен превышать 80 мА - выше этого значения фирма Atmel не гарантирует заявленной токовой производительности). Разработчики предвидели возможность управления через порты Р1 и Р3 катодами светодиодов, при условии обеспечения суммарного тока всех выводов Р1 и Р3 (находящихся в низком состоянии) на уровне, не превышающем 80 мА. В высоком состоянии порты имеют такую же производительность, как и в микроконтроллерах АТ89С5х фирмы Atmel. Дополнительно следует помнить, что две линии порта Р1: Р1.0 и Р1.1 не имеют внутренних выходных резисторов, так как они бы нарушили работу внутреннего компаратора, подключенного к этим линиям. Если необходимо использовать линии Р1.0 и Р1.1 как обычный цифровой вход/выход, тогда следует пользоваться правилом подключения внешних устройств, как в случае порта Р0. В описании выводов микроконтроллера АТ89Сх051 отсутствует линия Р3.6. Эта линия внутренне соединена с выходом компаратора и может использоваться лишь для снятия показаний состояния компаратора. Описанная выше проблема применения дополнительных резисторов - только одна из многих возможных ошибок, допускаемых при подключении к микроконтроллеру периферийных устройств. На рис.11-14 показаны наиболее часто встречающиеся ошибки при конструировании микропроцессорных устройств, которые нарушают их правильную работу. На рис.11а показана схема управления p-n-p транзистором с выхода микроконтроллера с аварийным источником питания. Проанализировав схему, можно прийти к выводу, что она будет работать неустойчиво. Причиной этого является неполное выключение транзистора из-за наличия диода в цепи аварийного питания. В результате падения напряжения на диоде выходное напряжение в высоком состоянии понизится на 0,6...0,8 В, что может привести к открытию перехода база-эмиттер транзистора и привести к его открытию. При малых токах нагрузки этого достаточно для насыщения транзистора и может возникнуть ситуация, при которой будет невозможно программно управлять устройством. Решением проблемы может быть замена кремниевого диода на диод Шоттки (с меньшим падением напряжения), однако лучше применить добавочный резистор R2 с сопротивлением, меньшим за сопротивление резистора R1, для поляризации базы транзистора (рис.11б). Резисторы R1 и R2 создают делитель напряжения, понижающий на половину (или более) напряжение на базе транзистора, и удерживают его в закрытом состоянии. На рис.12а показана схема, которая должна выполнять следующую работу: микроконтроллер управляет транзистором, который включает и выключает какое-либо нагрузочное устройство. Если устройство включено, тогда нажатие кнопки S1 должно привести к его выключению. Однако схема будет работать неправильно. В случае, если микроконтроллер обнулит линию Р3.1, тогда устройство будет выключено. Если же на выходе Р3.1 появится лог."1", то транзистор откроется и включит устройство - так работала бы схема, если бы программу не нарушало нажатие кнопки. В схеме, показанной на рис.12а, микроконтроллер включает устройство и сразу же выключает его. Это происходит по причине наличия внутреннего резистора величиной 50...100 Ом, образующего с резистором в цепи транзистора делитель, который создает на выводе микроконтроллера напряжение величиной около 2 В (с учетом напряжения база-эмиттер) или меньше, что будет интерпретировано, как состояние лог."0" (или нажатие кнопки). Проблема может быть решена увеличением сопротивления резистора R1 свыше 100 кОм, что вместе с напряжением база-эмиттер транзистора должно дать на выводе микроконтроллера напряжение около 3 В (интерпретируется как лог."1", см. рис.12б). Недостатком такого решения есть необходимость применения транзистора с большим усилением (если требуется получить большой ток в нагрузке). На рис.12в показано более удачное решение (лишенное недостатков предыдущих схем) - применен дополнительный резистор R2 с сопротивлением, значительно меньшим за сопротивление резистора R1. Проблему можно решить и иным путем, как показано на рис.12г. Здесь применен MOSFET транзистор с N каналом, управляемый напряжением. Величина сопротивления R1 здесь не играет значительной роли (при малых частотах сигнала). Резистор R1 выполняет роль предохранителя, как на рис.9б. К недостаткам такого решения можно отнести более высокую стоимость таких транзисторов и достаточно высокий уровень порогового напряжения транзистора, из-за чего практически невозможно применение такого способа в микропроцессорных устройствах с напряжением питания ниже, чем 5 В. При построении новых микропроцессорных устройств разработчику следует особое внимание уделить элементам устройства с иным (обычно высшим) напряжением питания. К сожалению, и здесь возможны дополнительные ошибки, показанные на рис.13а. В данном устройстве выход микроконтроллера управляет цифровой схемой, которая имеет напряжение питания 12 В. Устройство не будет работать по простой причине - в цифровых устройствах CMOS порог переключения находится немного выше половины величины напряжения питания, что для рассматриваемого примера составляет около 6 В (выше, чем напряжение питания микроконтроллера). В результате этого любое логическое состояние выхода микроконтроллера на входе логического элемента цифровой схемы будет распознаваться как низкий уровень. На рис.13б показано решение проблемы с использованием инвертора с транзистором структуры n-p-n. Устройство гарантировано работает, но следует обратить внимание, что сигнал, подаваемый на цифровой элемент логики, инвертируется (нужно учесть при программировании). Иным решением может быть применение операционного усилителя (компаратора), на прямой вход которого подается сигнал с микроконтроллера, а на инверсионный вход - уровень порогового напряжения (в данном случае в соответствии со стандартом CMOS-5V это будет напряжение 2,5 В), полученного с делителя, собранного на резисторах R1 и R2 (рис.13в). Необходимо помнить, что компаратор нужно запитывать от того же источника питания, от которого питается цифровая логика, управляемая компаратором. Преимуществом данной схемы является сохранение фазы сигнала, а к недостаткам можно отнести ограничение диапазона частот операционного усилителя (устройства с единичными транзисторами работают намного быстрее). Подобные правила следует соблюдать, когда ко входу микроконтроллера нужно подключить схемный элемент с более высоким напряжением питания, компаратор или иное устройство с комплиментарным выходом (не касается устройств с выходом типа открытый коллектор). На рис.14 показан простейший способ их подключения. Использование диода, блокирующего появление высокого напряжения на входе микроконтроллера, достаточно для защиты последнего от повреждения. Когда компаратор будет в высоком состоянии, диод будет закрыт и не будет пропускать ток. На входе микроконтроллера удерживается также высокий уровень благодаря встроенному (или при необходимости добавленному) резистору. Низкое состояние на выводе взаимодействующего устройства изменяет поляризацию диода в направлении проводимости. Диод открывается, пропуская ток. Напряжение, появляющееся на выводе микроконтроллера, имеет уровень выходного напряжения подключенного устройства, повышенного на напряжение проводимости диода (здесь лучше применять диод Шоттки, имеющий малое падение напряжения). Программирование портов микроконтроллера Прежде всего следует обратить внимание на то, что порты микроконтроллера обслуживаются синхронным способом, т.е. считывание данных с порта или запись в него происходит с учетом частоты машинного цикла (под управлением выполняемых команд записи/считывания). Поэтому микроконтроллер не может обнаружить входной импульс короче, чем 1 машинный цикл (в случае некоторых команд - 2 цикла), и сам не может генерировать процессы короче 1 цикла (fтакт / 12). Для программиста запись или считывание данных из порта не отличаются от записи или считывания внутренней памяти данных. Возможно также считывание или запись единичных линий портов с использованием битовой адресации. В листинге приведена часто используемая инструкция адресации к портам. MOV P1, #0F0H ; одновременная запись восьми линий порта ; (например, 4 старших разряда установлены ; в лог."1", 4 младших - в лог."0") MOV P1, А ; посылка в порт Р1 содержимого аккумулятора MOV А, Р1 ; получение содержимого линии порта Р1 ; и запись его в аккумулятор SETB P1.1 ; установка в лог."1" линии порта Р1.1 CLR P1.1 ; обнуление линии порта Р1.1 JB P1.2, label ; выполнение условного перехода, когда на линии Р1.2 ; присутствует лог."1" Приведенные инструкции не охватывают всех возможных команд обращения к портам. Главное, что можно отметить, это возможность применения любых команд, позволяющих выполнять операции над непосредственно адрессованной ячейкой памяти или единичным битом. Специфичными и удобными при обращении к портам микроконтроллера являются инструкции, называемые инструкциями считывания-модификации-записи: ANL - логическое произведение; ORL - логическая сумма; XRL - сумма по модулю 2; JBC - условный переход и обнуление бита; CPL - отрицание бита; INC - инкрементация; DEC - декрементация; DJNZ - декрементация байта и переход (если не ноль); MOV P_._, C - пересылка величины указателя С на любую линию порта; CLR P_._ - обнуление линии порта; SETB P_._ - установка линии порта. Инструкция выполняется следующим образом: вначале считывается внутреннее состояние регистров, отвечающих за состояние выводов портов, затем происходит модификация считанной информации и в конце происходит запись новых значений в порты. Следует обратить внимание, что считывание регистра порта не имеет ничего общего с состояниями на внешних линиях - это есть величина, вписанная в порт программно. Например, для линий, используемых как вход, предыдущей инструкцией будет считываться состояние лог."1", независимо от присутствующего на линии напряжения. Особое внимание следует соблюдать при использовании инструкций JBC P_._ , label. Условный переход и обнуление заданного бита (единичной линии порта) происходит, если в регистре порта будет на данной позиции лог."1", независимо от фактического состояния вывода микроконтроллера (в отличие от инструкций JB, JNB, CJNE - они считывают внешнее состояние линии). Непромышленное выполнение инструкции типа считывание-модификация-запись часто приводит к трудностям локализации программных ошибок. С другой стороны, не следует бояться и отказываться от этих инструкций, так как они очень удобны. (Продолжение следует)


     SVITEL © 2014  Мир электроники.  Admin  При перепечатке и цитировании активная гиперссылка на сайт обязательна. Rambler's Top100