PICPgm — это просто прошивальщик, с его помочью можно только залить уже готовую прошивку в контроллер (ещё скачать обратно или проверить). Прошивка — это шестнадцатеричный файл HEX — результат работы компилятора.
MPLAB X IDE
Microchip предлагает мощное программное обеспечение MPLAB X IDE, на момент написания — версия 6.00. Программа абсолютно бесплатная, имеет кучу нужных и полезных вещей.
Самое основное — это официальное специализированное приложение, поэтому альтернативы искать ему не стоит. Конечно, по началу оно не очень удобное, но привыкнуть можно достаточно просто.
Изначально в ней нет поддержки языка C, но это дополнение можно точно так же бесплатно скачать с официального сайта.
Имеет достаточно удобный навигатор по проекту с разделением типов файлов, основное пространство имеет приятную подсветку кода и его анализ, сразу может указать на возможные ошибки, что очень помогает, особенно если что-то не работает или не собирается.
Левая нижняя область — так называемый «Рабочий стол», показывает основные данные о проекте, рассчитывает занятую память в микроконтроллере, позволяет вносить изменения в проект.
Самое важное здесь — это правильно выставить настройки проекта, особенно то, что касается компилятора. При создании проекта мастер-помощник даёт рекомендации, которые действительно будут полезны. Программа имеет только английский интерфейс.
Создание проекта, конфигурация контроллера
При создании нового проекта мастер спросит для какого микроконтроллера, поможет выбрать компилятор и сам создаст самый главный файл «main.c». Обратите внимание на кодировку проекта, по умолчанию стоит кодировка ISO, в которой русские буквы не сохраняются. Рекомендуется выбрать либо windows-1251, либо, как сейчас везде модно, utf-8 (Уникод).
Файл «main.c» это основной файл, если сравнивать с веб, то это нечто «index.html».
В организаторе проекта можно увидеть несколько папок, в которых могут быть разные типы файлов. Самые нам нужные — это «Source Files» и «Header Files». В источниках мы будем хранить наши файлы программой, в файлах-заголовках — метаданные.
Файлы заголовки обычно используют для оглашения функций или переменных, при сборке все файлы-источники подключаются автоматически, если их несколько и с разными функциями, которые используются перекрёстно, то вот как раз все эти функции и переменные просто записываются в файл-заголовок и подключаются в файл с кодом. Это удобно, когда к примеру используются сторонние готовые библиотеки, функции которых мы хотим использовать в своей программе, в свой «main.c» мы включим только файл-заголовок библиотеки, и сможем пользоваться всеми функциями.
Бит конфигурации
Мы помним, что микроконтроллер — это маленький компьютер, у которого есть своё ПЗУ, ОЗУ, подобие флешки, и куча периферии. Самое основное — это так называемый «Бит конфигурации», который можно сравнить с BIOS, в реальности бит конфигурации может быть и в несколько бит, создать его для конкретного контроллера можно в MPLAB X IDE. По умолчанию инструмент для создания бита конфигурации находится в одной из вкладок под основной областью с кодом, но если вы его закрыли, или не нашли, найти его можно через меню «Window — Target memory views — Configuration Bits»
Рассмотрим бит конфигурации на примере PIC16F676, ещё раз напоминаю, что если вы работаете с контроллером, у вас всегда под рукой должно быть его описание.
Здесь можно просто выбирать из выпадающего списка и сразу читать, какой это даст эффект. И так, по порядку..
FOSC
Настройка резонатора. Каждому устройству необходим резонатор для генерации тактирующих импульсов, и наш микроконтроллер — не исключение. Мы имеет возможность выбрать из нескольких основных вариантов: использовать внешний генератор, использовать кварцевый резонатор или использовать внутренний генератор. Каждый из этих основных вариантов имеет дополнительные возможности, которые расписаны ниже.
Самое замечательное — наш микроконтроллер имеет встроенный генератор на 4МГц, с возможностью его калибровки, давайте сэкономим деталей и будем использовать уже то, что есть. Есть 2 варианта, INTRCIO и INTRCCLK, какой выбрать? Выбрать не сложно, если почитать описание. Если выбрать INTRCIO, то 2 ножки, предназначенные для резонатора, будут доступны как порты ввода-вывода, то есть будут доступны для нашей программы. Если выбрать режим INTRCCLK, то в таком случае нам будет доступна только одна ножка, а вторая будет выходом генератора. Так как нам ничего пока между собой подключать и согласовывать не надо, то выберем режим INTRCIO, лишние ножки никогда не будут лишними.
WDTE
Таймер «сторожевой пёс». Его предназначение — периодически перезагружать микроконтроллер, на случай, если он вдруг «зависнет». Используется для повышенной стабильности работы, но, при сбросе контроллера — как «ресет» компьютера, всё содержимое оперативной памяти будет потеряно и программа начнёт выполняться с самого начала, как после включения. Для начала рекомендую WDTE выключить, чтобы избежать непонятных случаев, особенно в самом начале пути в мир микроконтроллеров.
PWRTE
Таймер запуска при включении. При подаче напряжения питания на контроллер, оно всё же постепенно нарастает, пусть даже для нас это не заметно. Цель создания такой задержки — ожидание приемлемого напряжения для начала работы и запуска микропрограммы. Минимальное напряжение питания можно найти в документации. Достаточно нужная и полезная вещь, особенно если при включении нужно включить какое-то реле, которое точно просадит ещё раз всю схему и поведение контроллера может быть непредсказуемо. Поэтому рекомендуется этот параметр параметр включить.
MCLRE
Конфигурация одной ножки контроллера, либо она работает как служебная, либо как обычный порт ввода-вывода. Во включённом режиме, обычно на эту ножку вешают резистор на 10 кОм с плюса питания и добавляют кнопку на «минус». Резистор нужен для корректной работы PWRTE, а кнопка — является «Reset»-ом. Но если нам нужна ещё одна ножка, то этот параметр можно и отключить. В таком случае микроконтроллер будет использовать внутреннюю схему для корректной работы PWRTE, но кнопки «Reset» у нас больше не будет.
BOREN
Таймер сброса при нестабильном питании, и да, коричневый в названии… ну контроллерам тоже бывает страшно. Основная задача — остановить выполнение программы, если напряжение питания снизилось ниже допустимого рабочего. Основная задача — предотвратить сбои в работе всего оборудования и дождаться восстановление нормального питания. Может быть полезно, если, к примеру, схема питается от батареи, которая может постепенно терять напряжение. Если BOREN отключён, то контроллер будет работать до последнего, особенно при самом низком напряжении, он может работать нестабильно, то есть глючить. К чему это может привести… Если включить это параметр, то контроллер при достижении порогового значения напряжения отключится и будет ожидать приемлемое питание.
CP и CPD
Защита области памяти и программного кода от чтения через программатор. Контроллер не позволит считать свою прошивку и область EEPROM.
После ввода параметров можно нажать на кнопку генерации кода и скопировать его в свой «main.c» к примеру перед «#include <xc.h>»