AFON // радиотехник affonya@mail.ru
← Микроконтроллеры и ПЛИС

Микроконтроллеры PIC

Справочник по контроллерам Microchip: архитектура и семейства, память, тактирование, периферия, конфигурационные биты и программирование — от первого включения до рабочего проекта.

Что такое PIC

PIC (Peripheral Interface Controller) — семейство 8-, 16- и 32-разрядных микроконтроллеров компании Microchip Technology. Первые PIC появились ещё в конце 1970-х и за десятилетия стали одними из самых массовых МК в любительской и промышленной электронике благодаря низкой цене, широкой номенклатуре, простой обвязке и огромному сообществу.

В основе PIC — гарвардская архитектура (раздельные шины и память программ и данных) и RISC-набор команд: у младших ядер всего 33–35 инструкций, у PIC18 — около 75. Память программ — энергонезависимая Flash (в старых сериях — OTP или УФ-стираемая), что позволяет перепрошивать контроллер многократно прямо в плате.

Семейства PIC

Линейка охватывает всё — от 6-выводных «малышей» до 32-битных чипов с Ethernet и USB. Разрядность в таблице — это ширина команды; данные у 8-битных ядер всегда байтовые.

СемействоЯдроКомандаКратко
PIC10 / PIC12baseline12 битМини-корпуса 6–8 выводов, простейшие задачи
PIC12 / PIC16mid-range14 битСамое массовое, богатая периферия, ADC, USART
PIC18enhanced16 бит8-битные данные, оптимизирован под язык C, USB, CAN
PIC24 / dsPIC16-бит24 бит16-битные МК и цифровые сигнальные контроллеры (DSP)
PIC32MIPS3232 битПроизводительные 32-битные чипы, графика, связь

Для радиолюбителя «золотая середина» — mid-range PIC16: достаточно ресурсов, много готовых примеров, простая прошивка. PIC18 берут, когда нужен комфортный C и периферия вроде USB.

Архитектура и регистры

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

У mid-range память данных разбита на банки; переключение выполняется битами RP0/RP1 в регистре STATUS. Аппаратный стек (8 уровней у mid-range) хранит только адреса возврата и недоступен напрямую. Конвейер «выборка/исполнение» даёт выполнение большинства команд за один машинный цикл (4 такта кварца).

Память

В PIC три вида памяти, и это важно не путать:

  • Flash (память программ) — хранит прошивку; измеряется в «словах» (14-битных у mid-range), а не в байтах.
  • RAM (память данных) — SFR + GPR, обнуляется при выключении.
  • EEPROM (данные) — небольшая энергонезависимая область для настроек, калибровок, счётчиков; переживает выключение питания.

Тактирование

Источник тактовой частоты выбирается конфигурационными битами при прошивке. Основные режимы генератора:

РежимНазначение
LPНизкочастотный кварц (часовой 32.768 кГц)
XTКварц среднего диапазона (до ~4 МГц)
HSВысокочастотный кварц (4–20 МГц)
RC / EXTRCВнешняя RC-цепочка (дёшево, неточно)
INTOSCВстроенный генератор — экономит выводы под кварц

Один машинный цикл = 4 периода тактовой частоты. При кварце 4 МГц команда выполняется за 1 мкс — удобно для прикидок задержек.

Периферия

Даже недорогие PIC16 несут внушительный набор встроенных модулей:

  • Порты ввода-вывода (PORTA/B/C…), направление задаётся регистрами TRISx.
  • Таймеры TMR0/1/2 — счёт, задержки, генерация меток времени.
  • CCP — захват/сравнение/ШИМ (PWM) для управления двигателями, светодиодами.
  • АЦП (ADC) 8/10/12 бит — измерение аналоговых сигналов.
  • USART/EUSART — асинхронный последовательный порт (UART) для связи с ПК и модулями.
  • MSSP — аппаратные SPI и I²C.
  • Компараторы, опорное напряжение, сторожевой таймер WDT, детектор просадки питания BOR.

Расчёт делителя UART под кварц удобно сделать в калькуляторе UART, а собрать значение управляющего регистра по битам — в конструкторе регистра.

Конфигурационные биты

Перед работой в прошивку зашиваются биты конфигурации (__CONFIG в ассемблере или #pragma config в XC8). Они задают режим генератора, включают/выключают сторожевой таймер, защиту кода, таймер запуска питания (PWRT) и сброс по просадке (BOR). Неверный FOSC — самая частая причина «мёртвого» контроллера: кварц стоит, а чип молчит.

// PIC16F877A, XC8 — пример конфигурации
#pragma config FOSC = HS      // кварц 4-20 МГц
#pragma config WDTE = OFF     // сторожевой таймер выключен
#pragma config PWRTE = ON     // таймер включения питания
#pragma config BOREN = ON     // сброс по просадке питания
#pragma config LVP = OFF      // низковольтное программирование выкл.
#pragma config CP = OFF       // защита кода выкл.

Популярные контроллеры

МодельВыв.FlashRAMEEPROMОсобенности
PIC12F67581K64 Б128 БADC, компаратор — «малыш» для мелких задач
PIC16F84A181K×1468 Б64 БЛегендарный учебный МК
PIC16F628A182K224 Б128 БUSART, компараторы, внутр. генератор
PIC16F877A408K368 Б256 БADC 10 бит, USART, MSSP, CCP — «рабочая лошадка»
PIC16F887408K368 Б256 БnanoWatt, расширенная периферия
PIC18F45504032K2K256 БUSB 2.0, под язык C

Цоколёвку PIC16F84A и других ходовых корпусов смотри в справочнике цоколёвок.

Программирование

Прошивка (ICSP)

PIC прошиваются внутрисхемно — ICSP (In-Circuit Serial Programming) — по пяти линиям: MCLR/VPP (напряжение программирования), PGD (данные, обычно RB7), PGC (такт, RB6), а также VDD и VSS. Программатор — PICkit (3/4) или ICD; клоны PICkit2 до сих пор популярны у любителей.

Среда и компиляторы

Официальная среда — MPLAB X IDE (бесплатно, Windows/Linux/macOS). Компиляторы Microchip: XC8 (8-битные PIC), XC16 (PIC24/dsPIC), XC32 (PIC32). Исторически применялись HI-TECH C, CCS C, mikroC и ассемблер MPASM.

// «Мигалка» светодиодом на RB0, XC8
#include <xc.h>
#define _XTAL_FREQ 4000000    // кварц 4 МГц для __delay_ms

void main(void) {
    TRISB0 = 0;               // RB0 — выход
    while (1) {
        RB0 = 1; __delay_ms(500);
        RB0 = 0; __delay_ms(500);
    }
}

Готовый HEX-файл прошивки удобно проверить в разборе Intel HEX (контрольные суммы, адреса, точка входа), а данные протоколов посчитать в CRC и конвертере систем счисления.

С чего начать

  1. Возьми PIC16F628A или PIC16F877A — много примеров и недорого.
  2. Поставь MPLAB X + XC8 и программатор PICkit.
  3. Собери «мигалку», убедись, что верно выбран FOSC и подтянут MCLR.
  4. Дальше — UART для связи с ПК, ADC для датчиков, ШИМ для нагрузки.

PIC и AVR решают схожие задачи; если интересно сравнение — загляни в раздел AVR контроллеры.

Смотрите также: AVR контроллеры · ПЛИС · I²C.