Микроконтроллеры pic что это такое, виды плат, применение

Отладочная плата для микроконтроллеров PIC16F1827 и PIC16F1847. Часть 1. Основные характеристики, состав и принципиальная схема платы

Микроконтроллер PIC16F628A компании Microchip относится к семейству 8-разрядных микроконтроллеров Enhanced Mid-Range core 8-bit PIC. Прибор недорог, доступен и является хорошим выбором для разработки проектов. Благодаря своим компактным размерам (корпус DIP18) он занимает небольшую площадь на плате, но имеет богатую периферию для разработки различных приложений. Эти микроконтроллеры являются совместимыми со своими предшественниками PIC16x84, для которых в сети Интернет можно найти огромное количество примеров и информации. А не так давно компания Microchip сообщила о пополнении серии Enhanced Mid-Range core, представив микроконтроллеры PIC16F(LF)1847, которые совместимы с PIC16F628A, но имеет больше периферийных модулей и усовершенствованные функции.

Микроконтроллер PIC16F1847 имеет 14 КБайт Flash-памяти и 1 КБайт RAM, и возможно это первый 18-выводный 8-битный микроконтроллер с таким количеством Flash и RAM. C целью изучения возможностей и проведения экспериментов на базе микроконтроллера PIC16F1847 или PIC16F1827 было решено разработать собственную отладочную плату.

Отладочная плата дает много преимуществ при разработке приложений, при изучении возможностей микроконтроллеров и их периферии, позволяет сократить время разработки узлов на макетной плате. Так как стандартной схемы отладочной платы для микроконтроллеров нет, то было решено включить следующие элементы в состав отладочной платы:

  • коннектор ICSP для внутрисхемного программирования микроконтроллера посредством программатора PICkit3;
  • интегрированный регулятор напряжения +5 В;
  • 2-х строчный символьный ЖК индикатор на базе контроллера HD44780;
  • восемь светодиодов, позволяющих отслеживать состояние выходных линий;
  • шесть кнопок, для возможности ввода данных;
  • потенциометр, обеспечивающий аналоговый ввод;
  • конвертер сигналов интерфейса RS232;
  • внешняя EEPROM с последовательным интерфейсом I2C (24LC512);
  • расширитель портов ввода/вывода (MCP23008);
  • четырехканальный операционный усилитель (MCP604) для усиления и нормирования аналоговых сигналов;
  • цифровые потенциометры (DS1868);
  • усилитель с программируемым коэффициентом усиления (MCP6S92);
  • датчик температуры (TC74A0);
  • область для макетирования.

Расположение указанных элементов на плате показано на рисунке ниже. Компоненты установлены на макетную плату с размерами 18 см × 12.8 см.


Расположение компонентов на плате

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

Питание платы возможно от 9 В батареи, питание микроконтроллера и периферии осуществляется от регулятора напряжения LM7805.

Принципиальная схема платы не сложная. Выводы питания микроконтроллера и периферийных устройств подключены к Vcc и GND, в то время как все рабочие выводы подключены к разъемам. Помимо выводов питания, может потребоваться подключить дополнительные выводы периферийных устройств к Vcc или GND. Например, это выводы установки аппаратного адреса устройства на шине I2C. На рисунке ниже изображена схема включения микроконтроллера и разъемов.

Как вы видите, на схеме изображена перемычка для вывода RA5/MCLR микроконтроллера, который может использоваться как вывод сброса или как линия ввода/вывода. Для тактирования микроконтроллера может использоваться внешний керамический резонатор, для установки которого имеется 3-выводный слот. При использовании внутреннего осциллятора микроконтроллера, выводы RA6 и RA7 также могут использоваться как линии ввода/вывода.

На плате установлено 3 устройства производства компании Microchip с интерфейсом I2C: MCP23008 (8-битный расширитель портов), TC74 (датчик температуры) и 24LC512 (EEPROM). Адресные выводы MCP23008 и 24LC512 подключены к общему проводу (GND). Датчик температуры TC74 не имеет адресных выводов. На рисунке ниже показано включение трех I2C устройств на плате с их соответствующими адресами.

Подобным образом, на схеме ниже, обозначено подключение интерфейса UART, четырехканального операционного усилителя MCP604, цифрового потенциометра DS1868 и усилителя с программируемым коэффициентом усиления MCP6S92. Преобразование уровней интерфейса UART ТТЛ-RS232 осуществляет микросхема MAX232 в стандартном включении. Все рабочие выводы также разведены на разъемы для возможности коммутирования.

Оставшиеся узлы платы – регулятор напряжения +5 В, кнопки, светодиоды и ЖК индикатор, схема включения изображена ниже. Диод 1N4008 предназначен для защиты от переполюсовки питания. Выводы управления и данных ЖК индикатора подключены к 6-выводному разъему. Массив из 8 кнопок также подключен к разъему, активный уровень кнопок – низкий.

Дополнительный материал: расположение выводов основных компонентов платы

Перевод: Vadim по заказу РадиоЛоцман

Микроконтроллеры PIC для начинающих

На современном рынке есть ряд семейств и серий микроконтроллеров от разных производителей, среди них можно выделить AVR, STM32 и PIC. Каждое из семейств нашло свою сферу применения. В этой статье я расскажу начинающим о микроконтроллерах PIC, а именно, что это такое и что нужно знать для начала работы с ними.

Что такое PIC

PIC – это название серии микроконтроллеров, которые производятся компанией Microchip Technology Inc (США). Название PIC происходит от Peripheral Interface Controller.

Микроконтроллеры PIC имеют RISC-архитектуру. RISC – сокращённый набор команд, используется также в процессорах для мобильных устройств. Есть целый ряд примеров её использования: ARM, Atmel AVR и другие.

Компания Microchip в 2016 году купила Atmel – производителя контроллеров AVR. Поэтому на официальном сайте представлены микроконтроллеры семейства и PIC и AVR.

Семейства

Среди 8-битных микроконтроллеров PIC она состоит из 3-х семейств, которые отличаются архитектурой (разрядностью и набором команд).

Baseline (PIC10F2xx, PIC12F5xx, PIC16F5x, PIC16F5xx) ;

Mid-range (PIC10F3xx, PIC12F6xx, PIC12F7xx, PIC16F6xx, PIC16F7xx, PIC16F8xx, PIC16F9xx) ;

Enhanced Mid-range (PIC12F1xxx, PIC16F1xxx) ;

High-end или PIC18 (18Fxxxx, 18FxxJxx and 18FxxKxx).

Характеристики, которых приведены в таблице ниже.

Кроме 8 битных микроконтроллеров компания Microchip производит 16-битные:

DsPIC30/33F для обработки сигналов.

Представители 16-битного семейства работают со скоростью от 16 до 100 MIPS (выполнено миллионов инструкций в секунду). Стоит отметить и особенности:

машинный цикл – 2 такта;

разрядность АЦП – 16 бит;

поддерживают ряд протоколов связи (UART, IrDA, SPI, I2S™, I2C, USB, CAN, LIN and SENT), ШИМ и прочее.

Также есть семейство 32 битных микроконтроллеров – PIC32MX, основные особенности:

работают на частоте до 120 мГц;

выполняют до 150 MIPS;

АЦП: 10-бит, 1 Msps (скорость квантования), до 48 каналов.

С какого PIC начать?

Новичкам стоит начать осваивать микроконтроллеры PIC с 8-битной линейки. Вообще, производитель заявляет о том, что особенностью всего семейства является лёгкая переносимость программ с одного семейства на другое и совпадения цоколевки ряда моделей.

Одним из популярнейших в среде радиолюбителей микроконтроллеров является PIC16f628A. Его технические характеристики такие:

Есть встроенный тактовый генератор. Вы можете настроить для работы с частотой 4 или 8 МГц;

18 пинов, из них 16 – ввод/вывод, а 2 – питание;

Для работы на частотах до 20 МГц можно подключить кварцевый резонатор, но в этом случае на ввод/вывод останется не 16, а 14 ног;

В маркировке есть буква F, это значит, что используется FLASH-память, объёмом в 2048 слов;

14-битные инструкции, 35 штук;

4 аналоговых входа;

На входах PORTB есть подтягивающие резисторы;

Два 8-битных таймера и один 16-битный;

Машинный цикл – 4 такта кварцевого резонатора или внутреннего генератора);

128 байт EEPROM;

USART – последовательный порт;

внутренний источник опорного напряжения;

питается от 3.3 до 5 В.

Причинами популярности является низкая цена и возможность тактирования от внутреннего генератора.

Какая цоколевка у 16f628 изображено ниже:

Блочная внутренняя схема этого микроконтроллера изображена ниже.

На что следует обратить внимание на схеме в первую очередь?

У этого микроконтроллера есть два порта PORTA и PORTB. Каждый пин, каждого из них может использоваться как вход и выход, а также для подключения периферии или задействования других модулей микроконтроллера.

Рассмотрим эту часть схемы крупно.

Например, порты RB0-RB3 – могут выступать в роли аналоговых. К RA6, RA7 в случае необходимости подключается источник тактирования (кварцевый резонатор). Сами же выводы микроконтроллера настраиваются в режим входа/выхода с помощью регистра TRIS.

Для этого есть команды типа:

TRISA = 0; // Все выводы порта А устанавливаются как выходы
TRISB = 0xff; // Все выводы порта B назначаются как входы
TRISA0 = 1; // Так назначается отдельный пин как вход (1) или выход (0)
TRISA5 = 1 ; // здесь 5 вывод порта А – назначен входом

Вообще режимы работы, включение WDT (сторожевого таймера) выбор источника тактирования микроконтроллера и прочее настраивается с помощью регистров специального назначения — SFR, а память и данные хранятся в GFR – простыми словами это статическое ОЗУ.

В официальном Datasheet, на страницах 18-21 вы найдете 4 банка памяти регистров специального назначения SFR и регистров общего назначения GFR. Знание регистров важно, поэтому распечатайте и выучите указанные страницы из Datasheet .

Для удобства ниже приведены эти таблицы в виде картинок (нумерация регистров, как и всё в цифровой электронике начинается с 0, поэтому номер четвертого – 3).

Как подключить и на каком языке программировать?

Чтобы запустить этот микроконтроллер достаточно подать плюс на Vdd и минус на Vss. Если нужен кварцевый резонатор, то он подключается к выводам 16 и 15 (OSC1 и OSC2) микроконтроллера PIC16f628, для других контроллеров с большим или меньшим числом выводов – смотрите в datasheet. Но этот момент нужно указывать при программировании и прошивке.

Кстати о переносимости и совпадении цоколевки – на 16f84A – она аналогична, и на многих других.

Фрагмент схемы с подключенным к pic16f628a внешним резонатором:

Есть два основных языка для программирования микроконтроллеров PIC – это assembler и C, есть и другие, например PICBasic и т.д. Еще можно выделить упрощенный язык программирования JAL (just another language).

Для примера ниже приведена программа для «мигания светодиодом» — своего рода «Hello World» для микроконтроллера PIC на языке C.

В 1 строке подключается библиотека микроконтроллеров PIC, далее подключается библиотека программы задержки.

В функции main(void) в начале устанавливаются начальные параметры, подобно тому как мы это делали в функции Void setup () – в статьях об ардуино. Далее в строках 11-16 объявляется бесконечный цикл while(1), в ходе которого и выполняется программа «мигания светодиодом».

В примере состояние порта постоянно инвертируется, т.е. если он был в «0», то перейдет в «1» и наоборот. На C для PIC есть следующие команды управления команды:

PORTA = 0; // переводит все пины порта А в низкий уровень (лог. 0)
PORTB = 0xff; // переводит все пины порта B в высокий уровень (лог. 1)
RB5 = 1; // На пятом выводе порта B высокий уровень

А так выглядит та же программа, но уже на языке JAL, я перевел на русский язык комментарии от разработчиков встроенных примеров в JALedit (среда разработки).

Возникает соблазн выбрать JAL, и вам он может показаться проще. Безусловно на нём можно реализовать любые проекты, но с точки зрения пользы для вас как для специалиста – это бесполезный язык. Значительно больших результатов вы добьетесь, изучая синтаксис и принципы программирования на языке C (большая часть популярных сейчас языков C-подобны) или на Assembler – это низкоуровневый язык, который заставит вас понимать принцип работы устройства и что происходит в программе в каждый конкретный момент времени.

В чем работать

Если сказать совсем обобщенно для работы с любыми микроконтроллерами нужно:

1. Текстовый редактор.

3. Программа для загрузки прошивки в микроконтроллер.

И я даже читал старые учебники, где автор, работая из-под DOS писал код, компилировал и прошивал его разными средствами. Сейчас же под все популярные операционные системы есть среды для разработки, как узкоспециализированные (для конкретного семейства микроконтроллеров или семейств от одного производителя) так и универсальные (либо содержат все необходимые инструменты, либо они подключаются в виде плагинов).

Например, в цикле статей об Arduino мы рассматривали среду Arduino IDE в ней же мы и код писали и с её помощью «заливали» прошивку в «камень». Для микроконтроллеров PIC есть такие программы, как:

MPASM — используется для разработки на языке Assembler от фирмы Microchip ;

MPLAB — также IDE от Microchip для PIC-контроллеров. Состоит из множества блоков для тестирования, проверки, работы с кодом и компиляции программ и загрузки в микроконтроллер. Также есть версия MPLAB X IDE – отличается большим функционалом и построена на базе платформы NetBeans ;

MikroC — универсальная среда (не только для ПИКов) для разработки. Как видно из названия «заточена» под программирование на C, а также есть такие программы как MikroBasic и MikroPascal, для соответствующих языков ;

JALedit — подходит для языка JAL, о котором мы упоминали выше ;

И ряд других менее известных.

Как прошивать микроконтроллер?

Для PIC-микронотроллеров есть ряд программаторов. Официальным считается PICkit. Их 4 версии. Но можно прошивать и универсальными, например, TL866 (он поддерживает почти всё, что может понадобится начинающему радиолюбителю, при этом очень дешевый).

Также в сети есть ряд различных схем программаторов для ПИКов, как для работы через COM-порт:

Так и через USB (на самом деле тоже com, только через преобразователь на ИМС MAX232).

Заключение

Микроконтроллеры PIC16 подходят для простых проектов, типа простой автоматики, вольтметров, термометров и прочих мелочей. Но это не значит, что нельзя делать на этом семействе сложные и большие проекты, я привел пример того для чего чаще всего их используют. Для общего представления рекомендую посмотреть несколько видео:

В одной статье рассматривать темы о том, как программировать микроконтроллеры, неважно какого семейства, безсмысленно. Поскольку это очень большой объём информации. Для начинающих советую к прочтению:

Катцен С. — PIC-микроконтроллеры. Все что вам необходимо знать;

Кёниг А. — Полное руководство по PIC микроконтроллерам;

Шпак Ю.А. — Программирование на языке С для AVR и PIC микроконтроллеров;

Магда Ю.С. — Микроконтроллеры PIC: архитектура и программирование;

Яценков В.С. — Микроконтроллеры Microchip. Практическое руководство.

Поделитесь этой статьей с друзьями:

Вступайте в наши группы в социальных сетях:

PIC-микроконтроллеры, где могут пригодиться радиолюбителю?

Среди множества семейств микроконтроллеров от разных производителей радиолюбители полюбили два – AVR и PIC. Микроконтроллеры PIC производятся компанией Microchip.

Энтузиастами и любителями в области электроники часто используются как для сборки готовых проектов, так и для разработки своих малых автоматизированных систем. Для примера многие встраиваемые вольт-амперметры из Китая построены на базе PIC-контроллеров.

Виды микроконтроллеров PIC и их архитектура

Пожалуй, среди начинающих очень распространены микроконтроллеры пик младших моделей, а именно семейств:

Эти микроконтроллеры 8-битные, при этом различают две архитектуры:

  1. Baseline с 10-битными инcтрукциями с 35-ю ассемблерными командами.
  2. Mid-range с 14-битными инструкциями и 35 или 49 команд на языке ассемблера в зависимости от конкретной модели.

В разработках радиолюбителей очень часто встречается модель 16f628. Конфигурация этого pic-микроконтроллера следующая, в нём есть:

  • встроенный тактовый генератор может быть настроен на частоту 4 или 8 МГц;
  • 18 ножек – портов, из которых 16 может использоваться для ввода-вывода данных, 2 задействованы под питание;
  • возможность использовать кварцевый резонатор для работы на тактовых частотах до 20 МГц (тогда задействуют еще 2 ноги для него);
  • буква F в маркировке говорит о памяти типа Flash, объёмом на 2048 слов;
  • гарвардская архитектура, с 14-битными инструкциями, всего их 35 штук;
  • длина машинного цикла 4 такта (1 действие выполняется за 4 такта кварцевого резонатор или внутреннего генератора);
  • 224 байта ОЗУ;
  • 128 байт EEPROM;
  • USART – последовательный порт;
  • внутренний источник опорного напряжения;
  • питается от 3.3 до 5 В.

PIC16 имеют низкую цену и достаточно развитую аналоговую периферию, что и обеспечивает их популярность. При этом модели могут выпускаться в корпусах с количеством ножек от 18 до 40. Это позволяет делать более сложные системы, чем возможно на вышеприведенном примере.

Существуют и более мощные модели, например, 16-битные:

  1. PIC24x
  2. DsPIC30/33F – для цифровой обработки сигналов.

Они способны выполнять 16 MIPS (миллионов итераций в секунду), что обеспечивает весьма высокое быстродействие вашей системы при 2 при двухтактном машинном цикле, такая скорость обеспечивается частотой в 32 МГц. 40 MIPS достигается при 80 МГц соответственно.

32-битные микроконтроллеры PIC32MX имеют большую производительность и превосходящий объём памяти, если сравнивать с 16-битными моделями, и работают на частоте в 80 МГц.

Сфера применения PIC-микроконтроллеров

Как уже было сказано, семейство PIC16 очень любят радиолюбители. К тому же оно хорошо описано в большом количестве литературы. По количеству учебников с семейством PIC, на момент написания статьи, может посоревноваться только семейство AVR.

Давайте рассмотрим несколько схем с применением микроконтроллеров семейства PIC.

Таймер для управления нагрузкой на PIC16f628

Простейшая автоматика на микроконтроллерах PIC – это стихия 8-битного семейства. Их объём памяти не позволяет делать сложных систем, но отлично подходит для самостоятельного выполнения пары поставленных задач. Так и эта схема трёхканального таймера на Pic16f628, поможет вам управлять нагрузкой любой мощности. Мощность нагрузки зависит только от установленного реле/пускателя/контактора и пропускной способности электросети.

Настраивается прибор с помощью набора из 4-х кнопок SB1-SB4, на HG1 выводятся параметры, это дисплей типа LCD на 2 строки по 16 символов. В схеме используется внешний кварцевый резонатор на 4 МГц, а KV1 – это реле, с питанием катушки в 24 В, вы можете использовать любое реле, лишь бы оно подходило по напряжению катушки к вашему БП. МК питается от 5 В стабилизированного источника.

Вы можете использовать от 1 до 3 каналов в управлении нагрузкой, стоит только продублировать схему, добавив реле к выводам RA3, RA4 микроконтроллера.

Часы-будильник на МК PIC16f628A

Такие часы, согласно заявлениям разработчика, получились весьма точными, их погрешность весьма мала – порядка 30 секунд в год.

С незначительными переделками вы можете использовать любые 7-мисегментные индикаторы. Питаются от блока питания на 5В, при этом, при отключении от сети продолжают работать от батареек, что вы можете увидеть в правом верхнем углу схемы.

Регулятор мощности паяльника на PIC16f628A

У начинающих радиолюбителей не всегда есть возможность купить паяльную станцию. Но они могут собрать её сами. На схеме ниже представлен регулируемый блок питания на PIC16f628, для работы паяльника. В основу схемы вложено фазоимпульсное управление. Это, по сути, доработанный и осовремененный аналог классического тиристорного регулятора, но с микроконтроллерным управлением.

Схема довольно простая, в нижней части реализация светодиодной индикации. Главный силовой элемент – тиристор BT139, а MOC3041 – нужен для гальванической развязки МК от сети и управления тиристором с помощью логического уровня в 5 В.

Как прошивать микроконтроллер? С чего начать изучение?

Официальный программатор для семейств PIC – это PICkit V3, является наиболее распространенным. Программный код загружается в чип с помощью ПО, которое есть на диске, он идёт в комплекте с программатором. IDE имеет название MPlab. Является официальной средой разработки от производителя, между прочим, бесплатной. Для изучения устройств есть отличная книга на русском языке «Pic-микроконтроллеры. Полное руководство» автор её Сид Катцен. Кроме этой книги вы найдете огромное количество видео-уроков и текстовых материалов, которые вам помогут.

Применение микроконтроллеров PIC весьма широко, многие радиолюбители собирают металлоискатели и счетчики Гейгера на этих МК.

Микроконтроллеры PIC. Вводная.

Что-то никто не хочет написать про микроконтроллеры фирмы Microchip, вот и решил я запилить статейку — может кому пригодится.

О том, что же это за звери такие, какие они бывают и что умеют неплохо написано в вики-пики и, естественно, на официальном сайте.

В номенклатуре Microchip Technology Inc. представлен широкий спектр 8-и, 16-и и 32-битных микроконтроллеров и цифровых сигнальных контроллеров под маркой PIC. Номенклатура насчитывает более 500 различных контроллеров со всевозможными вариациями периферии, памяти, количеством выводов, производительностью, диапазонами питания и температуры…

Оставив на будущее самостоятельное изучение 16/32-х битные и DS микроконтроллеры (МК) посмотрим поближе 8-ми битную линейку, которая, в свою очередь, состоит из 3-х семейств с различающейся архитектурой:

  • базового — Baseline, инструкции 12-ти битные, 35 команд;
  • среднего — Mid-Range и Enhanced Mid-Range, инструкции 14-ти битные, 35/49 команд;
  • старшего — PIC18, инструкции 16-ти битные, 83 команды.

Наглядно они представлены на нагло стыжженой картинке с их сайта. Там же имеется сводная табличка по основным характеристикам.

Так уж случилось, что наиболее популярными и часто встречающимися в любительских разработках МК являются PIC16x84(A) и PIC16x628, относящиеся к семейству Mid-Range, поэтому считаю их лучшими кандидатами для рассмотрения. К тому же 16F84 — единственное что есть у меня из PIC’ов.
Информация для сравнения легко находится на всё том же офф. сайте, а подробности, как всегда, в технической документации типа datasheet (ДШ).
Отдельно стоит упомянуть, что тип памяти программ может быть различным и определяется буквами в наименовании:

  • С — EPROM;
  • CR — ROM;
  • F — FLASH.

Подходящим вариантом для издевательств(конечно если вы не собираетесь пускать изделие в серию) я считаю флеш память, которая, кстати выдерживает до 1000 циклов стирания/записи (по ДШ, в реальности возможно и больше).

Так, с тем, что же будем изучать — разобрались. Дальше проще. Основные характеристики семейства:
RISC-ядро, гарвардская архитектура

  • тактовая частота до 20 МГц;
  • количество команд (инструкций) — 35;
  • все команды выполняются за один машинный цикл (4 такта), кроме команд ветвления;
  • адресуемая память команд — 8К слов (слово = 14 бит);
  • оперативная память — до 368 байт;
  • прямая, косвенная и относительная адресация для данных и инструкций;
  • аппаратный стек на 8 уровней;
  • поддержка прерываний.


Специальные возможности микроконтроллера смотрим в ДШ, обычно это варианты тактирования, программирования, виды подтяжек, наличие всяких собак, энергосбережений, защит кода и сбросов по появлению/падению питания, в общем всяческие «фичи». Там же смотрим сколько у нас памяти и какая есть периферия. Например, для PIC16F84 имеем:

  • Память программ — 1K слов FLASH;
  • Память данных ОЗУ — 68 байт;
  • Память данных ЭСППЗУ — 64 байт;
  • 13 линий ввода/вывода с индивидуальным контролем направления
  • Сильноточные схемы для непосредственного управления светодиодными индикаторами (макс. ток 25/20мА)
  • Timer0: 8-разрядный таймер/счетчик с 8-разрядным программируемым предделителем

Не густо, правда? Вот 628-й уже поинтереснее, посмотрите сами что в нём есть (типа домашнее задание, чтоб не скучали). Сказ о периферии нужно писать отдельно, в одну статью точно всё не влезет, так что пока могу лишь отослать. Куда? Да всё туда же — ДШ вам в руки.

А теперь подробнее о ядре семейства, смотрим схему и пытаемся понять что тут за что отвечает:

Тактовый генератор вырабатывает все необходимые сигналы для синхронизации процессов, происходящих в МК. Исполнение команды, находящейся в регистре инструкций, происходит за 4 такта генератора:

  • Q1: декодирование очередной инструкции;
  • Q2: чтение данных (при необходимости);
  • Q3: обработка данных;
  • Q4: запись данных (при необходимости).

Эта последовательность называется машинным циклом (м.ц.). В то же самое время из памяти выбирается следующая инструкция и в конце 4-го такта попадает в регистр инструкций для дальнейшего исполнения. Называется такое чудо конвейером. В командах перехода его приходится перезагружать (выбирать команду из памяти по новому адресу), поэтому-то они и требуют для исполнения 2 м.ц. Адрес выбираемой из памяти инструкции находится в счётчике команд.

Вычисления в МК производятся арифметико-логическим устройством (АЛУ), которое, в свою очередь при работе взаимодействует с регистрами. Основной регистр, используемый в вычислениях называется аккумулятором или рабочим регистром, обозначается W и не отображается на адресное пространство. Остальные регистры образуют память данных и делятся на 2 группы:

  • регистры специального назначения (SFR) — используются для управления ядром и периферией;
  • регистры общего назначения (GPR) — по сути просто оперативная память, доступная программисту.

Вот и подошли вплотную к организации памяти. Смотрим карту памяти, и…

… о, ужас! Вся оперативная память, называемая тут, как мы уже знаем, регистрами, оказывается разделена на блоки по 128 байт, называемые банками, между которыми как-то надо ещё и переключаться. Мало того, не только оперативка, но и регистры конфигурации (это которые SFR) также разбросаны по банкам. Беспредел полнейший! Но что поделаешь… Смотрим дальше и видим, что некоторые SFR всё-же дублируются (есть в нескольких или во всех банках). Сопоставляя вышесказанное можно предположить, что они относятся к настройкам ядра. Проверяем по ДШ:

  • STATUS — содержит флаги состояния АЛУ, флаги причины сброса, биты переключения банков памяти.

[7] IRP — бит выбора банка при косвенной адресации 0 — 0,1 (0x000-0x0FF); 1 — 2,3 (0x100-0x1FF);
[6-5] RP1:RP0 — биты выбора банка при непосредственной адресации;
[4] -TO — флаг переполнения сторожевого таймера
[3] -PD — флаг включения питания
[2] Z — флаг нулевого результата
[1] DC — флаг десятичного переноса/заёма
[0] C — флаг переноса/заёма

Ага, то что надо нашлось. Что ещё есть?
Обратиться к любому регистру можно используя прямую или косвенную адресацию, помним? Во втором случае используются 2 специальных регистра:

  • FSR — указатель адреса в памяти данных, используемый при косвенной адресации;
  • INDF — регистр, через который осуществляется обращение к памяти при косвенной адресации;

Счётчик команд:

  • PCL — младшая часть 13-ти битного счётчика команд PC;
  • PCLATH — буферный регистр для загрузки PCH (старшей части счётика)

Оппа! Старший, младший… что-то кажется такое уже было? Лезем подтверждать свои догадки — ага, всё правильно, и у программной памяти тоже хитрая разбивка — на 4 страницы по 2К слов:

Для адресации 2К необходимо 11 бит, из них младшие 8 доступны как PCL, а старшие 3, вместе с двумя битами номера страницы образуют PCH, недоступный напрямую, однако он изменяется автоматически при модификациях PCL:

  • при записи в регистр PCL — PCH целиком загружается из PCLATH;
  • при выполнении команды перехода — из PCLATH загружается только номер страницы, остальное из опкода;
  • при возврате по стеку — PCH и PCL загружаются из стека.

Стек служит для запоминания адресов возврата при вызове подпрограмм или прерываний и последующего возвращения по сохранённому адресу, имеет разрядность 14 бит (сохраняет весь PC) и ограничен глубиной в 8 уровней, что необходимо учитывать при активном использовании вложенных подпрограмм.

Вот и всё касательно ядра. Остальное считается периферией, основные модули, присутствующие во всех МК это порты ввода/вывода, прерывания и таймеры, но это уже совсем другая тема.

Намекну лишь, что есть ещё слово конфигурации — область памяти в которой хранятся постоянные параметры (режим генератора, биты защиты, биты включения некоторых аппаратных функций, режим работы вывода сброса), а программируется это дело в процессе прошивки.

Без внимания остались также вопросы системы команд, программирования, прошивки, отладки, мигания светодиодом, etc…

Ссылки:
www.microchip.com
microchip.com.ru
www.microchip.ru
Активно пользовал «справочник по среднему семейству микроконтроллеров PIC-micro» — перевод оригинальной технической документации DS33023A с microchip.ru, а также даташиты (в оригинале).

з.ы. опыт работы с пиками — один раз зашил готовую прошивку. в эмулях когда-то ковырялся, а тут пару дней ДШ читал, да вам писал. Первая моя статья, так что любая критика приветствуется. Знаю, что тут обитают те, кто работал с этими МК, не стесняйтесь дополнять, поправлять, я мог что-то упустить или в чём-то ошибиться.
Если интересно, то в свободное время попробую написать продолжение, дальше по сути нужно писать про софт, программатор, систему команд и периферию, в таком порядке.
Всем дочитавшим до конца — спасибо!

Источники:

http://electrik.info/microcontroller/1525-mikrokontrollery-pic-dlya-nachinayuschih.html

http://arduinoplus.ru/pic-mikrokontrollery-gde-mogut-prigoditsya/

http://we.easyelectronics.ru/PIC/mikrokontrollery-pic-vvodnaya.html

http://arduinoplus.ru/jxd-509w-obzor/

Ссылка на основную публикацию