Обзор PIC-контроллеров
Давным-давно, в 1965, компания General Instruments (GI) основала Отделение Микроэлектроники (Microelectronics Division), начавшей с разработки первых жизнеспособных EPROM и EEPROM. Затем GI Microelectronics Division занималось разработкой широкой гаммы цифровых и аналоговых устройств - семейства AY3-xxxx AY5-xxxx. (Да-да, это именно то, о чем Вы подумали! Именно звуковые процессоры от GI - AY3-8910 и AY3-8912 стояли практически во всех Синклерах, Ямахах, всех MSX-компьютерах в 70/80-е годы)
В области микропроцессоров GI в начале 70-х появился CP1600. Это был настоящий 16-разрядный процессор, но с не очень хорошей работой с внешними устройствами. Поэтому, для тех применений, где нужен хороший ввод-вывод GI разработала Peripheral Interface Controller (сокращенно PIC), в середине 1975г. Он был сконструирован для очень быстрого (в понятиях 75-го года!) ввода-вывода и небольшого объема вычислений, поэтому его система команд была весьма небольшой. В общем, Вы можете увидеть, что из этого вышло - архитектура нижнего ряда сегодняшних чипов PIC16C5x - это архитектура, разработанная в 1975 году. Представленный в 1975г PIC-контроллер производился по NMOS технологии и был доступен только в масочном варианте, но это была поистине великолепная микросхема! В начале 80-х GI переживала трудные дни в своем основном бизнесе, и произвела реструктуризацию, сконцентрировавшись на разработке силовых полупроводников (в настоящее время компания General Instruments весьма успешно работает на этом рынке под названием General Semiconductors). GI Microelectronics Division было переименовано в GI Microelectronics Inc и существовало одно время как отдельный филиал, а затем было продано вместе с заводом в г. Чандлер, Аризона (Chandler, Arizona).
Это была длительная работа представителей рискового капитала, они избавились от производства большинства микросхем линеек AY3, AY5 и других, и сконцентрировались на разработках и производстве PIC и различных видов EPROM/EEPROM с параллельным и последовательным доступом. В итоге все это было названо компания Arizona Microchip Technology Inc., или просто Microchip, которая была четко спозиционирована на рынок встраиваемых систем управления (Embedded Control).
Сейчас Microchip одна из лидирующих компаний в своей области. Так если в 1990 году по объему продаж он был на 20-м месте, в 1993-м – на 8-м, то в 1997 году, несмотря на сильнейшую конкуренцию со стороны Атмела (ее новые микроконтроллеры типа AVR), Микрочип выходит на 2-е место, пропустив впереди себя только Моторолу (Атмел пока далеко позади):
|
1993 |
1994 |
1995 |
1996 |
1997 |
1 |
Motorola |
Motorola |
Motorola |
Motorola |
Motorola |
2 |
Mitsubishi |
Mitsubishi |
Mitsubishi |
Mitsubishi |
Microchip |
3 |
NEC |
NEC |
NEC |
ST |
NEC |
4 |
Hitachi |
Philips |
Philips |
NEC |
Mitsubishi |
5 |
Philips |
Intel |
Microchip |
Microchip |
Philips |
6 |
Intel |
Microchip |
ST |
Philips |
Toshiba |
7 |
ST |
Zilog |
Intel |
Zilog |
Hitachi |
8 |
Microchip |
ST |
Hitachi |
Hitachi |
Fujitsu |
9 |
Matsushita |
Matsushita |
Toshiba |
Fujitsu |
ST |
Чем же так хороши, и чем же так привлекли внимание разработчиков микроконтроллеры типа PIC? Напомним, что аббревиатура PIC означает Peripheral Interface Controller. Очень часто возникает необходимость в небольшом дешевом микропроцессоре, с несложными математическими вычислениями, способном осуществлять ввод-вывод сигналов с большой скоростью, обладающий низким потреблением и развитой периферией. Это питающееся от телефонной линии оборудование (АОНы, микро-АТС), портативные приборы с батарейным питанием, автомобильные сигнализации, АЦП, подключаемые к последовательному порту компьютера и от него же и питающиеся, медицинские приборы и т.д. PIC-контроллеры выпускаются как в больших, так и малых корпусах и имеют небольшую стоимость. Как вам понравится настоящий (!) микропроцессор (12Сххх) в 8-ногом ДИП корпусе, со встроенным тактовым генератором, цепочкой сброса и 6-ю ножками ввода вывода? Или PIC16C505 – контролер в 14-выводном корпусе со встроенным генератором всего за 49 центов!? (В США).
Большинство полезных качеств PIC-контроллеров сосредоточено в 3-х словах: CMOS, RISC, Harvard. Современная CMOS технология позволяет выпускать микроконтроллеры, работающие на частотах от 0 Гц до 40 Мгц. Потребляемый ток, который зависит от частоты, составляет единицы мА для частот 1-10 Мгц, и десяток мкА для более низких частот, а перевод в спящий режим (SLEEP) доводит потребление до единиц мкА. При этом благодаря RISC системе команд и Гарвардской архитектуре быстродействие даже на низких частотах остается достаточно большим - требуется всего 4 такта на одну команду (8 для команд переходов). Сравните с широко распространенным семейством 51-х однокристалок, у которых машинный цикл составляет 12 тактов, а команды могут иметь и не один цикл. (Компания Atmel в своем новом семействе AVR-контроллеров, которые тоже RISC, довела машинный цикл до 1 такта). RISC архитектура предполагает, что все команды имеют одну длину, в то время как при традиционной архитектуре команды имеют переменную длину. Это приводит не только к хорошему быстродействию, но и к экономии программной памяти. Три семейства PIC контроллеров имеют 12, 14 и 16 разрядные команды, и соответственно 33, 35 и 58 инструкций. Традиционные микропроцессоры (CISC) имеют существенно большее число команд, их которых чаще всего используется меньше половины, а некоторые вообще редко используются. В RISC-процессорах реализованы наиболее часто необходимые команды, а более сложные реализуются их комбинациями. Учитывая статистическое распределение частоты применения различных команд, программа в кодах RISC процессора получается меньше по объему и быстрее работает.
Я не удержусь, и приведу некоторые сравнительные данные, без которых, по-моему, не обходится ни одна обзорная статья о PIC-контроллерах. Это тест, проведенный фирмой Микрочип довольно давно. Сравнивались участки функционально одинаковых программ для разных контроллеров - упакованное BCD-преобразование, проверка бита и ветвление, цикл по счетчику, побитное выталкивание бита (преобразование параллельного кода в последовательный), программная выдержка времени. Сравнивался PIC16C5x @ 20MHz и:
Motorola MC68HC04 @ 11mhz,
Motorola MC68HC05 @ 4.2MHz,
Intel 8048 @ 11mhz,
Zilog Z86Cxx @ 12MHz,
National COP800 @20mhz.
Результаты сравнительного анализа однокристальных микро ЭВМ и PIC контроллера приведены ниже.
|
PIC16Cx |
COP800 |
MC86HC04 |
MC68HC05 |
Z86Cxx |
8048 |
Относительный размер кодов
|
1.00 |
1.29 |
1.82 |
2.24 |
1.51 |
1.58 |
Скорость выполнения |
1.00 |
0.11 |
0.02 |
0.14 |
0.21 |
0.11 |
Можно конечно оспаривать результаты этих тестов (что неоднократно происходит в ru.embedded и su.hardw.*), тем более что в нем не представлены более новые микроконтроллеры, тем не менее, – автор неоднократно убеждался, что в небольшой памяти PIC-кконтроллеров можно разместить достаточно много, гораздо больше, чем в соответствующей памяти для 8051 или Z80, к тому же при хорошем знании команд программы весьма хорошо оптимизируются.
Кроме экономного использования программной памяти, высокого быстродействия, низкого потребления и широкого диапазона питания (от 2 до 6В. для некоторых устройств), еще одним бесспорным достоинством PIC-контроллеров, является развитость встроенных аппаратных средств.
Начнем с тактового генератора. В большинстве контроллеров применен универсальный генератор, режим которого программируется на работы с тремя типами внешних кварцев (высокочастотный, среднечастотный и низкочастотный) или с внешней RC-цепочкой, для тех применений, где стабильность тактовой частоты не критична. Некоторые типы контроллеров имеют режим встроенного генератора, имеется в виду, что внешних цепей не требуется вовсе, а также не тратятся драгоценные выводы корпуса. Кроме тактового, во всех контроллерах имеется внутренний RC-генератор, использующийся для работы "Сторожевого Пса" (Watch Dog), или просто "собаки". Этот генератор, если он включен при программировании, тактирует специальный счетчик, который должен периодически сбрасываться программой через определенные промежутки времени, не большие заданного. Если в результате зависания или некорректности работы программы (по-простому - глюков) счетчик не будет вовремя сброшен, произойдет перезапуск контроллера. Особым случаем применения "собаки" является дежурный режим. Контроллер может находиться в состоянии спячки (SLEEP) с крайне низким потреблением, при этом с периодом срабатывания "собаки" выходить из спячки, просматривать входные сигналы и, если ничего не произошло - спать дальше. Если же произошли определенные изменения состояния входов - перейти к программе обработки, выполнив которую можно снова заснуть. Конечно, если для обработки ненужно высокое быстродействие, то можно просто использовать низкую тактовую частоту. Но когда нужно микро потребление энергии в среднем, и большое быстродействие на некоторое время - лучший выход это именно использование спящего режима с периодическим пробуждением без или совместно с прерыванием по изменению (см. ниже). Сигнал "сброс" (MCLR) может формироваться внешними или внутренними цепями, что упрощает и удешевляет схемотехнику.
Практически все контроллеры имеют хотя бы один счетчик-таймер, который может использоваться для счета внешних импульсов, генерации периодических прерываний или отсчета временных интервалов.
Связь с внешним миром осуществляется при помощи портов ввода-вывода, которые в PIC-контроллерах имеют свои особенности. К примеру - в 51-х контроллерах используются выходы с открытым стоком, для использования которых на ввод нужно записать "1". Это иногда дает некоторое упрощение, но не позволяет получить Z-состояние выходи и большое входное сопротивление входа. В PIC-контроллерах каждому порту соответствует два регистра - данных и направления (TRIS). При этом в зависимости от содержания регистра направления каждый вывод может быть индивидуально запрограммирован или на ввод или на вывод. На всякий случай, во многих контроллерах имеется один вывод с открытым стоком, который требует подключения нагрузки при работе на выход. Все входы контроллеров защищены от перенапряжения диодами на 0 и VCC и имеют высокую нагрузочную способность (20-25 мА). Некоторые порты имеют индивидуально подключаемые к входам источники тока, играющие роль pull-up резисторов. Отдельные входы могут быть запрограммированы так, что вызывают прерывание при изменении своего состояния (доступно также в спящем режиме!).
Для работы с аналоговыми сигналами определенные типы контроллеров имеют встроенные АЦП или компараторы. Существуют контроллеры, со встроенным управлением ЖКИ-индикаторами, выходами ШИМ, разнообразными последовательными интерфейсами (синхронный, асинхронный, I2C, SPI), имеющие встроенную энергонезависимую память данных, для запоминания разных констант, настроек и т.п. Для работы вместе с более мощными микропроцессорными системами, некоторые контроллеры имеют PSP (Parallel Slave Port).
Структурно, PIC-контроллеры состоят из памяти программ, памяти данных (регистры), АЛУ, портов ввода-вывода и периферийных устройств.
Я не хочу подробно расписывать структурные схемы, системы команд, "тонкие подробности функционирования" и маленькие "хитрости" по применению контроллеров - это темы для отдельных статей или для чтения подробной технической документации, поэтому в заключение приведу таблицу разновидностей PIC-контроллеров, по которой можно представить себе их большое разнообразие и выбрать контроллер для конкретного применения.
Большинство PIC-контроллеров выполнено в ОТР-исполнении, т.е. однократно программируемый кристалл. Для отладки используется специальный отладочный вариант с окошком для стирания ультрафиолетом. (На самом деле сам кристалл и там и там один и тот же, поэтому в принципе, если в ОТР добраться до самого кристалла, то его можно стереть. Правда нужно еще сделать подложку для стекания зарядов, да и добраться трудновато :)
Для начинающих лучше всего подойдет контроллер 16F84, имеющий электрически стираемую память программ или Flash. (Строго говоря там не флеш а ЕЕПРОМ, но сейчас любые виды энергонезависимой памяти принято называть флеш). Если же Вы собираетесь работать с ОТР, то ни в коем случае не устанавливайте биты защиты (секретности) в новых отладочных кристаллах с ультрафиолетовым стиранием (с буквами А или В) – Вы их потом не сотрете и использовать кристалл для другой прошивки не удастся! Иногда помогает выдержка под лампой с течении 6-ти и более часов, но вероятность этого невелика, поэтому не рискуйте отладочными JW кристаллами, которые в несколько раз дороже «боевых» ОТР.
Запись программы в кристалл может осуществляется двумя методами - параллельным и последовательным. Старое семейство (16С5хх) и первые микросхемы серии 17Сххх имели только параллельный режим записи, все остальные кроме параллельного, имеют последовательный режим, который позволяет использовать более простые программаторы и осуществлять запись программы в установленную в плате микросхему (ISP - внутрисхемное программирование).
Номенклатура контроллеров с электрически перезаписываемой памятью программ постепенно увеличивается, хотя в этом направлении Микрочип почему-то сильно отстает от своего основного конкурента - Атмел, выпускающего давно семейство MCS-51 с флеш-памятью и приступившего к выпуску новой серии AVR-контроллеров, которые кроме флеша обладают многими другими преимуществами. Это тем более странно, что компания Микрочип выпускает широкую гамму просто микросхем ЕЕПРОМ, являясь одним из лидеров в этой области, но почему-то тянет с флеш-памятью в PIC-контроллерах.
По конструктивному исполнению PIC-контроллеры выпускаются в обычном пластмассовом корпусе (DIP), керамическом корпусе с окном (JW, отладочные варианты), широкой гамме планарных и других корпусов (SIOC, PLCC, PQFP, etc.) , а также в виде кристаллов для гибридных схем (die, micromodule, etc.)