Краткий гайд по МК PIC
В статье по шагам кратко расписано как быстро начать разработку устройств на микроконтроллерах PIC (при условии что вы, как минимум, знаете Си), а также описаны основные моменты, которые необходимо учитывать при разработке любого устройства на PIC.
В каждой модели могут быть свои нюансы, поэтому более подробно про всё это можно (и нужно!) прочесть в даташитах на ваш контроллер.
Собственно, вот и всё, если были учтены описанные выше требования и выполнены все шаги - можно писать свой первый Hello World и заливать в контроллер, большая часть возможных проблем тут описана.
Последовательность действий
- Для начала следует определиться на какой именно железке вы будете работать. Самый простой и быстрый вариант - купить какую-нибудь отладочную плату для PIC. Если же вы разбираетесь в схемотехнике и хотите получить более углублённые знания, можно, например, собрать базовую схему самому на макетной плате, используя микроконтроллер в DIP-корпусе. Во второй половине статьи описано какие особенности нужно учесть при разработке схемы.
- Купить прогамматор для прошивки вашего МК по ICSP-интерфейсу. Безусловно, лучший вариант это PICkit2 или PICkit3, либо их клоны. Я пробовал работать с несколькими JDM-программаторами, работающими через COM-порт, и ещё каким-то noname (по типу ICD), и могу сказать, что лучше не тратить на всё это время, а просто купить на ближайшем радиобазаре клон PICkit2 (естесственно ещё лучше оригинал) и навсегда забыть про все проблемы. Либо, если уж очень хочется начать, но возможности купить указанный программатор нет, можно собрать простейший JDM-программатор со стабилизацией питания для COM-порта, либо чуть более сложный с согласованием уровней для переходника USB-RS232. Однако, если уж вы будете покупать себе адаптер USB-RS232 для этих целей, я всё-таки настоятельно рекомендую вам хорошенько подумать и купить вместо него сразу PICkit, поскольку JDM-программаторы это тот ещё изврат. И, кроме всего прочего, PICkit тоже может работать как самостоятельный USB-RS232, кроме того он же ещё и как отладчик должен уметь работать.
- Если вы выбрали JDM, то вам пригодится программа для прошивки типа XXX. Если же у вас оригинальный PICkit2 или его клон, скачивайте PICkit 2 v.2.60.
Стоит отметить, что MPLAB должна уметь работать с оригинальным PICkit и даже использовать его в качестве отладичка, однако у меня клон PICkit2 не заработал с MPLAB, поэтому в IDE я только компилирую проект в hex, а прошиваю уже через отдельное ПО. - Скачать и установить последнюю MPLAB X IDE v.4.
- В зависимости от типа контроллера скачать и установить компилятор. Для 8-bit MCU это XC8, для 16-bit, соответственно XC16.
- Всё, можно создавать проект в MPLAB для своей модели контроллера, далее компилировать и заливать в железку.
Особенности схемотехники и внутреннего устройства PIC
Важные неочевидные моменты, которые могут повлиять на работоспособность вашей первой железки.- Пин MCLR отвечает за сброс МК. Есть несколько вариантов внешней схемы сброса, самая правильная приведена в даташите, но в случае попроще достаточно притянуть данный пин через резистор 5-10 кОм к питанию. Меньше 1 кОм ставить не советую - в даташите есть ограничения на максимальный ток данного пина. Ставить больше 15 кОм тоже нежелательно - ваш контроллер может начать перезагружаться от каждого внешнего электромагнитного всплеска.
- Пины программирования также желательно подтягивать к питанию. Диапазон сопротивлений тот же: 5-10 кОм. Ставить сильно большие резисторы или не ставить их вовсе чревато перезагрузками и зависаниями, ставить номиналы меньше 5 кОм - чревато бросками токов, а также проблемами с программатором, который на большие подтяжки не расчитан. В идеальном случае, желательно реализовать отсоединение пинов от схемы при программировании (например перемычками), тогда нижняя граница сопротивления будет определяться только нагрузочной способностью пина.
- Для выхода на нормальный режим работы генератора частоты МК требуется определённое время, пусть и небольшое. Это время определяться двумя факторами:
- Скоростью нарастания напряжения источника питания при включении.
- Временем, нужным для зарядки нагрузочных конденсаторов кварцевого или керамического резонатора (при режимах работы XT и HS). Чаще всего, больший номинал нагрузочных ёмкостей обеспечивает лучшую стабильность работы, однако требует большего времени для старта, что тоже нужно учитывать.
- Таймер Power-up Timer (PWRT) служит для установки фиксированного времени ожидания выхода питания на рабочий режим. Если вы уверены что у вас качественный и быстрый источник питания (либо питание от батареи и нет бросков тока), данный таймер допустимо не включать.
- Второй таймер - Oscillator Start-up Timer (OST) работает немного по другому - этот таймер удерживает устройство в режиме Reset пока не пройдёт некоторое количество циклов генератора (обычно 1024) нужных для стабилизации частоты. Как следует из вышесказанного, данный таймер может иметь различное время, поэтому для исключения труднопрогнозируемых ошибок в программе, данный таймер лично я советую всегда оставлять включенным.
- Если в вашей программе используются прерывания, обратите внимние на регистры, управляющие работой прерываний в вашей модели контроллера (в PIC они называются INTCON от англ. Interrupt Control), в частности на бит GIE, либо аналогичный. При перезагрузке данный бит устанавливается в 0, что может выключить все прерывания (если бит IPEN = 0).
В каждой модели могут быть свои нюансы, поэтому более подробно про всё это можно (и нужно!) прочесть в даташитах на ваш контроллер.
Собственно, вот и всё, если были учтены описанные выше требования и выполнены все шаги - можно писать свой первый Hello World и заливать в контроллер, большая часть возможных проблем тут описана.