После краткого изучения архитектуры и возможностей контроллеров PIC пришло время нам попробовать себя в программировании данных контроллеров, так как без программы микроконтроллер — это бесполезная микросхема.
Только чтобы попробовать себя в программировании, обычно требуется какая-то среда программирования (не в блокноте же мы будем писать код), а также компилятор. Для этого у компании Microchip есть бесплатный IDE — это MPLAB X IDE. Давайте её для начала скачаем. Для этого идём на официальный сайт Microchip и идём по пунктам меню DESIGN SUPPORT -> Development Tools -> Software Tools For PIC® MCUs And DsPIC® DSCs -> MPLAB® X IDE
И попадаем на следующую страницу, в которой выбираем закладку Downloads, в которой скачаем последнюю версию среды разработки (нажмите на картинку для увеличения изображения)
Установим среду
Путь оставим предложенный по умолчанию, если у нас нет Proxy, то отключим их
Далее тоже оставим всё по умолчанию
И программа установится на наш компьютер
Отключаем все галки и жмём Finish
Эти галки гласят о том, что у нас не установлен компилятор, также советуют установить фреймворк для удобства разработки. Всё это мы проделаем самостоятельно потом. Компилятор в среде уже есть, правда только для ассемблера. Но, так как мы решили писать на C, то компилятор нам всё-таки скачать и установить придётся, но чуть позже.
Попробуем запустить нашу среду разработки, чтобы хотя бы убедиться, что всё у нас нормально установилось. И, не создавая никаких проектов, закроем её.
Теперь, соответственно, чтобы нам писать код на C, потребуется компилятор. Компиляторы для контроллеров разной битности (8, 16 и 32) отдельные.
На официальном сайт Microchip проследуем по пунктам меню DESIGN SUPPORT -> Development Tools -> Software Tools For PIC® MCUs And DsPIC® DSCs -> MPLAB® XC Compilers
На открывшейся странице перейдём по закладке Downloads и скачаем последнюю версию 8-битного компилятора (XC 8) (нажмите на картинку для увеличения изображения)
Установим компилятор
Путь оставляем по умолчанию
Включим все галочки
Начнётся установка
После установки жмём Next, никакой ID не запоминаем, нам профессиональная лицензия не нужна, воспользуемся свободно-распространяемой. На сайте можно почитать об ограничениях свободной лицензии. Они очень незначительны
Ещё раз запустим среду программирования MPLAB X IDE. Закроем там стартовое окно и перейдём на вкладку Projects
Как видим, у нас тут пусто. Исправим эту ситуацию, создав новый проект. Для этого выберем пункт меню File -> New Project…
Выбираем Standalone Project и идём далее
Выберем из выпадающего списка наш контроллер, отфильтровав выше для удобства по семейству
Выбираем Sinulator, так как пока мы отлаживать проект будем именно в нём. Да и мой контроллер PICkit 2 неоригинальный не поддерживается данной средой. А загружать созданную нами впоследствии прошивку мы будем с помощью специальной программы
В следующем окне выбираем наш компилятор и идём далее
В следующем окне назовём наш первый проект BLINK01, выберем папку для его хранения и оставим галку напротив того, чтобы наш проект стал главным и заетм жмём Finish
Проект появится в дереве проектов.
Создадим в нём файл main.c, выбрав соответствующий пункт контекстного меню в папке Source Files
В открывшемся окне исправим имя файла, чтобы он был именно main.c ибо нам так как-то привычнее и нажмём Finish
Файл откроется самостоятельно. В нём будет уже некоторый код
#include <xc.h>
void main(void) {
return;
}
То есть у нас уже подключена стандартная библиотека, которой нам на первых порах будет достаточно, так как в ней внутри находится подключение многих необходимых библиотек. И также у нас есть точка входа в программу — главная функция main.
Также мы знаем, что контроллеру необходимо постоянно находиться в работе. Для этого мы в каждый проект в главную функцию добавляем бесконечный цикл. Добавим и в этот проект
void main(void) {
while (1)
{
}
return;
Давайте соберём наш проект, нажав соответствующую кнопку в панели инструментов
Проект наш собран. Давайте посмотрим информацию в окне вывода сообщений
Это информация о затраченных и свободных ресурсах различных типов памяти контроллера.
В самом конце информационного сообщения находится путь к файлу прошивки (нажмите на картинку для увеличения изображения)
Убедимся, что файл прошивки там действительно присутствует
Мы видим, что прошивка на месте, также в данной папке присутствует ряд других файлов с отладочной и другой информацией.
Думаю, что на этом мы наш сегодняшний урок закончим. В дальнейшем мы напишем какой-то полезный код в наш проект, попробуем его прошить сначала в протеусе, а затем в настоящий контроллер, собрав соответствующую схему и подключив программатор.
Предыдущий урок Программирование МК PIC Следующий урок
Post Views:
20 437
В нашей предыдущей статье про микроконтроллеры PIC мы рассмотрели архитектуру микроконтроллеров PIC, установили необходимое для работы с ними программное обеспечение и купили программатор PicKit 3. В данной же статье мы напишем нашу первую программу мигания светодиодом для микроконтроллера PIC16F877A и рассмотрим установку в нем битов конфигурации (фьюзов).
Поскольку мы используем микроконтроллер PIC16F877A вместе с компилятором XC8, то первым делом желательно изучить даташиты на них. Всегда, когда вы начинаете знакомство с новым микроконтроллером, желательно полностью прочитать даташит на него.
Программу для нашего микроконтроллера PIC16F877A мы будем писать в среде MPLAB-X
Создание нового проекта в MPLAB-X
Шаг 1. Запустите IDE MPLAB-X, в результате чего вы на экране должны увидеть следующее окно.
Шаг 2. Откройте пункт меню Files -> New Project (для этой цели можно также использовать комбинацию клавиш Ctrl+Shift+N). После этого вы на экране увидите следующее всплывающее окно, в котором вам необходимо выбрать Standalone Project и нажать Next.
Шаг 3. Теперь необходимо выбрать устройство для нашего проекта – выберем из выпадающего списка PIC16F877A. После этого нажмем на Next.
Шаг 4. На следующей странице нам необходимо выбрать инструменты (программатор) для нашего проекта. Выберем PicKit 3 и нажмем на Next.
Шаг 5. Затем необходимо выбрать компилятор – выберем XC8 и нажмем на Next.
Шаг 6. На следующей странице необходимо задать имя нашего проекта и местоположение куда он будет сохраняться. Мы назвали проект Blink. Файл проекта будет сохраняться с расширением .X, что позволяет запускать его непосредственным образом из MAPLB-X. После этого нажмем на Finish.
Шаг 7. Поздравляем. Теперь наш проект успешно создан. Слева в окне мы увидим имя нашего проекта (у нас оно Blink), нажмите на него чтобы посмотреть все файлы, которые входят в проект.
Чтобы начать написание программы в наш проект необходимо добавить основной файл (C Main file) в каталог с нашим проектом. Для этого сделайте правый клик мыши на source file и в открывшемся меню выберете New -> C Main File как показано на следующем рисунке.
Шаг 8. Откроется диалоговое окно с именем нашего C-файла. Мы назвали его снова Blink, но вы можете выбрать для него любое другое имя по своему усмотрению. После ввода имени файла нажмите на finish.
Шаг 9. После того как файл C будет создан, откроется IDE с некоторым кодом в ней по умолчанию, как показано на следующем рисунке.
Шаг 10. После этого можно начать написание программы в основном C файле (C-main File). Код по умолчанию, формируемый IDE, не будет нами использоваться в этом проекте, поэтому удалим его полностью.
Микроконтроллеры PIC имеют несколько мест, в которых расположены биты конфигурации, которые также называют фьюзами (fuses). Эти биты определяют глобальную логику функционирования устройства (в нашем случае микроконтроллера). С их помощью задается режим работы генератора тактовой частоты, сторожевого таймера (watchdog timer), режима программирования и защиты кода. Очень важно установить эти биты правильно иначе наш микроконтроллер не сможет нормально функционировать.
Узнать об имеющихся регистрах конфигурации можно из даташита на микроконтроллер. Важно понять, какие типы битов конфигурации присутствуют в рассматриваемом микроконтроллере и каковы их функции. Эти биты можно установить или сбросить использую инструкцию pragma.
Данная инструкция имеет следующую форму:
#pragma config setting = state|value #pragma config register = value |
где setting – описание настройки (установки), например, WDT, а state – текстовое описание необходимого состояния, например, OFF. Можно привести следующие примеры установки конфигурационных битов:
#pragma config WDT = ON // turn on watchdog timer (включить сторожевой таймер) #pragma config WDTPS = 0x1A // specify the timer postscale value (записать значение в таймер) |
Для начинающих правильная установка битов конфигурации с помощью данных инструкций может представлять собой достаточно сложную задачу, которую можно значительно упростить в нашей среде разработки MPLAB-X.
Установка битов конфигурации (фьюзов) в MPLAB-X
Компания Microchip значительно упростила процесс установки битов конфигурации (фьюзов) в микроконтроллерах PIC, разработав для этого специальные графические инструменты. Для того, чтобы установить биты конфигурации (фьюзы) в микроконтроллерах PIC с помощью программы MPLAB-X, выполните следующую последовательность шагов.
Шаг 1. В программе MPLAB-X выберите пункт меню Window -> PIC Memory View -> Configuration Bits как показано на следующем рисунке.
Шаг 2. После этого внизу программы MPLAB-X откроется окно настройки битов конфигурации (Configuration Bits window) как показано на рисунке ниже. В нем вы можете установить значение каждого бита конфигурации по своему желанию. Далее мы рассмотрим установку некоторых из этих бит.
Шаг 3. Первыми битами конфигурации являются биты выбора генератора. Микроконтроллер PIC16F87XA может работать в одном из 4-х режимов генератора, которые можно установить с помощью битов FOSC1 и FOSC0:
- LP Low-Power Crystal (маломощный генератор);
- XT Crystal/Resonator (внешний кварцевый резонатор);
- HS High-Speed Crystal/Resonator (высокоскоростной кварцевый резонатор);
- RC Resistor/Capacitor (RC генератор).
Возможные частоты работы микроконтроллера в зависимости от выбранного типа генератора приведены в следующей таблице.
Для нашего проекта мы будем использовать внешний кварцевый генератор на 20Mhz, поэтому нам необходимо выбрать HS из выпадающего меню.
Шаг 4. Следующим битом конфигурации является бит включения/выключения сторожевого таймера.
Сторожевой таймер (Watchdog Timer, WDT) представляет собой непрерывно работающий встроенный RC генератор, для работы которого не требуется никаких внешних компонентов. Данный RC генератор отделен от RC генератора на контакте OSC1/CLKI. Это означает что сторожевой таймер будет продолжать работать даже если на контакты OSC1/CLKI и OSC2/CLKO не подается никакой тактовой частоты. В режиме нормального функционирования сторожевой таймер формирует сигнал аппаратного сброса (Watchdog Timer Reset) при своем переполнении. И если таймер не отключен в нашей программе, то микроконтроллер будет сбрасываться каждый раз при переполнении таймера. Сторожевой таймер можно отключить при помощи очистки его бита конфигурации.
В нашей программе мы не будем использовать сторожевой таймер, поэтому в выпадающем списке напротив его бита конфигурации выберем OFF.
Шаг 5. Следующим битом является таймер по питанию (Power-up timer Bit, PWRT), который обеспечивает фиксированную задержку в 72 мс в работе микроконтроллера при подаче на него питания, что позволяет напряжению питания за это время подняться до приемлемого уровня. Когда данный бит активирован, таймер по питанию будет сбрасывать микроконтроллер до тех пор, пока питание не поднимется до необходимого уровня.
В нашей программе мы не будем использовать данную задержку, поэтому данный бит конфигурации мы также отключим (OFF).
Шаг 6. Следующим битом конфигурации является бит программирования при низком напряжении (Low-Voltage Programming, LVP). Бит LVP позволяет производить программирование микроконтроллера пониженным напряжением через разъем ICSP. Мы не будем в нашем проекте использовать данный вид программирования, поэтому отключим данный бит (OFF).
Шаг 7. Следующими битами конфигурации у нас является бит EEPROM и биты защиты программы. Если бит EEPROM включен, то после программирования микроконтроллера никто не сможет перезаписать в нем программу. В нашем случае мы оставим все эти три бита в выключенном состоянии.
После того как все необходимые настройки битов конфигурации сделаны наше диалоговое окно должно выглядеть следующим образом.
Шаг 8. После этого выберите пункт меню Generate Source Code to Output – в результате этого код нашей программы будет сгенерирован, нам необходимо всего лишь скопировать его вместе с заголовочным файлом и вставить его в файл Blink.c как показано на следующем рисунке.
На этом настройка битов конфигурации (фьюзов) для нашего проекта будет закончена. Мы будем использовать подобную настройку битов конфигурации для всех проектов на основе микроконтроллеров PIC, которые мы далее рассмотрим на нашем сайте.
Написание программы мигания светодиодом для микроконтроллера PIC
В нашем проекте мы будем подключать светодиод к одному из контактов ввода/вывода микроконтроллера PIC16F877A, с помощью которого мы будем управлять миганием светодиода. Распиновка микроконтроллера PIC16F877A представлена на следующем рисунке.
Как видно из представленного рисунка, микроконтроллер PIC16F877 имеет 5 основных портов ввода/вывода. Обычно они обозначаются как PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) и PORT E (RE). В данном случае PORT A содержит 6 контактов (с RA-0 по RA-5), ”PORT B” , “PORT C” и ”PORT D” содержат по 8 контактов (с RB-0 по RB-7, с RC-0 по RC-7, с RD-0 по RD-7), ”PORT E” содержит всего 3 контакта (с RE-0 по RE-2).
Все эти порты являются двунаправленными. Направление работы порта управляется с помощью регистров TRIS(X) (TRIS A используется для установки направления работы PORT-A, TRIS B используется для установки направления работы PORT-B и т.д.). Установка бита регистра TRIS(X) в ‘1’ будет означать, что соответствующий ему контакт порта PORT(X) сконфигурирован для работы на ввод данных (input). Установка бита регистра TRIS(X) в ‘0’ будет означать, что соответствующий ему контакт порта PORT(X) сконфигурирован для работы на вывод данных (output).
В нашем проекте мы установим контакт RB3 порта PORT B для работы на вывод данных – к нему подключен светодиод. Код программы для микроконтроллера PIC для мигания светодиодом будет выглядеть следующим образом:
#include <xc.h> #define _XTAL_FREQ 20000000 //Specify the XTAL crystal FREQ void main() //The main function { TRISB=0X00; //Instruct the MCU that the PORTB pins are used as Output. PORTB=0X00; //Make all output of RB3 LOW while(1) //Get into the Infinite While loop { RB3=1; //LED ON __delay_ms(500); //Wait RB3=0; //LED OFF __delay_ms(500); //Wait //Repeat. } } |
В данном коде программы мы первым делом указываем частоту внешнего кварцевого генератора с помощью инструкции #define _XTAL_FREQ 20000000. Затем в функции void main() мы указываем что контакт RB3 будет работать на вывод данных (TRISB=0X00). И затем идет бесконечный цикл в котором производится мигание светодиодом.
После того как написание кода программы будет закончено выберем пункт меню Run -> Build Main Project. В результате его выполнения ваша программа будет скомпилирована. Если все нормально, то в нижнем окне программы вы увидите сообщение BUILD SUCCESSFUL как показано на следующем рисунке.
Разработка схемы проекта в Proteus
Если компоновка (Build) нашего проекта была успешной, то нашей IDE в фоновом режиме будет сгенерирован HEX файл, который можно найти внутри каталога Desktop\Blink\Blink.X\dist\default\production (каталог может отличаться, если вы в настройках выбрали другой путь сохранения файлов).
Теперь откроем программу Proteus, установленную нами ранее и создадим в ней схему для нашего проекта. Процесс создания схемы проекта в Proteus объяснен в видео, приведенном в конце статьи. В результате в окне программы Proteus вы должны увидеть примерно следующую картину:
Для тестирования работы схемы в Proteus нажмите кнопку play в нижнем левом углу экрана после загрузки Hex файла. Светодиод, подключенный к микроконтроллеру, должен начать мигать.
Таким образом, в данной статье мы написали нашу первую программу для микроконтроллера PIC и протестировали ее работу в симуляторе Proteus.
Исходный код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <xc.h> #define _XTAL_FREQ 20000000 //Specify the XTAL crystal FREQ void main() //The main function { TRISB=0X00; //Instruct the MCU that the PORTB pins are used as Output. PORTB=0X00; //Make all output of RB3 LOW while(1) //Get into the Infinite While loop { RB3=1; //LED ON __delay_ms(500); //Wait RB3=0; //LED OFF __delay_ms(500); //Wait //Repeat. } } |
Видео, демонстрирующее работу проекта
Загрузка…
5 454 просмотров
21.05.2014 | Рубрика: PIC — микроконтроллеры
Цикл статей – PIC начинающим или основы основ
В этой статье я расскажу как создавать проект в MPLAB X. Сложного ничего нет: всего десяток кликов мышью, да наименование проекта — вот и весь рецепт под катом… 1. Идем в меню File:
Новый проект в MPLAB X
Standalone Project
2. Выбираем MCU для проекта. Если вы планируете повторять следующие статьи, рекомендую выбрать PIC18F45K20:
Выбор MCU
Почему именно этот микроконтроллер? Потому, что у меня есть железка DV164131 упомянутая в этой статье. 3. Выбираем средство отладки. Я выберу PICkit 3. Если у вас ничего нет — выбирайте «Simulator»
Выбор устройства для работы с MCU
4. Выбираем компилятор для проекта. Можно выбрать «mpasm» устанавливаемый вместе с MPLAB X, либо один из установленных отдельно компиляторов. Дальше будут рассматриваться компиляторы XC8, XC16, XC32:
Выбор компилятора XC8
5. Указываем путь и имя проекта. Опять же, с прицелом на мои следующие статьи, рекомендую сделать как на скрине ниже:
Имя проекта
- Папка, в которой будут храниться проекты. Я создал папку «TestPrj» в папке «C:\DIOD-PRO» :). Папка каждого конкретного проекта создается автоматически после ввода имени проекта.
- Имя проекта. Первый проект с названием «io45k20» будет посвящен работе с портами ввода/вывода (I/O).
- Обязательно установите данную настройку, иначе в проектах MPLAB X увидите крякозяблы вместо комментариев на русском.
- Созданный проект будет активным. Если не установить, то нужно будет сделать проект активным позже.
Жмем Finish и получаем наш первый проект. Вот он, красавец 🙂
Наш первый проект =)
Пока это абсолютно пустой проект не содержащий ни одной строчки кода. Поэтому следующий этап — добавление а-ля главного си-шного файла. Для этого в дереве проектов раскрываем наш проект, кликаем правой кнопкой мыши по папке «Source Files», выбираем «New -> C Main File…»:
Добавление си-файла в проект
В результате получаем такого вида диалоговое окошко:
Окно добавления новых файлов в MPLAB X
Дадим «говорящее» имя си-шному файлу «main_ioled». «main» в наименовании файла говорит о том, что в файле присутствует функция main(). Поле Folder я оставлю пустым: main_ioled.c будет находиться в папке проекта. Вот результат моих усилий:
Новый файл в проекте
Заключительный этап — проверяем созданный проект на работоспособность. Кликаем кнопочку на панели инструментов:
Компиляция проекта
После окончания процесса, смотрим окно логов:
Компиляция прошла успешно
Если все сделано правильно, в последней строчке будет запись «Loading completed». Все — проект создан и работоспособен. Осталось научиться работать с камешком 🙂
Метки:: PIC