Краткий гайд по МК PIC


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

Последовательность действий

  1. Для начала следует определиться на какой именно железке вы будете работать. Самый простой и быстрый вариант - купить какую-нибудь отладочную плату для PIC. Если же вы разбираетесь в схемотехнике и хотите получить более углублённые знания, можно, например, собрать базовую схему самому на макетной плате, используя микроконтроллер в DIP-корпусе. Во второй половине статьи описано какие особенности нужно учесть при разработке схемы.
  2. Купить прогамматор для прошивки вашего МК по ICSP-интерфейсу. Безусловно, лучший вариант это PICkit2 или PICkit3, либо их клоны. Я пробовал работать с несколькими JDM-программаторами, работающими через COM-порт, и ещё каким-то noname (по типу ICD), и могу сказать, что лучше не тратить на всё это время, а просто купить на ближайшем радиобазаре клон PICkit2 (естесственно ещё лучше оригинал) и навсегда забыть про все проблемы. Либо, если уж очень хочется начать, но возможности купить указанный программатор нет, можно собрать простейший JDM-программатор со стабилизацией питания для COM-порта, либо чуть более сложный с согласованием уровней для переходника USB-RS232. Однако, если уж вы будете покупать себе адаптер USB-RS232 для этих целей, я всё-таки настоятельно рекомендую вам хорошенько подумать и купить вместо него сразу PICkit, поскольку JDM-программаторы это тот ещё изврат. И, кроме всего прочего, PICkit тоже может работать как самостоятельный USB-RS232, кроме того он же ещё и как отладчик должен уметь работать.
  3. Если вы выбрали JDM, то вам пригодится программа для прошивки типа XXX. Если же у вас оригинальный PICkit2 или его клон, скачивайте PICkit 2 v.2.60.

    Скачать ПО для PICkit 2

    Скачать PICkit 2 v.2.60 PICkit 2 v.2.60

    (zip-архив, 3.93 МБайт)


    Стоит отметить, что MPLAB должна уметь работать с оригинальным PICkit и даже использовать его в качестве отладичка, однако у меня клон PICkit2 не заработал с MPLAB, поэтому в IDE я только компилирую проект в hex, а прошиваю уже через отдельное ПО.
  4. Скачать и установить последнюю MPLAB X IDE v.4.
  5. В зависимости от типа контроллера скачать и установить компилятор. Для 8-bit MCU это XC8, для 16-bit, соответственно XC16.
  6. Всё, можно создавать проект в MPLAB для своей модели контроллера, далее компилировать и заливать в железку.


Особенности схемотехники и внутреннего устройства PIC

Важные неочевидные моменты, которые могут повлиять на работоспособность вашей первой железки.
  1. Пин MCLR отвечает за сброс МК. Есть несколько вариантов внешней схемы сброса, самая правильная приведена в даташите, но в случае попроще достаточно притянуть данный пин через резистор 5-10 кОм к питанию. Меньше 1 кОм ставить не советую - в даташите есть ограничения на максимальный ток данного пина. Ставить больше 15 кОм тоже нежелательно - ваш контроллер может начать перезагружаться от каждого внешнего электромагнитного всплеска.
  2. Пины программирования также желательно подтягивать к питанию. Диапазон сопротивлений тот же: 5-10 кОм. Ставить сильно большие резисторы или не ставить их вовсе чревато перезагрузками и зависаниями, ставить номиналы меньше 5 кОм - чревато бросками токов, а также проблемами с программатором, который на большие подтяжки не расчитан. В идеальном случае, желательно реализовать отсоединение пинов от схемы при программировании (например перемычками), тогда нижняя граница сопротивления будет определяться только нагрузочной способностью пина.
  3. Для выхода на нормальный режим работы генератора частоты МК требуется определённое время, пусть и небольшое. Это время определяться двумя факторами:
    • Скоростью нарастания напряжения источника питания при включении.
    • Временем, нужным для зарядки нагрузочных конденсаторов кварцевого или керамического резонатора (при режимах работы XT и HS). Чаще всего, больший номинал нагрузочных ёмкостей обеспечивает лучшую стабильность работы, однако требует большего времени для старта, что тоже нужно учитывать.
    Для учёта влияния обоих факторов в PIC имеются два независимых встроенных таймера, каждый из которых управляется своим конфигурационным битом.
    • Таймер Power-up Timer (PWRT) служит для установки фиксированного времени ожидания выхода питания на рабочий режим. Если вы уверены что у вас качественный и быстрый источник питания (либо питание от батареи и нет бросков тока), данный таймер допустимо не включать.
    • Второй таймер - Oscillator Start-up Timer (OST) работает немного по другому - этот таймер удерживает устройство в режиме Reset пока не пройдёт некоторое количество циклов генератора (обычно 1024) нужных для стабилизации частоты. Как следует из вышесказанного, данный таймер может иметь различное время, поэтому для исключения труднопрогнозируемых ошибок в программе, данный таймер лично я советую всегда оставлять включенным.
    Немного отклоняясь от темы, хочу заметить, что контроллеры PIC - не единственные, требующие задержек при включенни, похожие требования есть, например у ядер Cortex-M, или C2000 от TI. Только, чаще всего, там задержку нужно прописывать самостоятельно в коде.
  4. Если в вашей программе используются прерывания, обратите внимние на регистры, управляющие работой прерываний в вашей модели контроллера (в PIC они называются INTCON от англ. Interrupt Control), в частности на бит GIE, либо аналогичный. При перезагрузке данный бит устанавливается в 0, что может выключить все прерывания (если бит IPEN = 0).


В каждой модели могут быть свои нюансы, поэтому более подробно про всё это можно (и нужно!) прочесть в даташитах на ваш контроллер.



Собственно, вот и всё, если были учтены описанные выше требования и выполнены все шаги - можно писать свой первый Hello World и заливать в контроллер, большая часть возможных проблем тут описана.