Microchip studio руководство на русском

В статье приведен обзор экосистемы Microchip и ее основных программных составляющих, таких как MPLAB X IDE, MPLAB Code Configurator, MPLAB Harmony и т. д., предназначенных для упрощения процесса разработки встраиваемых решений

Когда речь заходит об электронной промышленности, конкурентоспособность того или иного производителя во многом определяется скоростью вывода на рынок новых решений или обновления функционала уже существующих продуктов. Оба фактора зависят от сложности самого решения, а также применяемых при его построении аппаратных и программных средств. Использование продуктов от разных производителей может значительно усложнить процесс и отнять время и силы у ценных сотрудников, которые будут вынуждены прибегать к различным хитростям и «костылям» для интеграции новых компонентов в проект и их последующей настройки. Выходом из ситуации является использование продуктов, совместимость которых не вызывает сомнений еще на этапе закупки. Как правило, это решения от одного производителя, который предоставляет своим клиентам не только отдельные компоненты, но и целую экосистему, призванную максимально упростить построение проектов и ускорить процесс производства. Одним из таких производителей является основанная в 1987 году американская компания Microchip (Рисунок 1).

Экосистема компании Microchip.
Рисунок 1. Экосистема компании Microchip.

В данной статье рассказывается об основных составляющих экосистемы для работы с микроконтроллерами и микропроцессорами компании Microchip. Прежде всего речь пойдет о программном обеспечении; именно на этом поприще компания за последние несколько лет достигла определенных успехов и создала продукты, способные значительно ускорить процесс разработки.

Предложенные в статье программные решения позволяют создавать масштабные проекты с возможностью установки плагинов и отладки в реальном времени (MPLAB X IDE), генерировать и редактировать код онлайн, без установки программы на персональный компьютер (MPLAB Xpress), настраивать работу контроллеров при помощи графического интерфейса (MPLAB Code Configurator, MPLAB Harmony), добавлять новый функционал в уже знакомые среды разработки (Microchip Studio) и многое, многое другое.

Программные средства разработки Microchip

Microchip предлагает своим клиентам широкий перечень программных решений, позволяющих значительно упростить процесс разработки и отладки программного кода при работе с компонентами, входящими в экосистему компании.

На текущий момент пользователям доступны следующие решения:

  • MPLAB X IDE – полнофункциональная интегрированная среда разработки (IDE), предназначенная для разработки кода для микроконтроллеров PIC, цифровых сигнальных контроллеров (DSC) dsPIC, а также микроконтроллеров AVR и SAM. Среда построена на основе IDE NetBeans с открытым исходным кодом от Apache Software Foundation.
     
  • MPLAB Xpress – представляет собой бесплатную онлайн-среду разработки, которая не требует установки или настройки системы. MPLAB Xpress имеет более ограниченный функционал по сравнению с MPLAB X IDE, однако поддерживает ее наиболее популярные функции, такие как конфигуратор кода MPLAB.
     
  • Конфигуратор кода MPLAB (MCC) – бесплатный графический плагин для инициализации системы, который также предоставляет драйверы для работы с компонентами. MCC может использоваться для настройки широкого спектра периферийных устройств и поддерживает работу с микроконтроллерами AVR и PIC.
     
  • MPLAB Harmony – гибкий фреймворк, включающий в себя программные модули, которые выступают в роли строительных блоков при создании приложения. Используя MPLAB Harmony, разработчик может включить в свой проект библиотеки и программные драйверы как компании Microchip, так и сторонних производителей. MPLAB Harmony поддерживает работу с 32-битными микроконтроллерами PIC и SAM.
     
  • Компиляторы MPLAB XC – комплексное решение для компиляции разрабатываемого программного кода. MPLAB XC поддерживает 8-битные PIC и AVR в версии MPLAB XC8, 16-битные PIC и dsPIC DSC в MPLAB XC16 и 32-битные PIC и SAM в MPLAB XC32. Для компиляторов MPLAB XC доступны два вида лицензии: бесплатная – включает базовые функции оптимизации и PRO – ориентирована на проекты, требующие максимальной оптимизации по скорости и размеру бинарного файла.
     
  • Microchip Studio (Atmel Studio 7) – интегрированная среда разработки (IDE) для написания кода и отладки микроконтроллеров AVR и SAM.
  • Atmel START – бесплатный онлайн-инструмент для графического конфигурирования микроконтроллеров для встраиваемых приложений на базе микроконтроллеров AVR и SAM.

Как несложно заметить, те или иные программные средства подходят только для определенного типа контроллеров. В Таблице 1 приведены данные по возможности работы с программным обеспечением в зависимости от выбранного микроконтроллера или микропроцессора.

Таблица 1. Данные по возможности работы программного обеспечения в зависимости от выбранного микроконтроллера
или микропроцессора
  Микро-
контроллеры
AVR
Микро-
контроллеры
PIC
Цифровые
контроллеры
сигналов
dsPIC
Микро-
контроллеры
SAM
Семейства
микро-
контроллеров
CEC/MEC
Микро-
процессоры
IDE MPLAB X IDE + + + + + +
MPLAB Xpress + + +
Microchip Studio + +
Компиляторы MPLAB XC + + + + + +
AVR GCC +
ARM GCC [1] + +

Конфигураторы
кода

MPLAB Code
Configurator
+ + +
MPLAB
Harmony
+, только для
32-битных
версий
+ +
Atmel Start + +
Средства програм-
мирования
для производства
MPLAB IPE + + + +
MPLAB PM3 + +

Для упрощения процесса работы, компания Microchip объединила информацию по своим продуктам в раздел Microchip Developer Help [2], в котором подробно описаны все тонкости работы с приведенными выше программными пакетами, а также приведены ссылки на продукты, дополнительные ресурсы, видеоуроки, курсы и документацию.

Стоит также учитывать возможность работы программного обеспечения на той или иной операционной системе. Например, инструменты разработки MPLAB совместимы с операционными системами Windows, Linux и macOS, а Microchip Studio (Atmel Studio 7) способна работать только под Windows.

Разберем описанные выше программные решения более подробно.

Интегрированная среда разработки MPLAB X

MPLAB X IDE представляет собой среду, которая объединяет в себе весь необходимый набор инструментов для настройки, разработки, отладки и оценки возможностей микроконтроллеров и микропроцессоров, производимых компанией Microchip (Рисунок 2). Среда построена на основе IDE NetBeans с открытым исходным кодом от Apache Software Foundation и распространяется бесплатно.

Стартовое окно MPLAB X IDE.
Рисунок 2. Стартовое окно MPLAB X IDE.

MPLAB X IDE обладает широкими возможностями для написания исходного кода программы, ее дальнейшей отладки и оптимизации проекта. Столь обширный функционал обеспечен благодаря наличию в MPLAB X IDE следующих модулей и возможностей (Рисунок 3):

  • Менеджер проектов (Project Manager) – служит для управления файлами рабочих групп;
  • Редактор кода (Editor) – позволяет редактировать и создавать программный код проекта;
  • Поддержка программаторов/отладчиков MPLAB ICD и MPLAB REAL ICE;
  • Симулятор MPLAB X Simulator, пошагово моделирующий работу программы;
  • Поддержка компиляторов MPLAB XC (XC8, XC16 и XC32) – преобразуют исходный код на языках С, С++, ассемблер в машинный;
  • И так далее.
Составляющие среды MPLAB X IDE.
Рисунок 3. Составляющие среды MPLAB X IDE.

MPLAB X предлагает пользователю широкий функционал, способный помочь быстро отладить проект и минимизировать время разработки. Данная IDE может рассчитать время исполнения операций (инструмент Stopwatch), открыть доступ к переменным и специальным регистрам контроллера, объединить разрозненные файлы в один проект и многое другое. В папке, где размещается MPLAB X, по пути emplatecode лежат файлы-шаблоны для проектов, с которых удобно начать работу.

Кроме того, возможности MPLAB X IDE можно расширить с помощью множества плагинов как от компании Microchip или NetBeans, так и от сторонних производителей.

Примерами доступных для MPLAB X IDE плагинов могут служить:

  • Монитор данных и контроллер интерфейсов (DMCI). DMCI позволяет разработчику изучать или изменять содержимое переменных без необходимости остановки приложения во время сеанса отладки;
  • Конфигуратор кода Microchip (MCС) – графический плагин для инициализации системы, который также предоставляет драйверы для работы с компонентами;
  • Графический интерфейс пользователя SMPS Buck (SMPSGUI) – представляет собой плагин, упрощающий работу и настройку гибридных ШИМ-контроллеров, в частности – MCP19110/11/18/19;
  • Конфигуратор дисплея Graphics Display Designer (GDD) – инструмент разработки интерфейсов, который позволяет быстро и легко создавать графический интерфейс пользователя для приложений на основе 16- или 32-разрядных микроконтроллеров PIC;
  • Программный пакет Proteus VSM Viewer, позволяющий виртуально собрать схему электронного устройства и симулировать его работу, выявляя ошибки, допущенные на стадии проектирования и трассировки;
  • Модуль отладки Segger J-Link, позволяющий работать с устройствами JTAG;
  • И так далее.

Полный список доступных и установленных плагинов можно найти в соответствующем разделе программы.

Следует отметить, что помимо положений, описанных в руководстве Microchip Developer Help, которое уже упоминалось ранее, компания Microchip предоставляет своим клиентам специальный обучающий курс [3], в котором приведено подробное описание среды. По окончании курса пользователь получит основные представления о принципах работы с MPLAB X IDE, узнает, как открыть и построить проект, усвоит основные принципы отладки и загрузки кода в микроконтроллер и многое другое.

MPLAB Xpress IDE

В тех случаях, когда у клиента нет возможности установить полноценную MPLAB X IDE для работы или необходимо быстро создать/отредактировать проект, на помощь приходит среда Microchip MPLAB Xpress. MPLAB Xpress – это бесплатная интерактивная онлайн-среда разработки, которая не требует какой-либо установки или настройки системы. Для начала работы со средой достаточно перейти на страницу MPLAB Xpress [4]. MPLAB Xpress является упрощенной и усовершенствованной версией MPLAB X IDE и содержит основные ее наиболее популярные и необходимые для работы функции (Рисунок 4).

Работа с тестовым проектом в среде MPLAB Xpress.
Рисунок 4. Работа с тестовым проектом в среде MPLAB Xpress.

MPLAB Xpress станет прекрасным выбором для тех, кто только начинает знакомство с продукцией компании Microchip. Когда же дело дойдет до серьезной разработки и возможностей MPLAB Xpress окажется недостаточно, пользователь сможет без труда перенести существующий проект в MPLAB X IDE.

MPLAB Xpress включает в себя последнюю версию MPLAB Code Configurator и совместима с оценочными платами MPLAB Xpress, платами Curiosity, Explorer 16/32 и программатором/отладчиком PICkit 4. В MPLAB Xpress разработчику также доступна программная симуляция проекта и его аппаратная отладка на подключенной к персональному компьютеру отладочной плате (Рисунок 5).

Установка подключения к отладочной плате для работы в MPLAB Xpress.
Рисунок 5. Установка подключения к отладочной плате для работы в MPLAB Xpress.

Также стоит отметить внушительный объем хранилища (10 Гбайт) для хранения файлов проектов и репозиторий, где пользователь может делиться своими идеями с другими пользователями или черпать вдохновение из уже существующих решений. Вся доступная информация по работе со средой, как и в случае с MPLAB X, располагается в разделе Microchip Developer Help [5].

MPLAB Code Configurator

MPLAB Code Configurator (MCC) – бесплатный графический плагин для инициализации системы, который также предоставляет драйверы для работы с компонентами. MCC имеет интуитивно понятный интерфейс и содержит в себе богатый набор периферийных устройств и функций.

К ключевым особенностям MPLAB Code Configurator можно отнести:

  • Инициализация в графической форме системных регистров, портов ввода/вывода и независимой от ядра периферии;
  • Отображение списка доступных и выбранных периферийных модулей для конкретного микроконтроллера;
  • Система оповещений, предупреждающая о возможных ошибках конфигурирования;
  • Может использоваться для настройки и генерации библиотек.

MPLAB Code Configurator поддерживает микроконтроллеры PIC и AVR и позволяет создавать рабочий код всего за несколько кликов мышкой, что значительно ускоряет процесс разработки, особенно когда дело касается прототипов (Рисунок 6).

Пример работы в MPLAB Code Configurator.
Рисунок 6. Пример работы в MPLAB Code Configurator.

Существует 3 варианта начала работы с MPLAB Code Configurator:

  1. Использование облачной IDE MPLAB Xpress. MPLAB Xpress уже включает в себя предустановленный MPLAB Code Configurator и все, что требуется пользователю для начала работы, – это создать новый или открыть существующий проект и выбрать соответствующий раздел в шапке меню. Открытие проекта необходимо для того, чтобы MCC мог получить имя используемого контроллера и подгрузить необходимые данные, касающиеся регистров и битов конфигурации, а также настроить графический интерфейс.
     
  2. Установить плагин MCC в MPLAB X IDE. Если у вас установлена MPLAB X IDE, все, что вам нужно сделать, чтобы начать работу с MCC, – это загрузить его из библиотеки плагинов через вкладку «Plugins».
     
  3. Ручная установка плагина MCC в MPLAB X IDE. В тех случаях, когда пользователю необходимо использовать предыдущие версии MCC, он может установить требуемую версию плагина вручную, предварительно скачав соответствующий файл с сайта компании.

MPLAB Harmony v3

MPLAB Harmony представляет собой фреймворк для разработки встроенного программного обеспечения на базе 32-разрядных микроконтроллеров и микропроцессоров. MPLAB Harmony предоставляет пользователю гибкие и функционально совместимые программные модули, которые выступают в роли строительных блоков при создании приложения и упрощают процесс разработки и, как следствие, способствуют сокращению времени вывода продукта на рынок (Рисунок 7).

Пример настройки проекта в MPLAB Harmony.
Рисунок 7. Пример настройки проекта в MPLAB Harmony.

Модули в MPLAB Harmony делятся на четыре категории:

  • Библиотеки периферии;
  • Драйверы устройств;
  • Системные службы;
  • Промежуточное программное обеспечение (middleware).

Библиотеки периферии (PLIB) обеспечивают низкоуровневый интерфейс с периферийными модулями, позволяя разработчику не задумываться о том, что происходит на уровне регистров, чем облегчают написание драйверов для микроконтроллеров семейства PIC. Однако библиотеки не предназначены для применения непосредственно в приложении, поскольку при использовании нескольких библиотек очень высока вероятность конфликта, возникающего при распределении ресурсов. Драйверы устройства являются надстройкой над библиотеками и обеспечивают простое и высокоабстрактное взаимодействие с периферийными модулями с помощью определенных функций. Применение драйверов также позволяет избежать конфликтов между библиотеками. Middleware-модули необходимы для организации работы периферийных блоков со сложными протоколами, например, стеков TCP/IP, USB. За тем, чтобы драйверы или middleware-модули не конфликтовали между собой из-за каких-либо общих ресурсов, следят системные службы.

Исходя из всего вышесказанного, к ключевым преимуществам MPLAB Harmony можно отнести:

  • Независимая от ядра реализация, поддерживает архитектуры MIPS и Cortex Arm;
  • Переносимость кода даже в пределах разных семейств контроллеров;
  • Простой процесс настройки и работы благодаря графическому интерфейсу и конфигуратору MPLAB Harmony Configurator (MHC), который позволяет проводить конфигурацию и генерацию начального кода, периферийных библиотек и промежуточного программного обеспечения (USB, TCP / IP и т. д.);
  • Многоуровневая модульная структура, соответствующая стандартам MIRSA-C: 2012;
  • Более 1000 примеров приложений;
  • Возможность работы с 32-разрядными семействами PIC (на базе MIPS) и SAM (на базе Cortex Arm);
  • Возможность работы со сторонними решениями, такими как FreeRTOS и Micrium, возможность импортировать проекты, созданные в IAR Embedded Workbench

MPLAB Harmony доступна для загрузки из репозитория Harmony GitHub [6]. Также она может установлена в MPLAB X IDE через раздел плагинов.

Компиляторы MPLAB XC

Компиляторы MPLAB XC – это, пожалуй, то, без чего сложно представить работу основных программных средств компании, таких как MPLAB X и MPLAB Xpress.

Подобрать подходящий компилятор для конкретного проекта достаточно просто, все зависит от выбранного микроконтроллера (Таблица 2).

Таблица 2. Компиляторы Microchip
Компилятор Поддерживаемые микроконтроллеры
MPLAB XC8 8-битные микроконтроллеры PIC и AVR
MPLAB XC16 16-битные микроконтроллеры PIC, цифровые
сигнальные контроллеры (DSC) dsPIC
MPLAB XC32/32++ 32-битные микроконтроллеры PIC и SAM.

Компиляторы MPLAB XC обеспечивают высокую степень оптимизации кода и могут сократить конечный размер файла до 70%. Бесплатные версии MPLAB XC предлагают пользователю следующие уровни оптимизации:

  • O0 – код находится в исходном состоянии,
  • O1 – позволяет провести оптимизацию кода без влияния на процесс отладки,
  • O2 – позволяет провести сбалансированную оптимизацию скорости и размера кода.

Если стандартных уровней оптимизации оказывается недостаточно, разработчик может приобрести расширенную PRO-лицензию и получить доступ к следующим возможностям

  • Os – позволяет произвести максимальное сокращение размера кода;
  • O3 – позволяет провести лучшую оптимизацию с точки зрения скорости выполнения и работы кода;
  • mpa (процедурная абстракция) – еще больше уменьшает размер кода

Лицензия PRO, как правило, применяется в проектах, требующих максимального сокращения кода и максимальной производительности. Для ознакомления с возможностями MPLAB XC PRO пользователь может получить бесплатную 60-дневную пробную версию лицензии и продлить или отказаться от нее по истечении пробного периода.

MPLAB XC PRO поддерживает несколько типов лицензии:

  • Лицензия для рабочей станции;
  • Лицензия по подписке;
  • Лицензия сайта;
  • Лицензия сервера;
  • Лицензия виртуальной машины;
  • Лицензия на электронном ключе.

Дополнительно пользователю также доступна подписка High Priority Access (HPA), которая может быть активирована бесплатно на 12 месяцев при приобретении MPLAB XC PRO. HPA дает пользователю приоритет в получении технической поддержки по запросам, связанным с компилятором.

Помимо лицензии MPLAB XC PRO, компания Microchip также предлагает своим клиентам версии компиляторов для приложений, критических к отказам. Эти версии сертифицированы немецкой экспертной организацией TÜV SÜD в соответствии с современными стандартами безопасности ISO 26262, IEC 61508, IEC 62304 и IEC 60730.

Microchip Studio (Atmel Studio 7)

Все, кто хоть раз имел дело с разработкой программного кода для микроконтроллеров, наверняка слышали о среде Atmel Studio. После того как Microchip завершила сделку по покупке компании Atmel в 2016 году, все права на среду разработки (как и на сами микроконтроллеры) перешли к новому правообладателю, а сама IDP стала носить гордое название Microchip Studio.

Microchip Studio представляет собой интегрированную платформу разработки (IDP) для создания и отладки приложений на базе микроконтроллеров AVR и SAM. Atmel Studio влилась в широкое портфолио средств разработки от Microchip и предлагает пользователям простой в использовании функционал для написания, сборки и отладки приложений, написанных на языках C/C++ или ассемблере (Рисунок 8).

Пример работы с проектом в среде Microchip Studio.
Рисунок 8. Пример работы с проектом в среде Microchip Studio.

Несмотря на то, что среда получила новое название и слегка измененный внешний вид, пользователи по-прежнему могут свободно использовать документацию, курсы и видеоуроки, созданные для Atmel Studio. То же касается и аппаратной части, в частности программаторов AVR и SAM.

Microchip Studio устанавливается вместе с компиляторами avr-gcc, avr32-gcc и arm-none-eabi-gcc, в дополнение к которым был также добавлен MPLAB XC8. Его расширенная версия MPLAB XC8 PRO включает в себя улучшенную степень оптимизации, уменьшенный размер кода и успешно конкурирует с более дорогими представленными на рынке решениями.

Ключевые особенности среды Microchip Studio:

  • Поддержка более 500 устройств AVR и SAM;
  • Встроенный компилятор MPLAB XC8;
  • Более 1600 примеров проектов с исходными кодами, доступными через Advanced Software Framework (ASF);
  • Расширение возможностей IDE через Microchip Gallery – онлайн-магазин инструментов разработки и встроенного программного обеспечения от Microchip и сторонних производителей;
  • QTouch Composer – набор инструментов для разработки и настройки емкостных сенсорных устройств, проверки производительности системы, мониторинга энергопотребления с возможностью работы в режиме реального времени;
  • Wireless Composer набор инструментов для разработки и настройки беспроводных устройств;
  • Расширенные функции отладки, включая степпинг и точки останова, поддержку трассировки (SAM3 и SAM4), статистическое профилирование кода, отслеживание/мониторинг прерываний, отслеживание значений переменных в режиме реального времени и многое другое;
  • Встроенный редактор кода, менеджер проектов, виртуальный симулятор, модуль внутрисхемной отладки и интерфейс командной строки;
  • Возможность написания кода и моделирования прерываний, работы периферийных устройств и других внешних воздействий для конкретной модели контроллера;
  • Возможность создания дизайна приложений с низким энергопотреблением;
  • Отслеживание данных о потребляемой мощности во время отладки программы при помощи Power Debugger.

Еще одной особенностью является возможность импорта в Microchip Studio проектов Arduino, что позволяет значительно упростить и ускорить процесс перехода от создания прототипа к организации полноценного производства. Microchip Studio поддерживает работу с Arduino Zero и платами расширения Arduino Shield.

Atmel START

Atmel START представляет собой онлайн-инструмент для конфигурирования и настройки проектов встраиваемого программного обеспечения при помощи графического интерфейса. Atmel START основан на последнем поколении Advanced Software Framework и дает возможность разработчику выбирать и настраивать программные компоненты, драйверы и промежуточное ПО, а также подбирать примеры проектов, специально адаптированных под потребности создаваемого решения. При работе в Atmel START пользователь может просматривать зависимости между программными компонентами, предотвращая тем самым конфликты и аппаратные ограничения. В случае возникновения конфликта Atmel START автоматически предложит решения, подходящие для данной конкретной конфигурации.

Начиная работу с Atmel START, пользователь может создать новый проект или начать работу с уже существующим примером. После завершения конфигурирования программного обеспечения пользователь может загрузить сгенерированный проект и открыть его в IDE, установленной на персональном компьютере, например, Microchip Studio 7, IAR Embedded Workbench, Keil µVision (Рисунок 9).

Процесс работы с онлайн-инструментом Atmel START.
Рисунок 9. Процесс работы с онлайн-инструментом Atmel START.

Atmel START предоставляет пользователю следующие преимущества:

  • Дает возможность найти и протестировать примеры для своего решения;
  • Позволяет сконфигурировать микроконтроллер, настроить драйверы и промежуточное ПО;
  • Позволяет настроить параметры таймеров и тактирование;
  • Дает возможность подготовить проект для работы на современной IDE;
  • И многое другое.

Отдельно следует отметить TrustZone Manager – графический интерфейс для настройки параметров безопасной (защищенной) зоны, также интегрированный в Atmel START.

Технология Arm TrustZone обеспечивает аппаратное разделение так называемых защищенных и незащищенных зон. Данное разделение позволяет обезопасить критически важные функции или конфиденциальную информацию, хранящуюся в защищенной зоне, от доступа из компонентов, расположенных вовне. Технология TrustZone, в частности, доступна при работе с микроконтроллерами SAM L11.

Заключение

Инженеры и разработчики постоянно находятся в поиске новых решений, способных дать им больше возможностей, принести что-то новое в уже существующие проекты или ускорить процесс разработки. Однако интеграция в проект продукции от разных производителей может повлечь за собой проблемы, связанные с сопряжением функционала. Одним из выходов является использование продуктов, входящих в единую экосистему, такую, как предлагает своим клиентам компания Microchip. Экосистема Microchip – это не только дискретные компоненты, микроконтроллеры и отладочные комплексы, но и мощное программное обеспечение, способное удовлетворить потребности как матерых разработчиков, так и молодых инженеров, которые только начинают свой путь.

Ссылки

  1. microchip.com/avr-support/avr-and-arm-toolchains-(c-compilers)
  2. microchipdeveloper.com
  3. developerhelptraining.thinkific.com/courses/take/introtomplabx/texts/5392043-introduction
  4. microchip.com/en-us/development-tools-tools-and-software/mplab-xpress
  5. microchipdeveloper.com/mplabx:start
  6. github.com/Microchip-MPLAB-Harmony

Программирование микроконтроллеров

Оглавление

Введение
Глава 1. Программные и аппаратные средства программирования микроконтроллеров
1.1. Общие сведения
1.2. Операции с портами микроконтроллера
1.3. Интегрированная среда разработки Microchip Studio для AVR
      1.3.1. Установка Microchip Studio
      1.3.2. Создание проекта «Линейка светодиодов» в Microchip Studio
            1.3.2.1. Начало работы
            1.3.2.2. Разработка листинга программы
1.4. Интегрированная среда разработки MPLAB X IDE для PIC
      1.4.1. Установка MPLAB X IDE и компиляторов
      1.4.2. Пакеты семейства устройств DFP
      1.4.3. Интерфейсное окно пользователя
      1.4.4. Биты конфигурации
      1.4.5. Создание проекта «Линейка светодиодов» в MPLAB X IDE
            1.4.5.1. Начало работы
            1.4.5.2. Разработка листинга программы.
1.5. Программа Proteus для моделирования электронных схем
      1.5.1. Интерфейсное окно Proteus
      1.5.2. Моделирование электронных схем с микроконтроллерами в Proteus
            1.5.2.1. Моделирование проекта с микроконтроллером AVR
            1.5.2.2. Моделирование проекта с микроконтроллером PIC
            1.5.2.3. Моделирование проекта «Матрица светодиодов»» с микроконтроллером PIC
      1.5.3. Создание проекта с листингом программы внутри Proteus без привлечения IDE
      1.5.4. Использование виртуальных измерительных приборов в Proteus
1.6. Аппаратные средства программирования микроконтроллеров
Контрольные вопросы и задания
Глава 2. Примеры программирования 8-разрядных микроконтроллеров AVR
2.1. Подключение кнопки к микроконтроллеру
      2.1.1. Создание проекта
      2.1.2. Моделирование проекта на макетной плате
2.2. Подключение к микроконтроллеру одноразрядного семисегментного индикатора
2.3. Управление таймер-счетчиком
2.4. Управление внешними прерываниями
Контрольные вопросы и задания
Глава 3. Примеры программирования 8-разрядных микроконтроллеров PIC
3.1. Подключение к микроконтроллеру двух кнопок
3.2. Подключение к микроконтроллеру силовой нагрузки
3.3. Конфигуратор кода MPLAB Code Configurator (MCC). Создание проекта «Программирование ШИМ»
3.4. Управление вращением электродвигателя небольшой мощности
3.5. Работа с последовательным интерфейсом RS-232
3.6. Подключение к микроконтроллеру температурного датчика
3.7. Работа с модулем АЦП микроконтроллера
      3.7.1. Создание проекта
      3.7.2. Моделирование проекта на макетной плате
3.8. Подключение к микроконтроллеру жидкокристаллического индикатора
      3.8.1. Создание проекта
      3.8.2. Моделирование проекта на макетной плате
3.9. Подключение к микроконтроллеру малогабаритного шагового электродвигателя
      3.9.1. Создание проекта
      3.9.2. Моделирование проекта на макетной плате
Контрольные вопросы и задания
4. Решения и ответы
4.1. Решения и ответы к главе 1
4.2. Решения и ответы к главе 2
4.3. Решения и ответы к главе 3
Литература

Введение

Микроконтроллер (МК, англ. MCU – Microcontroller Unit) – это электронный блок для управления различными устройствами, выполненный в виде единой микросхемы, или совсем коротко – это управляющая микросхема. В состав микроконтроллера входят микропроцессор, постоянное запоминающее устройство (ПЗУ, англ. ROM), оперативное запоминающее устройство (ОЗУ, англ. RAM), порты ввода/вывода, таймеры, АЦП, последовательные и параллельные интерфейсы и др. Учитывая количество входящих в состав микроконтроллера компонентов, его иногда называют однокристальным компьютером. Вычислительная мощность у микроконтроллера неизмеримо меньше, чем у компьютера, поэтому они используются для решения узкоспециализированных задач и находят широкое применение в устройствах промышленной автоматики, в системах автоматизации зданий, в периферийных устройствах компьютерной техники, в мобильной электронике, робототехнике, автомобильной технике и многих других приложениях.  

В данном учебном пособии рассмотрено программирование  микроконтроллеров AVR и PIC компании Microchip. С сайта компании можно скачать бесплатное программное обеспечение для работы с этими микроконтроллерами. 

Microchip Technology Inc. (www.microchip.com) – американская компания. Продукция компании включает в себя микроконтроллеры (PIC , dsPIC , AVR и SAM), а также устройства памяти EEPROM, устройства Serial SRAM, встроенные устройства безопасности, радиочастотные (RF) устройства, аналоговые управляющие устройства, линейные, интерфейсные и беспроводные решения. Микроконтроллеры компании Microchip включают в себя 8, 16 и 32-разрядные модели микроконтроллеров. Не углубляясь в детали, приведем следующее определение разрядности: под разрядностью понимается количество бит информации, которые обрабатываются за один такт микропроцессора. Обзор микроконтроллеров компании Microchip начнем с семейства 8-разрядных микроконтроллеров.

8-разрядные микроконтроллеры:

  • 8-разрядные микроконтроллеры AVR,
  • 8-разрядные микроконтроллеры PIC,

8-разрядные микроконтроллеры AVR подразделяются на семейства:

  • ATtiny:
  • Флеш-память до 16 КБ; SRAM до 512 Б; EEPROM до 512 Б;
  • Число линий ввода-вывода 4-18 (общее количество выводов 6-32);
  • Ограниченный набор периферийных устройств.
  • ATmega:
  • Флеш-память до 256 КБ; SRAM до 16 КБ; EEPROM до 4 КБ;
  • Число линий ввода-вывода 23-86 (общее количество выводов 28-100);
  • Аппаратный умножитель;
  • Расширенная система команд и периферийных устройств.
  • ATxmega:
  • Флеш-память до 384 КБ; SRAM до 32 КБ; EEPROM до 4 КБ;
  • Четырёхканальный DMA-контроллер;
  • Инновационная система обработки событий.

Буквы в наименовании модели микроконтроллера (после дефиса) означают вариант корпуса (табл.1):
Таблица 1

Современная линейка микроконтроллеров AVR дополнена продуктами: AVR DD, AVR DB, AVR DA.
Продукты AVR DD имеют низкое энергопотребление и идеально подходят для сложных приложений или в качестве сопутствующего микроконтроллера в сложных конструкциях с несколькими уровнями питания. Семейство AVR DD имеет широкий набор функций, включая многовольтный ввод/вывод (MVIO), позволяющий обеспечивать двунаправленную связь с устройствами с разным уровнем питания. Гибкость семейства делает его пригодным для применения во встраиваемых системах, осуществляющих управление в режиме реального времени. Микроконтроллеры используются в промышленных системах, бытовой технике, автомобилестроении, IoT (Internet of Things – интернет вещей) и других приложениях. (Интернет вещей – это приложения, обменивающиеся информацией через интернет).

Основные характеристики:

  • Встроенный генератор 24 МГц.
  • До 8 КБ SRAM.
  • 12-разрядный дифференциальный аналого-цифровой преобразователь (АЦП).
  • 10-разрядный цифроаналоговый преобразователь (ЦАП).
  • Аналоговый компаратор (AC) с масштабируемым опорным входом.
  • Обнаружение сбоя часов.
  • 16-разрядные часы реального времени (RTC) и таймер прерывания.
  • Настраиваемое периферийное устройство с пользовательской логикой (CCL)
  • Настраиваемый внутренний генератор опорного напряжения.
  • USART / SPI двухрежимный двухпроводной интерфейс (TWI).
  • Многовольтный ввод-вывод на порту C.

В семействе AVR DD имеются микроконтроллеры с различным числом контактов и различным объемом флэш-памяти (табл.2).

Таблица 2

Продукты AVR DB разработаны для сложных аналоговых приложений с низким энергопотреблением. Благодаря трем встроенным операционным усилителям, не имеют аналогов по своим возможностям формирования сигнала. AVR DB имеет многовольтный ввод-вывод (MVIO) и является идеальным вспомогательным микроконтроллером в сложных конструкциях с несколькими областями питания. Семейство AVR DB можно использовать для функций управления в режиме реального времени в системах промышленного управления, бытовой техники, автомобилестроения, интернета вещей (IoT), для емкостных сенсорных пользовательских интерфейсов и в других приложениях. 

Основные характеристики:

  • Встроенный генератор 24 МГц.
  • До 16 КБ SRAM.
  • 12-разрядный дифференциальный аналого-цифровой преобразователь (АЦП).
  • 10-разрядный цифроаналоговый преобразователь (ЦАП).
  • Формирование аналогового сигнала (3 операционных усилителя).
  • Аналоговый компаратор (AC) с масштабируемым опорным входом.
  • Сканирование с циклической проверкой избыточности (CRC).
  • Обнаружение сбоя часов.
  • 16-разрядные часы реального времени (RTC) и таймер периодического прерывания.
  • Настраиваемое периферийное устройство пользовательской логики (CCL).
  • USART/SPI/двухрежимный двухпроводный интерфейс (TWI).
  • Многовольтный ввод-вывод на порту C.
  • Допускаемые входы на 1,8 В могут выбираться для всех входных контактов.

В семействе AVR DB имеются микроконтроллеры с различным числом контактов и различным объемом флэш-памяти (табл. 3).

Таблица 3

Продукты AVR DA разработаны для приложений, выполняющих управление в режиме реального времени, и использующих  устройства HMI с емкостным сенсорным экраном. Высокая плотность памяти делает микроконтроллеры подходящими как для проводной, так и беспроводной связи. В семействе используются новейшие чипы CIPs с низким энергопотреблением и напряжением 5 В для повышения помехоустойчивости. Настраиваемая пользовательская логика (CCL) периферийных устройств, наряду с интеллектуальными аналоговыми периферийными устройствами, делают семейство AVR DA идеальным решением для управления в реальном режиме времени. Микроконтроллеры используются в промышленных системах, бытовой технике, автомобилестроении, интернете вещей (IoT) и в приложениях с функциями сенсорного управления.  

Основные характеристики:

  • Встроенный генератор с частотой 24 МГц.
  • До 16 Кб SRAM.
  • 12-разрядный дифференциальный аналого-цифровой преобразователь (АЦП).
  • 10-разрядный цифроаналоговый преобразователь (ЦАП).
  • Аналоговый компаратор с масштабируемым опорным входом.
  • 16-разрядные часы реального времени (RTC) и таймер периодического прерывания.
  • Настраиваемое периферийное устройство с пользовательской логикой (CCL).
  • Настраиваемый внутренний генератор опорного напряжения.
  • USART/SPI двухрежимный двухпроводной интерфейс (TWI).
  • До трех детекторов пересечения нуля (ZCD).
  • Сканирование с циклической проверкой избыточности (CRC).

В семействе AVR DA имеются микроконтроллеры с различным числом контактов и различным объемом флэш-памяти (табл. 4).

Таблица 4

8-разрядные микроконтроллеры PIC подразделяются на три уровня:

  • базовый уровень: младшие модели PIC10, PIC12, PIC16;
  • средний уровень: старшие модели PIC10, PIC12, PIC16;
  • повышенный уровень PIC

Микроконтроллеры PIC10 имеют простой набор инструкций, обеспечивающих удобство применения и быструю разработку приложений. Они имеют самый малый форм-фактор и могут применяться в конструкциях с ограниченными размерами. Это семейство микроконтроллеров включает в себя внутренний генератор, компаратор, АЦП, память данных.

Микроконтроллеры PIC12, PIC16 подходят для решения задач, требующих более сложных алгоритмов управления и большего объема памяти. Эти микроконтроллеры оснащены различными аналоговыми и цифровыми периферийными устройствами: SPI, I2C, USART, LCD, АЦП. Микроконтроллеры отлично подходят для устройств с малым потреблением энергии, работающих от батарей.

Микроконтроллеры с архитектурой PIC18 появились в 2000 году. Эта серия оказалась очень популярной. В отличие от более ранних устройств, которые чаще всего программировались на ассемблере, для PIC18 и более поздних устройств язык C стал преобладающим языком разработки. Микроконтроллеры PIC18 сочетают в себе максимальный уровень производительности с простотой использования 8-битной архитектуры, обладают наибольшим количеством выводов и достаточно большим объемом памяти, включая до 128 Кбайт флэш-памяти и до 8 Кбайт оперативной памяти.  Микроконтроллеры имеют широкую номенклатуру периферийных устройств: CAN, USB, Ethernet, сенсорные датчики и драйверы ЖК-дисплеев.

16-разрядные микроконтроллеры PIC:

  • PIC24F (16 МГц),
  • PIC24H (40 МГц),
  • PIC24E (70 МГц).

Семейство dsPIC с цифровым сигнальным процессором:

  • dsPIC33C (100 МГц),
  • dsPIC33E (70 МГц),
  • dsPIC33F (16-50 МГц),
  • dsPIC30F (30 МГц).

В 2001 году компания Microchip представила серию микросхем dsPIC, которая поступила в массовое производство в конце 2004 года. Это были первые 16-битные микроконтроллеры Microchip. Устройства dsPIC дополнительно включают возможности цифровой обработки сигналов. В отличие от dsPIC устройства PIC24 представляют собой микроконтроллеры общего назначения.

Семейство 16-разрядных микроконтроллеров PIC24 и dsPIC обеспечивает повышенную производительность, низкое энергопотребление, развитую периферию и полный набор программных и аппаратных средств, представляющих собой законченный комплект разработчика.  Семейство dsPIC обеспечивает высокую производительность в вычислительных операциях и идеально подходит для разработки сложных приложений, работающих в режиме реального времени. Микроконтроллеры могут работать с напряжением питания 3 В и 5 В и с расширенным температурным диапазоном применения до +150°С, имеют встроенные функции, повышающие надежность и обеспечивающие безопасное отключение в случае возникновения внештатных ситуаций. Благодаря развитой периферии, 16-разрядные устройства находят широкое применение в промышленности, автомобилестроении, в бытовых приборах.

32-разрядные микроконтроллеры подразделяются на:

  • 32-разрядные микроконтроллеры семейства PIC,
  • 32-разрядные микроконтроллеры семейства SAM.

Семейство 32-разрядных микроконтроллеров PIC начинается с PIC32MX, который компания Microchip представила в 2007 году. PIC32MX выполнен на основе ядра MIPS32 M4K. Устройство программируется с помощью компилятора Microchip MPLAB C, предназначенного для микроконтроллеров PIC32. Сегодня доступен полный спектр 32-разрядных микроконтроллеров PIC24 среднего уровня, начиная с 28-контактного разъема в малогабаритных корпусах QFN и заканчивая высокопроизводительными устройствами с Ethernet, CAN и USB OTG интерфейсами. OTG (On-The-Go) – спецификация интерфейса USB, которая позволяет USB-устройству выступать в качестве хоста USB. Архитектура PIC32 привнесла в микроконтроллеры ряд новых функций, в том числе:

  • максимальная скорость выполнения – 80 MIPS (MIPS – Million Instructions Per Second. Не путать с понятием MIPS-архитектура);
  • самая большая флэш-память – 512 Кб;
  • одна инструкция на выполнение тактового цикла;
  • первый кэшированный процессор;
  • полный JTAG и 2-проводное программирование и отладка;
  • трассировка в реальном времени.

В 2013 году Microchip представила серию микроконтроллеров PIC32MZ, основанных на ядре MIPS M14K. Серия PIC32MZ имеет следующие характеристики:

  • тактовая частота ядра 252 МГц;
  • до 2 Мб флэш-памяти и 512 Кб ОЗУ;
  • новые периферийные устройства, включая высокоскоростной USB.

В 2015 году Microchip выпустила семейство PIC32MZ EF с использованием обновленного процессора MIPS M5150 Warrior M-класса.
В следующем 2016 году Microchip представила семейство PIC32MM, специализированное для маломощных и недорогих приложений. В микроконтроллерах PIC32MM используется процессор MIPS32 M4K. Микроконтроллеры семейства PIC32MM предназначены для очень низкого энергопотребления и ограничены тактовой частотой до 25 МГц. Их ключевым преимуществом является поддержка 16-битных инструкций MIPS, что делает программу намного более компактной.
В 2017 году Microchip представила семейство PIC32MZ DA, включающее встроенный графический контроллер, графический процессор и 32 Мб DDR2 DRAM. В том же 2017 году Microchip представила семейство PIC32MK, специализирующееся на управлении двигателем и промышленном применении.

Номенклатура микроконтроллеров PIC32 и их сферы применения показана на рис. 1 (боковая стрелка показывает направление повышения производительности микроконтроллеров).

Рис. 1 (щелкнуть по рисунку для увеличения)

32-разрядные микроконтроллеры семейства SAM. Эти микроконтроллеры оснащены процессорами с ядром ARM Cortex-M,  имеют в своем составе множество передовых периферийных устройств, которые делают их отличным вариантом для разработки различных 32-разрядных приложений. Периферийные устройства имеют усовершенствованный сенсорный контроллер (PTC), низкое энергопотребление и большой набор высокопроизводительных аналоговых функций.

Номенклатура 32-разрядных микроконтроллеров SAM компании Microchip и их возможные сферы применения показаны на рис. 2.
             Рис.2 (щелкнуть по рисунку для увеличения)
Кратко рассмотрим особенности процессорных ядер серии Arm Cortex-M, применяемых в 32-разрядных микроконтроллерах семейства SAM:

Arm® Cortex®-M3;
Arm® Cortex®-M0+;
Arm® Cortex®-M0;
Arm® Cortex®-M7;
Arm® Cortex®-M4;
Arm® Cortex®-M33.

Компания ARM (Advanced RISC Machines, www.arm.com) представила на рынок семейство Cortex-M в 2004 г., когда было анонсировано первое ядро этого семейства – Cortex-M3. В 2007 г. она представила ядро Cortex-M1, в 2009 г. – Cortex-M0, в 2010 г. – Cortex-M4, в 2012 г. – Cortex-M0+, в 2014 г. – Cortex-M7, в 2016 г. – Cortex-M23 и Cortex-M33, в 2020 г. – Cortex-M55, в 2022 г. – Cortex-M85.

Cortex-M – это семейство физических ядер, предназначенных для дальнейшей интеграции с полупроводниковыми блоками, входящими в состав готового микроконтроллера. Состав и конструкцию готового микроконтроллера определяет и формирует производитель микроконтроллеров, в то время как состав и архитектуру ядер Cortex-M определяет проектировщик и разработчик архитектуры ядер – компания  ARM.

Arm® Cortex®-M3. Ядро небольшого размера, выполненное по 90 нм технологии. Характеристики Arm Cortex®-M3:

  • Архитектура Armv7-M.
  • Набор команд Thumb/Thumb-2.
  • Трехступенчатый конвейер.
  • Динамическое энергопотребление от 10 до 150 мкВт/ МГц.
  • Динамическая мощность ядра от 10 до 150 мкВт / МГц в зависимости от используемой технологии. 
  • Блок защиты памяти, который управляет доступом центрального процессора к памяти.

Микроконтроллеры с ядром Arm Cortex®-M3 отвечают требованиям приложений начального уровня по производительности, подходят для обработки сигналов в реальном времени, обеспечивают высокую масштабируемость.

Arm® Cortex®-M0+ является самым энергоэффективным ядром Arm®, доступным для встраиваемых приложений с ограничениями по конструкции, отличается одним из самых компактных размеров кремния и минимальным размером кода, что позволяет разработчикам достигать 32-разрядной производительности при стоимости микроконтроллера, как у 16 и 8-разрядных моделей. Характеристики Arm Cortex®-M0+:

  • Архитектура Armv6-M.
  • Поддержка набора команд Thumb / Thumb-2.
  • Двухступенчатый конвейер.
  • Дополнительный буфер микропроцессора.
  • Динамическая мощность ядра от 5 до 50 мкВт/МГц в зависимости от используемой технологии. 
  • Блок защиты памяти.

Малое количество вентилей микропроцессора позволяет использовать его в приложениях, где требуются простые функции. Ядро Cortex®-M0 + имеет низкий уровень шума и удовлетворяет требованиям по производительности для микроконтроллеров начального уровня.

Arm® Cortex®-M0 – это самый маленький из доступных процессоров Arm с малой площадью кремния, малым количеством вентилей, малым энергопотреблением и минимальным объемом кода. Подходит для устройств с аналоговым и смешанным сигналом, идеально подходит для встраиваемых приложений, имеет низкую стоимость, сравнимую со стоимостью 16- и 8-разрядных моделей микроконтроллеров.  Выполнен по 90 нм технологии. Характеристики Arm® Cortex®-M0:

  • Архитектура Armv6-M.
  • Поддержка набора команд Thumb / Thumb-2.
  • Трехступенчатый конвейер.
  • Динамическая мощность ядра от 5 до 50 мкВт/МГц, в зависимости от используемой технологии.

Рис. 3. Блок-схема Arm Cortex-M0

Arm® Cortex®-M7 обеспечивает лучшую производительность среди линейки Cortex-M. Ядро оснащено выделенными блоками цифровой обработки сигналов (DSP), включая дополнительный модуль с плавающей запятой (FPU). Высокопроизводительные функции ядра Arm Cortex-M7 идеально подходят для сложных приложений по управлению цифровыми сигналами. Типичными примерами применения являются: управление двигателем, управление питанием, алгоритмы машинного обучения и искусственного интеллекта, встроенное аудио, включая распознавание голоса, промышленная и домашняя автоматизация, интернет вещей.
Характеристики Arm Cortex®-M7:

  • Архитектура Armv7E-M.
  • Поддержка набора команд Thumb / Thumb-2.
  • Шестиступенчатый суперскалярный конвейер с предсказанием ветвлений.
  • Кэш команд и кэш данных.
  • Дополнительное расширение DSP для цифровой обработки сигналов с использованием математических вычислений, поддерживающее операции с плавающей запятой одинарной и двойной точности.
  • Более высокая частота процессора.
  • Обработка прерываний с нулевой задержкой.
  • 64-разрядный интерфейс AMBA4 AXI.
  • Блок защиты памяти.

Рис. 4. Блок-схема Arm Cortex-M7

Из сравнения рис. 3 и рис. 4 видно, насколько сильно процессорные ядра Arm Cortex-M0 и Arm Cortex-M7 отличаются друг от друга.

Arm® Cortex®-M4  является первым ядром линейки Cortex-M, оснащенным выделенными блоками цифровой обработки сигналов DSP, включая дополнительный модуль с плавающей запятой FPU. Характеристики Arm Cortex®-M4:

  • Архитектура Armv7E-M.
  • Поддержка набора команд Thumb/Thumb-2.
  • Трехступенчатый конвейер.
  • Цифровые блоки DSP для обработки сигналов с использованием математических вычислений.  Дополнительный модуль с плавающей запятой одинарной (FPU).

Cortex-M4 являются отличным выбором для интернета вещей, для управления батарейным питанием, для применения в бытовых портативных устройствах, для обработки выходного сигнала микрофона и сигналов обратной связи от датчиков, встроенных в систему управления двигателем.

Arm Cortex-M33 разработан для IoT и встраиваемых приложений для управления цифровыми сигналами. Процессор обеспечивает примерно на 20% большую производительность, чем Cortex-M4, имеет множество дополнительных функций, включая блок цифровой обработки сигналов (DSP), блок защиты памяти и блок с плавающей запятой (FPU). Cortex-M33 является идеальным процессором для большинства приложений, включая интеллектуальные измерительные приборы, малогабаритные портативные устройства, медицинские приложения. Характеристики ядра Arm Cortex®-M33:

  • Архитектура Armv8-M.
  • Поддержка набора команд Thumb / Thumb-2.
  • Трехступенчатый конвейер.
  • Цифровые блоки DSP для обработки сигналов с использованием математических вычислений. 
  • Дополнительный модуль с плавающей запятой (FPU).
  • Дополнительный модуль защиты памяти (MPU).

В таблице 5 представлена сравнительные характеристики процессорных ядер Arm Cortex-M (Y – Yes, N – No).

Таблица 5

Read more …

Глава 1. Программные и аппаратные средства программирования микроконтроллеров

1.1. Общие сведения

При разработке приложений для микроконтроллеров Microchip используются программные и аппаратные средства.

Программные средства необходимы для написания и отладки  программного кода. Программный код для микроконтроллеров пишется либо на языке ассемблера (машинно-ориентированный язык низкого уровня), либо на языках высокого уровня C/C++. Для микроконтроллеров компании Microchip используются следующие программные средства:

  • Microchip Studio – интегрированная среда программирования для микроконтроллеров AVR и SAM.
  • MPLAB® X IDE – интегрированная среда программирования для микроконтроллеров PIC. Совместно с MPLAB X IDE может использоваться плагин MPLAB Code Configurator (MCC), который облегчает и ускоряет процесс написания программного кода.
  • Компилятор MPLAB® XC. Если разрабатываемое приложение будет написано на C/C++, то потребуется установить компилятор, который преобразует программу с языка высокого уровня в машинный код. Компания Microchip предлагает компиляторы MPLAB XC8, MPLAB XC16, MPLAB XC32 для 8, 16 и 32-разрядных микроконтроллеров.
  • Proteus программная среда для моделирования процесса выполнения программного кода.

Аппаратные средства необходимы для проверки работы созданной программы на реальном устройстве. Используются следующие аппаратные средства.  

  • Отладочные платы (Curiosity boards). Отладочные платы используются для прототипирования разрабатываемых устройств.
  • Программатор (programmer). Программатор используются для загрузки созданной программы в микроконтроллер. Если используемая отладочная плата не имеет встроенного программатора, то его надо приобрести отдельно.

На рис. 1.5 показаны два варианта применения программатора: в верхней части рисунка показан автономный программатор (требуется кабель для соединения программатора с компьютером и второй кабель – для соединения с отладочной платой); в нижней части – программатор встроен в отладочную плату (требуется один кабель для соединения компьютера с отладочной платой).

Используемые в настоящее время программаторы для микроконтроллеров компании Microchip перечислены в таблице 1.6.

  • Платы расширения. Эти платы позволяют нарастить функциональные возможности отладочных плат. Например, совместно с отладочными платами компании Microchip широко применяются платы расширения click boards ™ компании  MikroElektronika (www.mikroe.com ). Click boards™ — это модульный стандарт плат расширения, которые добавляют отладочным платам новые функциональные возможности. Все click boards имеют стандартный разъем mikroBUS, что позволяет быстро создавать прототипы, не теряя времени на настройку или пайку оборудования. Эта концепция plug and play позволяет сосредоточиться не на оборудовании, а на реализации идеи проекта.

1.2. Операции с портами микроконтроллера

Микроконтроллер представляет из себя микросхему с несколькими выводами (рис. 1.1, 1.2). Выводы позволяют микроконтроллеру принимать и выводить данные.  Выводы объединены в порты, которые обозначаются латинскими буквами А, В, С, D и т.д. Число портов зависит от  модели микроконтроллера. Для 8-битных (8-разрядных) микроконтроллеров каждый порт содержит восемь выводов (восемь контактов). Неполный порт может содержать меньше выводов.

На рис. 1.1. и 1.2. показаны 28-контактная микросхема микроконтроллера AVR ATMEGA8A и 18-контактная микросхема микроконтроллера PIC18F1X20, выполненные в DIP корпусах. Нумерация выводов микросхемы (для данного типа корпуса) начинается с левого верхнего вывода и продолжается против часовой стрелки. Верхнюю часть микросхемы можно определить по полукруглому вырезу в корпусе микросхемы. Из рис. 1.1 следует, что микроконтроллер ATMEGA8A содержит два полных порта: PortB, PortD по восемь выводов,  и один неполный PortC из семи выводов. Из рис. 1.2 следует, что   микроконтроллер PIC18F1X20 содержит два полных порта: PortA и PortВ по восемь выводов.

На выводы порта можно подавать логические 0 или 1, где 0 – это отсутствие напряжения, 1 – это напряжение +5 В. На самом деле напряжения располагаются в некотором диапазоне, близком к этим значениям, но это сути не меняет. Таким образом, на каждый вывод микроконтроллера можно записать один бит информации, принимающий значение 0 или 1. Тогда для 8-разрядного порта А можно записать:

PortA=0b11111111 //все биты имеют значение 1 (на все выводы порта подано напряжение +5 В).
PortA=0b00000000 //все биты имеют значение 0 (на всех выводах отсутствует напряжение).

где 0b – это префикс двоичного числа, так как приведенные записи можно рассматривать, как двоичное число.
В первом случае в PortA записано двоичное число 255, во втором случае в PortA записано число 0.
Число в порт A можно записать также в шестнадцатеричном виде. Запись числа в шестнадцатеричном виде имеет префикс 0x и запишется следующим образом:

PORTA = 0xff  //на всех выводах порта A установлена 1.
PORTA = 0x00 //на всех выводах порта A установлен 0.

Нумерация битов порта начинается с крайнего правого бита, который считается нулевым, следующий бит является первым и т. д. Нулевому биту соответствует нулевой вывод порта, первому биту  — первый вывод порта и  т. д.
PortA = 0b00000011;
Эта запись означает, что в нулевой и первый биты записана 1, в остальные биты записан 0.  Обращение к  портам производится через регистры ввода-вывода микроконтроллера.
Выводы порта, как следует из рис. 1.1 и рис. 1.2 могут выполнять не только функции ввода/вывода, но и другие функции.

Порты микроконтроллера AVR имеют три регистра ввода-вывода: регистр направления данных DDRx, регистр данных порта PORTx, регистр чтения выводов порта PINx. Любой регистр представляет собой ячейку памяти. Названия регистров получаются подстановкой названия порта вместо символа x, соответственно для порта A: PORTA, DDRA, PINA, для порта B: PORTB, DDRB, PINB и т.д. Регистры PINx доступны только для чтения, регистры PORTx и DDRx доступны для чтения и для записи.

Любой порт микроконтроллера AVR можно сконфигурировать или на вход, или на выход, или частично на вход, частично на выход. Для этой цели используется регистр DDRx. Если некоторый разряд регистра DDRx содержит 0, то он сконфигурирован, как вход, если содержит 1, то как выход. Под понятием «порт сконфигурирован как выход» подразумевается, что микроконтроллер передает информацию на внешнее устройство, под понятием «порт сконфигурирован как вход» подразумевается, что микроконтроллер принимает информацию от внешнего устройства.

Для управления портами микроконтроллера используются побитовые операции. Перейдем к рассмотрению побитовых операций.

Сдвиг вправо (>>). С помощью данной команды все биты регистра сдвигаются вправо на количество позиций, указанных справа после знака >>. Пусть во все биты порта D микроконтроллера установлена 1:
PORTD = 0b11111111; //исходное число.
Применим операцию сдвига на три разряда вправо.
PORTD = PORTD >> 3; // команда сдвига на три разряда вправо
PORTD = 0b00011111; //число, получаемое в результате сдвига.
При этом освободившиеся разряды заполняются нулями, а вышедшие за пределы регистра теряются. Исходному двоичному числу соответствует десятичное число 255, полученному двоичному числу 00011111 соответствует десятичное число 31.

Сдвиг влево (<<). С помощью данной команды все биты регистра сдвигаются влево на количество позиций, указанных справа после знака << . Пусть во все биты порта D, как и в предыдущем случае, установлена 1:
PORTD = 0b11111111; // исходное число
PORTD = PORTD << 3; // команда сдвига на три разряда влево
PORTD = 0b11111000; // результат сдвига.
Как и в предыдущем случае, освободившиеся разряды заполняются нулями, а вышедшие за пределы регистра теряются. Двоичному числу 11111000 соответствует десятичное число 248.

Пример 1.1. Записать в порт D число 137 в двоичном и шестнадцатеричном виде.
Для отображения числа в двоичном и шестнадцатеричном виде можно воспользоваться стандартной программой Калькулятор ОС Windows в режиме Программист, тогда получим
PORTD = 0b10001001; // число 137 в двоичном виде;
PORTD = 0x89; // число 137 в шестнадцатеричном виде.
Пример 1.2. В порт D записано число PORTD = 0b11001001. Сдвинуть данное число на 4 знака влево.
PORTD = PORTD << 4; 
В результате получим PORTD = 0b10010000.

Запись 1 в произвольный бит порта. Очень часто необходимо записать 1 или 0 не на все выводы порта, а только на некоторые из них, оставляя значения на остальных выводах без изменений. Для этого используются логические операции. Применяемые чаще других логические операции представлены в таблице 1.1.

К примеру, если необходимо установить 1 на второй вывод порта D, не меняя значения других выводов, то следует использовать команду:
PORTD |= (1<<2);
Разберем подробнее, почему в результате выполнения этой команды на второй вывод порта D запишется именно 1. Фрагмент вышеприведенной команды (1<<2) осуществляет сдвиг единицы влево на 2 бита, а знак «|», стоящий перед знаком равно, выполняет операцию логического сложения этой 1 и того числа (0 или 1), которое находилось до этого во втором бите. Независимо от того, 0 или 1 были во втором бите ранее, операция логического сложения 1 с этими числами даст логическую 1, которая и запишется во второй бит.
Для того, чтобы записать 1 на несколько выводов порта, например, на второй, пятый и седьмой выводы, следует применить команду:
PORTD | = (1<<2) | (1<<5) | (1<<7);

Запись 0 в произвольный бит порта. Если необходимо установить 0 на второй вывод порта D, не меняя значения других выводов, то следует применить команду:
PORTD & = ~ (1<<2);
В этом случае результат сдвига единицы на две позиции влево инвертируется с помощью операции инвертирования, которая обозначается знаком «~». Таким образом, сдвинутая влево на две позиции единица (1<<2) превращается при инвертировании в ноль и умножается на второй бит регистра PORTD. Каким бы не было состояние второго бита до этого (0 или 1), при умножении на 0 получим результат 0, и это значение записывается во второй бит.
Для записи 0 на несколько выводов порта, например, на второй, пятый и седьмой выводы, следует применить команду:
PORTD & = ~ ((1<<2) | (1<<5) | (1<<7));
Для проверки состояния, например, второго вывода порта D следует применить следующие условные операторы:

if (~PIND & (1<<2)) // проверка на наличие 0.
if (PIND & (1<<2)) // проверка на наличие 1.

Поясним эти условные операторы. Выражение в скобках после if может принимать значение «истина» или «ложь». «Истина» – это 1, «ложь» – это 0. Предположим, во втором бите порта D записан 0. Тогда выражение в скобках принимает значение «истина». Действительно: ~(0∙1)=1. Если во втором бите будет записана 1, то выражение в скобках принимает значение «ложь». Действительно: ~(1∙1)=0. Следовательно, условный оператор if (~PIND & (1<<2)) может служить проверкой на наличие нуля в контролируемом бите. Аналогичные рассуждения можно провести для второго условного оператора
if (PIND & (1<<2))
и убедиться, что он может использоваться для проверки 1 в контролируемом бите. 
Для проверки состояния вывода можно также применить другую форму записи условного оператора. Пусть в порт D записана любая последовательность нулей и единиц, например, PORTD = 0b00001111. Затем в процессе выполнения программы на второй вывод записывается 0. Тогда
if (PIND == 0b00001011) // проверка на наличие 0 на втором выводе.
Если на шестой вывод записывается 1, тогда
if (PIND == 0b01001111) // проверка на наличие 1 на шестом выводе.
Напомним, нумерация битов порта начинается с крайнего правого бита, который считается нулевым, следующий бит является первым и т.д. Двойной знак равенства «==» в языке С означает «равно».

Пример 1.3. В порт D записано число PORTD = 0b11000011. Записать «1» во второй и третий биты этого числа:
PORTD |= (1<<2) | (1<<3);
в результате получим число PORTD = 0b11001111.
Пример 1.4. В порт D записано число PORTD = 0b11000011. Записать «0» в нулевой и первый биты этого числа:
PORTD &=~ ((1<<0) | (1<<1));
в результате получим число PORTD = 0b11000000.

Переключение бита. Кроме установки и сброса отдельного бита часто используется команда, которая переключает отдельный бит в противоположное состояние: единицу в ноль и наоборот. Пусть в порт D установлено число: PORTD = 0b00011111. Переключение второго бита в противоположное состояние производится командой: PORTD ^= (1<<2). В результате имеем: PORTD = 0b00011011.
Выполним переключение в противоположное состояние нулевого, второго и шестого бита исходного числа PORTD = 0b00011111. Для этого применим команду: PORTD ^= (1<<0) | (1<<2) | (1<<6). В результате получим число: PORTD = 0b01011010.
Если применить команду PORTD=~0b00011111, то все биты поменяются на противоположные и получим число: PORTD = 0b11100000.

Порты микроконтроллера PIC имеют три специальных регистра: TRISx (регистр направления данных), PORTx (регистр чтения на выводах порта), LATx (регистр защелка порта). Регистр TRISx задает направление работы выводов порта. Если все выводы порта работают на вход, то в них записываются единицы, если на выход, то в них записываются нули, то есть наоборот, нежели у микроконтроллера AVR. (Мнемоническое правило для запоминания направления работы выводов для микроконтроллера PIC: 1 – Input; 0 – Output, т.е. похожее написание цифры и первой буквы английских слов вход и выход).
Для задания направления работы порта В можно записать:

TRISB = 0; // все выводы порта B работают на выход.
TRISB = 0xFF; // все выводы порта B работают на вход.
TRISB | = (1<<2) // второй вывод порта B работает на вход.
TRISB &=~ (1<<2) // второй вывод порта B работает на выход.

Среда программирования микроконтроллеров PIC – MPLAB X IDE позволяет напрямую обращаться к выводам порта. Для записи направления работы отдельного вывода порта B можно использовать команды:

TRISBbits.TRISB2 = 1; // второй вывод работает на вход.
TRISBbits.TRISB2 = 0; // второй вывод работает на выход.

Доступ к данным на выводах порта осуществляется посредством регистра PORTx.
PORTB = 0; // запись 0 на все выводы порта.
PORTB = 0xFF; // запись 1 на все выводы порта.
PORTB | = (1<<2) // запись 1 на второй вывод порта.
PORTB & = ~ (1<<2) // запись 0 на второй вывод порта.

Для записи значений на отдельных линиях порта используется также команда:
PORTBbits.RB2 = 1; // запись 1 на второй вывод порта.
PORTBbits.RB2 = 0; // запись 0 на второй вывод порта.

Для проверки состояния выводов (0 или 1) следует применять условные операторы:
if (PORTBbits.RB1== 0); // проверка на наличие 0,
if (PORTBbits.RB1== 1); // проверка на наличие 1.

При чтении данных регистра PORTx считываются значения данных, присутствующие на выводах порта, а при чтении данных регистра LATx считываются данные, хранящиеся в регистре защелке порта. Данные, записанные в защелку порта PORTx, и данные, физически присутствующие на выводах порта PORTx, могут отличаться. Для записи в защелку порта и считывании из защелки порта используется регистр LATx.

LATB = 0; // запись во все биты порта значения 0.
LATB = 0xFF; // запись во все биты порта значения 1.
LATB | = (1<<2) // запись во второй бит порта значения 1.
LATB & = ~ (1<<2) // запись во второй бит порта значения 0.

Или можно напрямую обратиться к отдельным битам порта B. 
LATBbits.LATB2 = 1; // запись 1 во второй бит порта.
LATBbits.LATB2 = 0; // запись 0 во второй бит порта.
Не вдаваясь в подробности схемотехнической реализации портов, можно сформулировать такое правило: когда данные записываются в порт, то надо использовать LATx, когда данные считываются из порта, то надо использовать PORTx. Для микроконтроллеров серий PIC16 и младше регистр LATx не используется, используются только регистры TRISx и PORTx. В этом случае, для записи данных в порт и чтения данных из порта используется PORTx. 

Read more …

1.3. Интегрированная среда разработки Microchip Studio для AVR

1.3.2. Создание проекта «Линейка светодиодов» в Microchip Studio

1.3.2.1. Начало работы

Для программирования микроконтроллеров AVR будем использовать интегрированную среду разработки (Integrated Development Environment – IDE) Microchip Studio. Эта IDE представляет собой единую среду для записи, сборки и отладки программ на ассемблере и на C/C++. Официальную версию можно скачать бесплатно с сайта компании Microchip: https://www.microchip.com/en-us/tools-resources/develop/microchip-studio. Среду Microchip Studio можно использовать для разработки и отладки приложений на микроконтроллерах AVR ® и SAM. Несмотря на то, что она поставляется с новым названием и внешним видом, её можно использовать с любой существующей документацией и видеороликами от предыдущей среды разработки – Atmel Studio. Microchip Studio имеет следующие отличительные черты:

  • Поддержка более 500 устройств AVR и SAM.
  • Поддержка компилятора MPLAB ® XC8.
  • Обширная библиотека исходного кода, включая драйверы, коммуникационные стеки, многочисленные примеры с исходным кодом, графические сервисы и сенсорные функции Advanced Software Framework (ASF).
  • Расширения IDE через Microchip Gallery – онлайн-магазин приложений для инструментов разработки и встроенного программного обеспечения от Microchip и третьих сторон.
  • Функционал для настройки емкостного сенсорного дизайна, проверки производительности системы, мониторинга энергопотребления и построения графиков и трассировки данных в режиме реального времени.
  • Функционал для настройки и тестирования беспроводных устройств.
  • Встроенный компилятор для создания и отладки кода на C/C++ и ассемблере.
  • Расширенные функции отладки, включая сложные точки останова данных и поддержку трассировки (устройства SAM3 и SAM4).
  • Встроенный редактор с визуальной поддержкой.
  • Мастер проектов, который позволяет создавать проекты с нуля или из большой библиотеки примеров.

После установки и запуска Microchip Studio на экране монитора появляется начальное окно, показанное на рис. 1.3. Разработка программы начинается с создания проекта. Для начала на диске C создадим папку для хранения проектов, которую назовем, например, Projects_AVR. Чтобы создать проект, надо выбрать опции File –> New –> Project. Появится окно мастера создания проекта, показанное на рис. 1.4.  Выберем в левой части окна язык C/C++, в средней части выберем AVR XC8 C Application Project.

Будем создавать проект, который представляет собой мигающую линейку из восьми светодиодов. Поэтому в нижней части этого окна в качестве имени проекта укажем Line_Leds, далее щелкнем по кнопке Browse и укажем созданную ранее папку Projects_AVR. Галочку около опции Create directory for solution убираем. Щелкаем OK. Появится новое окно, в котором выбираем микроконтроллер ATmega8A, как показано на рис. 1.5. Щелкаем OK.

Появляется окно, показанное на рис. 1.6 с начальным кодом на языке C. Здесь есть строки, выделенные символами:
/* … */ – начало и конец комментария.
Этими символами обозначается многострочный комментарий. Однострочный комментарий обозначатся двумя косыми чертами //. Комментарий служит для пояснения кода программы, компилятор на него не реагирует и просто пропускает. Поэтому без ущерба для программы комментарий можно удалить.

1.3.2.2. Разработка листинга программы

Давайте создадим программу для микроконтроллера ATmega. Начальный код, созданный при запуске Microchip Studio, можно просто удалить. При написании программы следует обращать внимание на подсказки редактора кода. Редактор знает доступные переменные и функции. Например, при вводе директивы #include уже при наборе первых букв #in появится список, из которого можно выбрать #include, щелкнув по клавише Enter. Так меньше шансов сделать ошибку при наборе кода. При редактировании программы, если нажать Ctrl + Space, появится список автозаполнения, из которого можно выбрать доступные варианты.
Создадим для микроконтроллера ATmega8A проект, содержащий программу для мигания линейки из восьми светодиодов.

Пример 1.5.
#define F_CPU 1000000UL // устанавливаем частоту процессора 1 МГц
#include <avr/io.h>
#include <util/delay.h> //подключаем утилиту delay (задержка выполнения кода)
int main(void)
{
DDRD = 0b11111111; //устанавливаем выводы порта D на выход
PORTD = 0; // записываем в порт D нули
while(1) // заголовок бесконечного цикла
{
PORTD = 0b11111111; //устанавливаем «1» во все биты (засвечиваем все //светодиоды)
_delay_ms(300); // ждем 300 мс
PORTD = 0; //устанавливаем «0» во все биты (гасим светодиоды)
_delay_ms(300); // ждем 300 мс
}
}

Поcле того, как программа написана, её необходимо скомпилировать. Для этого выбираем опции Build –> Build Solution (или щелкаем клавишу F7). Если код программы написан без ошибок, то в нижней части интерфейсного окна появится запись Build succeeded (сборка прошла успешно) (рис. 1.7).

Давайте немного усложним программу. Пусть светодиоды засвечиваются не все сразу, а последовательно по одному, начиная с нулевого и заканчивая седьмым. Таким образом, по линейке светодиодов от её начала (от нулевого светодиода) к концу побежит светящийся огонек.
Модифицированная программа имеет следующий вид.

Пример 1.6.
#define F_CPU 1000000UL // устанавливаем частоту процессора 1 МГц
#include <avr/io.h>
#include <util/delay.h> //подключаем утилиту delay (задержка выполнения кода)
int main(void)
{
DDRD = 0b11111111; //устанавливаем выводы порта D на выход
PORTD = 0; // записываем в порт D нули
while(1) // заголовок бесконечного цикла
{
int i; //определяем переменную i
PORTD=0b00000001; //засвечиваем нулевой светодиод
for (i=0; i<=7; i=i+1) //задаем цикл
{
if (i>=1)
PORTD=PORTD<<1; //применяем операцию сдвига влево на 1 позицию
_delay_ms(300); // ждем 300 мс
}
PORTD=0; //гасим все светодиоды
_delay_ms(300); // ждем 300 мс
}
}

Программа создана. Что дальше? А дальше надо смоделировать работу программы, и если программа работает так, как было задумано, то программу можно загружать в микроконтроллер. Все дальнейшие шаги работы с этой программой, а также и с другими программами подробно описаны в учебном пособии, а сейчас просто приведем небольшой видеофрагмент, как выглядит моделирование работы программы в специализированном программном обеспечении Proteus.

Стоимость учебного пособия — 490 руб. Порядок оплаты — в разделе «Контакты».

Время на прочтение
15 мин

Количество просмотров 130K

Введение

PIC-контроллеры остаются популярными в тех случаях, когда требуется создать недорогую компактную систему с низким энергопотреблением, не предъявляющую высоких требований по ее управлению. Эти контроллеры позволяют заменить аппаратную логику гибкими программными средствами, которые взаимодействуют с внешними устройствами через хорошие порты.

Миниатюрные PIC контроллеры хороши для построения преобразователей интерфейсов последовательной передачи данных, для реализации функций «прием – обработка – передача данных» и несложных регуляторов систем автоматического управления.

Компания Microchip распространяет MPLAB — бесплатную интегрированную среду редактирования и отладки программ, которая записывает бинарные файлы в микроконтроллеры PIC через программаторы.

Взаимодействие MPLAB и Matlab/Simulink позволяет разрабатывать программы для PIC-контроллеров в среде Simulink — графического моделирования и анализа динамических систем. В этой работе рассматриваются средства программирования PIC контроллеров: MPLAB, Matlab/Simulink и программатор PIC-KIT3 в следующих разделах.

• Характеристики миниатюрного PIC контроллера PIC12F629
• Интегрированная среда разработки MPLAB IDE
• Подключение Matlab/Simulink к MPLAB
• Подключение программатора PIC-KIT3

Характеристики миниатюрного PIC-контроллера

Семейство РIС12ххх содержит контроллеры в миниатюрном 8–выводном корпусе со встроенным тактовым генератором. Контроллеры имеют RISC–архитектуру и обеспечивают выполнение большинства команд процессора за один машинный цикл.

Для примера, ниже даны характеристики недорогого компактного 8-разрядного контроллера PIC12F629 с многофункциональными портами, малым потреблением и широким диапазоном питания [1].

• Архитектура: RISC
• Напряжение питания VDD: от 2,0В до 5,5В (< 6,5В)
• Потребление:
— <1,0 мА @ 5,5В, 4МГц
— 20 мкА (тип) @ 32 кГц, 2,0В
— <1,0 мкА (тип) в режиме SLEEP@2,0В
• Рассеиваемая мощность: 0,8Вт
• Многофункциональные каналы ввода/вывода: 6/5
• Максимальный выходной ток портов GPIO: 125мА
• Ток через программируемые внутренние подтягивающие резисторы портов: ≥50 (250) ≤400 мкА @ 5,0В
• Разрядность контроллера: 8
• Тактовая частота от внешнего генератора: 20 МГц
Длительность машинного цикла: 200 нс
• Тактовая частота от внутреннего RC генератора: 4 МГц ±1%
Длительность машинного цикла: 1мкс
• FLASH память программ: 1К
Число циклов стирание/запись: ≥1000
• ОЗУ память данных: 64
• EEPROM память данных: 128
Число циклов стирание/запись: ≥10K (-40оС ≤TA≤ +125 оС)
• Аппаратные регистры специального назначения: 16
• Список команд: 35 инструкций, все команды выполняются за один машинный цикл,
кроме команд перехода, выполняемых за 2 цикла
• Аппаратный стек: 8 уровней
• Таймер/счетчик ТМR0: 8-разрядный с предделителем
• Таймер/счетчик ТМR1: 16-разрядный с предделителем

Дополнительные особенности:

• Сброс по включению питания (POR)
• Таймер сброса (PWRTтаймер ожидания запуска генератора (OST
• Сброс по снижению напряжения питания (BOD)
• Сторожевой таймер WDT
• Мультиплексируемый вывод -MCLR
• Система прерываний по изменению уровня сигнала на входах
• Индивидуально программируемые для каждого входа подтягивающие резисторы
• Программируемая защита входа
• Режим пониженного энергопотребления SLEEP
• Выбор режима работы тактового генератора
• Внутрисхемное программирование ICSP с использованием двух выводов
• Четыре пользовательские ID ячейки

Предельная рабочая температура для Е исполнения (расширенный диапазон) от -40оС до +125 оС;
Температура хранения от -65оС до +150 оС.

КМОП технология контроллера обеспечивает полностью статический режим работы, при котором остановка тактового генератора не приводит к потере логических состояний внутренних узлов.
Микроконтроллер PIC12F629 имеет 6-разрядный порт ввода/вывода GPIO. Один вывод GP3 порта GPIO работает только на вход, остальные выводы можно сконфигурировать для работы как на вход так и на выход. Каждый вывод GPIO имеет индивидуальный бит разрешения прерываний по изменению уровня сигнала на входах и бит включения внутреннего подтягивающего резистора.

Интегрированная среда разработки MPLAB IDE

MPLAB IDE — бесплатная интегрированная среда разработки ПО для микроконтроллеров PIC включает средства для создания, редактирования, отладки, трансляции и компоновки программ, записи машинного кода в микроконтроллеры через программаторы.

Загрузка MPLAB IDE

Бесплатные версии MPLAB (включая MPLAB 8.92) хранятся на сайте компании Microchip в разделе «DOWNLOAD ARCHIVE».

Создание проекта

Пример создания проекта программ PIC контроллера в среде MPLAB включает следующие шаги [2].

1. Вызов менеджера проекта.

2. Выбор типа PIC микроконтроллера.

3. Выбор компилятора, например, Microchip MPASM для ассемблера.

4. Выбор пути к каталогу проекта (клавиша Browse…) и ввод имени проекта.

5. Подключение файлов к проекту в окне Project Wizard → Step Four можно не выполнять. Это можно сделать позднее, внутри активного проекта. Клавиша Next открывает следующее окно.

6. Завершение создания проекта (клавиша Finish).

В результате создания проекта FirstPrMPLAB интерфейс MPLAB принимает вид, показанный на Рис. 1.


Рис. 1. Интерфейс среды MPLAB v8.92 и шаблон проекта.

Создание файла программы
Программу можно создать при помощи любого текстового редактора. В MPLAB имеется встроенный редактор, который обеспечивает ряд преимуществ, например, оперативный лексический анализ исходного текста, в результате которого в тексте цветом выделяются зарезервированные слова, константы, комментарии, имена, определенные пользователем.

Создание программы в MPLAB можно выполнить в следующей последовательности.

1. Открыть редактор программ: меню → File → New. Изначально программе присвоено имя Untitled.

2. Набрать или скопировать программу, например, на ассемблере.

3. Сохранить программу под другим именем (меню → File → Save As), например, FirstPrMPLAB.asm.


Рис. 2. Пример простейшей программы (на ассемблере) вывода сигналов через порты контроллера GP0, GP1, GP2, GP4, GP5 на максимальной частоте.

Запись ‘1’ в разряде регистра TRISIO переводит соответствующий выходной буфер в 3-е состояние, в этом случае порт GP может работать только на вход. Установка нуля в TRISIO настраивает работу порта GP на выход.

Примечание. По спецификации PIC12F629 порт GP3 микроконтроллера работает только на вход (соответствующий бит регистра TRISIO не сбрасывается – всегда находится в ‘1’).

Регистры TRISIO и GPIO находятся в разных банках области памяти. Переключение банков выполняется 5-м битом регистра STATUS.

Любая программа на ассемблере начинается директивой org и заканчивается директивой end. Переход goto Metka обеспечивает циклическое выполнение программы.

В программе (Рис. 2) используются следующие обозначения.

Директива LIST — назначение типа контроллера
Директива __CONFIG — установка значений битов конфигурации контроллера
Директива equ — присвоение числового значения
Директива org 0 — начало выполнения программы с адреса 0
Команда bsf — устанавливает бит указанного регистра в 1
Команда bсf — сбрасывает бит указанного регистра в 0
Команда movlw — записывает константу в регистр W
Команда movwf — копирует содержимое регистра W в указанный регистр
Команда goto — обеспечивает переход без условия на строку с меткой
Директива end — конец программы

Установка требуемой конфигурации микроконтроллера
Конфигурация микроконтроллера PIC12F629 зависит от настроек слова конфигурации (2007h), которые можно задать в программе через директиву __CONFIG.

Непосредственно или через окно MPLAB: меню → Configure → Configuration Bits:

Где:

Бит 2-0 — FOSC2:FOSC0. Выбор тактового генератора
111 — Внешний RC генератор. Подключается к выводу GP5. GP4 работает как CLKOUT
110 — Внешний RC генератор. Подключается к выводу GP5. GP4 работает как ввод/вывод
101 — Внутренний RC генератор 4МГц. GP5 работает как ввод/вывод. GP4 — как CLKOUT
100 — Внутренний RC генератор 4МГц. GP5 и GP4 работают как ввод/вывод
011 — EC генератор. GP4 работает как ввод/вывод. GP5 — как CLKIN
010 — HC генератор. Резонатор подключается к GP4 и GP5
001 — XT генератор. Резонатор подключается к GP4 и GP5
000 — LP генератор. Резонатор подключается к GP4 и GP5

Бит 3 — WDTE: настройка сторожевого таймера (Watchdog Timer)
1 — WDTE включен
0 — WDTE выключен

Сторожевой таймер предохраняет микроконтроллер от зависания – перезапускает программу через определенный интервал времени если таймер не был сброшен. Период таймера устанавливается в регистре OPTION_REG. Обнуление сторожевого таймера вызывается командой CLRWDT.

Бит 4 — PWRTE: Разрешение работы таймера включения питания:
1 — PWRT выключен
0 — PWRT включен

Таймер задерживает микроконтроллер в состоянии сброса при подаче питания VDD.

Бит 5 — MCLR: Выбор режима работы вывода GP3/-MCLR
1 — работает как -MCLR
0 — работает как порт ввода-вывода GP3

Бит 6 — BODEN: Разрешение сброса по снижению напряжения питания (как правило < 2.0В)
1 — разрешен сброс BOR
0 — запрещен сброс BOR автоматически включается таймер

При разрешении сброса BOR автоматически включается таймер PWRT

Бит 7 — .CP: Бит защиты памяти программ от чтения программатором
1 Защита выключена
0 Защита включена

При выключения защиты вся память программ стирается

Бит 8 — .CPD: Бит защиты EPROM памяти данных
1 Защита выключена
0 Защита включена

После выключения защиты вся информация будет стерта

Бит 11-9 — Не используются: Читается как ‘1’.

Бит 13-12 — BG1:BG0. Биты калибровки сброса по снижению питания
00 — нижний предел калибровки
11 — верхний предел калибровки

Добавление программы к проекту

Пример добавления программы к проекту показан на (Рис. 3).

Рис. 3. Добавление программы FirstPrMPLAB.asm к проекту FirstPrMPLAB.mcp

Сохранить материалы проекта можно командой: меню → File → Save Workspace.

Компиляция

Чтобы создать бинарный файл с расширением hex для прошивки микроконтроллера необходимо откомпилировать проект. Запуск компиляции выполняется командой меню → Project → Build All. Результаты компиляции можно увидеть в окне Output (Рис. 1). Если в программе нет ошибок, то компилятор выдаёт сообщение об успешной компиляции: BUILD SUCCEEDED, загрузочный HEX файл можно найти в рабочем каталоге:

Отладка программы

Отладку программы в среде MPLAB IDE можно выполнить при помощи аппаратного эмулятора MPLAB REAL ICE или программного симулятора MPLAB SIM. Запуск последнего выполняется как показано на Рис. 4.

Рис. 4. Подключение к симулятору MPLAB SIM для отладки программы.

После запуска отладчика в окне Output (Рис. 1) появляется закладка MPLAB SIM, куда MPLAB выводит текущую информацию отладчика. Команды отладчика (Рис. 5) после запуска становятся активными.

Рис. 5. Команды отладчика.

Команды отладчика:

• Run — Непрерывное выполнение программы до точки останова (Breakpoint) если таковая установлена.
• Halt — Остановка программы на текущем шаге выполнения.
• Animate — Анимация непрерывного выполнения программы.
• Step Into — Выполнение по шагам (вызовы Call выполняются за один шаг).
• Step Over — Выполнение по шагам включая команды вызовов Call.
• Reset — Начальная установка программы. Переход указателя на первую команду.
• Breakpoints — Отображение списка точек останова. Обработка списка.

При выполнении программы по шагам текущий шаг выделяется стрелкой (Рис. 6). Непрерывное выполнение программы останавливается командой Halt или достижением программой точки останова. Точка останова устанавливается/снимается в строке программы двойным щелчком.
Пример программы на ассемблере, которая с максимальной скоростью меняет состояние портов контроллера показан на Рис. 6 (справа). Программа передаёт в регистр портов GPIO данные b’10101010’ и b’01010101’. Поскольку в регистре GPIO передачу данных в порты контроллера выполняют не все разряды, а только 0,1,2,4 и 5, то состояние регистра GPIO (Рис. 6, слева) отличается значениями: b’00100010’ и b’00010101’.


Рис. 6. Состояние регистров специального назначения контроллера на момент выполнения программы (слева) и выполняемая по шагам программа (справа).

В процессе отладки можно наблюдать за состоянием регистров, переменных, памяти в соответствующих окнах, открываемых в разделе View основного меню. В процессе отладки можно вносить изменения в код программы, содержимое регистров, памяти, изменять значения переменных. После изменения кода необходимо перекомпилировать программу. Изменение содержимого регистров, памяти и значения переменных (окна раздела View: Special Function Register, File Register, EEPROM, Watch) не требует перекомпиляции.

Входные сигналы портов модели микроконтоллера можно задать в разделе Debugger → Stimulus. Устанавливаемые состояния сигналов портов привязываются к времени (тактам) отладки.

Иногда результаты выполнения программы в режиме отладки не соответствуют выполнению этой же программы в реальном контроллере, так, например, отладчик программы (Рис. 6) без инструкций movlw 0x07 и movwf cmcon показывает, что выходы GP0 и GP1 регистра GPIO не изменяются — находятся в нулевом состоянии, содержимое регистра GPIO попеременно равно 0x14 и 0х20. Однако, контроллер, выполняющий программу без указанных инструкций, показывает на осциллографе циклическую работу всех пяти выходов: 0x15 и 0х22, включая GP0 и GP1 (см. Рис. 7).

Осциллограммы контроллера, выполняющего циклы программы Рис. 6 (Metka… goto Metka) показаны на Рис. 7.


Рис. 7. Осциллограммы выхода GP0 (слева) и GP1 (справа) микроконтроллера PIC12F629, работающего от внутреннего 4МГц RC генератора. Программа (Рис. 6) формирует сигналы максимальной частоты на всех выходах контроллера. За период сигналов 5.3 мкс выполняется 5 команд (6 машинных циклов), амплитуда GP0 сигнала на осциллограмме равна 4.6В, измеренное программатором питание контроллера 4.75В.

Прошивка микроконтроллера

Для записи программы в микроконтроллер (прошивки контроллера) необходимо микроконтроллер подключить к интегрированной среде MPLAB IDE через программатор. Организация подключения показана ниже в разделе «Подключение программатора PIC-KIT3».

Примечание. В контроллер PIC12F629 записана заводская калибровочная константа настройки частоты внутреннего тактового генератора. При необходимости её можно прочитать и восстановить средствами MPLAB с использованием программатора.

Команды для работы с программатором и изменения его настроек находятся в меню MPLAB Programmer. Тип программатора в MPLAB выбирается в разделе: меню → Programmer → Select Programmer.

Рис. 8. Выбор программатора для подключения к среде MPLAB.

Прошивка микроконтроллера через программатор запускается командой: меню → Programmer → Program. Сообщение об успешной прошивке показано на Рис. 9.

Рис. 9. Запуск прошивки микроконтроллера и вид сообщения об успешной прошивке.

Примечание: Во время прошивки микроконтроллера у программатора PIC-KIT3 мигает желтый светодиод.

Подключение MATLAB/SIMULINK к MPLAB

В системе моделирования динамических систем Simulink (приложение к Matlab) на языке графического программирования [7] можно разрабатывать программы для семейства PIC контроллеров имеющих АЦП/ЦАП, счетчики, таймеры, ШИМ, DMA, интерфейсы UART, SPI, CAN, I2C и др.

Пример Simulink программы PIC контроллера показан на Рис. 10.

Рис. 10. Пример программы на языке графического программирования для PIC контроллера выполненной в среде моделирования динамических систем Simulink.

Взаимодействие средств разработки и компиляции программ для PIC контроллеров в Simulink показано на Рис. 11 [6].

Рис. 11. Структура средств построения адекватной модели PIC контроллера на языке графического программирования.

Для построения среды разработки необходимы следующие компоненты Matlab:

• Simulink
• Real-Time Workshop Embedded Coder
• Real-Time Workshop

И Cи компилятор компании Microchip:

• C30 для контроллеров PIC24, dsPIC30 и PIC33
• или C32 для контроллеров серии PIC32

Установка компонентов Matlab

На сайте имеются Simulink библиотеки (dsPIC Toolbox) для PIC контроллеров и версий Matlab c R2006a по R2012a:

Для скачивания библиотеки необходимо зарегистрироваться. Программы поддерживают работу 100 микроконтроллеров из серий PIC 16MC, 24F, 30F, 32MC, 33F, 56GP, 64MC, 128MC, 128GP.
Бесплатные версии работают с Simulink моделями PIC контроллеров имеющих до 7 портов ввода-вывода.

Для установки dsPIC Toolbox — библиотеки блоков PIC контроллеров для Matlab/Simulink необходимо [4]:

• Скачать dsPIC Toolbox для требуемой версии Matlab.
• Распаковать zip файл в папке, в которой будут установлены Simulink блоки.
• Запустить Matlab.
• Настроить текущий каталог Matlab на папку с распакованным файлом.
• Открыть и запустить файл install_dsPIC_R2012a.m, например, кнопкой меню или клавишей клавиатуры.

Библиотеки dsPIC и примеры Simulink моделей устанавливаются в текущую папку Matlab (Рис. 12). Установленные блоки для моделирования PIC контроллеров доступны в разделе Embedded Target for Microchip dsPIC библиотеки Simulink (Рис. 13).

Рис. 12. Содержимое текущего каталога после выполнения install_dsPIC_R2012a.m.

Рис. 13. Блоки, установленной библиотеки «Embedded Target for Microchip dsPIC».

Для совместной компиляции Simulink модели средствами Matlab и MPLAB необходимо прописать в переменной окружения path Matlab с высшим приоритетом путь к каталогу MPLAB с файлами MplabOpenModel.m, MplabGetBuildinfo.m и getHardwareConfigs.m:

>> path('c:Program Files (x86)MicrochipMPLAB IDEToolsMATLAB',path) 

Установка Си компилятора MPLAB

Компиляторы MPLAB находятся на сайте Microchip (Download Archive → MPLAB C Compiler for PIC24 and dsPIC DSCs). Для установки демонстрационной версии компилятора С30 необходимо его скачать по ссылке PIC24/dsPIC v3.25 (Рис. 14) и запустить принятый файл mplabc30-v3.25-comboUpgrade.exe.

Рис. 14. Версии Си компилятора (слева) и режимы его установки (справа).

Примечание. Работа выполнена с версией v3.25 компилятора С30 для PIC24/dsPIC. Проверка показала, что следующая версия v3.30 не поддерживает совместную компиляцию моделей Matlab R2012a (dsPIC Toolbox) без ошибок.

Установочный exe файл создаёт в разделе c:Program Files (x86)Microchip новый каталог mplabc30 с файлами:

Рис. 15. Каталоги компилятора C30 MPLAB.

Последовательность Simulink программирования для PIC контроллеров

1. Создайте рабочий каталог и скопируйте в него *.mdl примеры из раздела example (см. Рис. 12).
2. Загрузите Matlab. Настройте его на рабочий каталог.
3. Включите в переменную окружения path Matlab с высшим приоритетом путь к MPLAB — каталогу c:Program Files (x86)MicrochipMPLAB IDEToolsMATLAB:

>> path('c:Program Files (x86)MicrochipMPLAB IDEToolsMATLAB',path) 

Примечание: Использование команды >>path без аргументов приводит к отображению списка путей переменной path в окне команд (Command Window). Удалить путь из переменной path можно командой rmpath, например:

>>rmpath(' c:Program FilesMicrochipMPLAB IDEToolsMATLAB')

4. Создайте Simulink модель для PIC контроллера, используя блоки библиотеки «Embedded Target for Microchip dsPIC» (Рис. 13), или загрузите готовую модель, например, Servo_ADC.mdl.

Тип контроллера, для которого разрабатывается Simulink модель, выбирается из списка в блоке Master > PIC (Рис. 16, Рис. 10), который должен быть включен в состав модели.

Рис. 16. Выбор типа контроллера в блоке Master модели.

5. Проверьте настройки конфигурации модели: Меню → Simulation → Configuration Parameters <Ctrl+E>. В строке ввода System target file раздела Code Generation должен быть указан компилятор S-функций dspic.tlc (Рис. 17). Выбор dspic.tlc настраивает все остальные параметры конфигурации модели, включая шаг и метод интегрирования.

Рис. 17. Выбор компилятора S-функций dspic.tlc для моделей PIC-контроллеров в разделе «основное меню → Simulation → Configuration Parameters → Code Generation».

6. Откомпилируйте модель tmp_Servo_ADC.mdl. Запуск компилятора показан на Рис. 18.

Рис. 18. Запуск компилятора Simulink модели.

В результате успешной компиляции (сообщение: ### Successful completion of build procedure for model: Servo_ADC) в текущем каталоге создаются HEX файл для прошивки PIC контроллера и MCP проект среды MPLAB (Рис. 19).

Рис. 19. Результаты компиляции модели.

Запуск модели в Matlab/Simulink выполняется в окне модели кнопкой, условное время моделирования устанавливается в строке:

Управление компиляцией Simulink моделей из среды MPLAB

Управление компиляцией Simulink модели можно выполнять командами раздела Matlab/Simulink среды MPLAB, например, в следующем порядке.

1. Разработайте модель PIC контроллера в Matlab/Simulink. Сохраните модель.
2. Запустите MPLAB.
3. Выберите MPLAB меню → Tools → Matlab/Simulink и новый раздел появится в составе меню.

4. В разделе Matlab/Simulink откройте Simulink модель, например, Servo_ADC, командой «Matlab/Simulink → Specify Simulink Model Name → Open → File name → Servo_ADC.mdl → Open». Команда Open запускает Matlab и открывает модель.

5. Откомпилируйте модель и создайте MCP проект командами Generate Codes или Generate Codes and Import Files. Перевод MDL модели в MCP проект выполняется TLC компилятором Matlab.
В результате создаётся проект MPLAB:

со скриптами модели на языке Си.

6. Откройте проект: меню → Project → Open → Servo_ADC.mcp (Рис. 20).

Рис. 20. Структура MCP проекта Simulink модели Servo_ADC.mdl в среде MPLAB.
Проект Simulink модели готов для редактирования, отладки и компиляции в машинные коды контроллера средствами MPLAB.

Подключение программатора PIC-KIT3

Узнать какие программаторы записывают бинарный код в конкретный микроконтроллер можно в разделе меню → Configure → Select Device среды MPLAB 8.92. Например, программатор PIC-KIT3 не поддерживает контроллер PIC12C508A (Рис. 21, левый рисунок), но работает с контроллером PIC12F629 (Рис. 21, правый рисунок).

Рис. 21. Перечень программаторов для прошивки микроконтроллера.

Информацию об установленном драйвере программатора PIC-KIT3 можно запросить у менеджера устройств ОС Windows (Рис. 22).

Рис. 22. Информация об установленном драйвере программатора PIC-KIT3.

Схема подключения микроконтроллера PIC12F629 к программатору PIC-KIT3 показана на Рис. 23.

Рис. 23. Схема подключения микроконтроллера PIC12F629 к программатору PIC-KIT3.

Вывод PGM программатора для прошивки контроллеров PIC12F629 не используется. Наличие вывода PGM для разных типов PIC контроллеров показано на Рис. 24. Вывод PGM рекомендуется «притягивать» к общему проводу (GND), через резистор, номиналом 1К [3].

Рис. 24. Выводы PGM PIC контроллеров.

Индикация светодиодов программатора Olimex PIC-KIT3 показана в ниже:

Желтый — Красный — Состояние программатора
Вкл — Выкл — Подключен к USB линии
Вкл — Вкл — Взаимодействие с MPLAB
Мигает — Включен постоянно — Прошивка микроконтроллера

Не следует подключать питание микроконтроллера VDD (Рис. 23) к программатору, если контроллер запитывается от своего источника питания.

При питании микроконтроллера от программатора на линии VDD необходимо установить рабочее напряжение, например, 5В программой MPLAB (Menu → Programmer → Settings → Power), как показано на Рис. 25.

Примечание. При отсутствии напряжения на линии VDD MPLAB IDE выдает сообщение об ошибке: PK3Err0045: You must connect to a target device to use

Рис. 25. Установка напряжения VDD на программаторе PIC-KIT3 программой MPLAB IDE v8.92.

Если программатор не может установить требуемое напряжение, например, 5В при его питании от USB, в которой напряжение меньше 5В, MPLAB IDE выдает сообщение об ошибке: PK3Err0035: Failed to get Device ID. В этом случае, сначала необходимо измерить напряжение программатора — считать его в закладке меню → Programmer → Settings → Status, а затем установить напряжение (не больше измеренного) в закладке меню → Programmer → Settings → Power.

Рис. 26. Измерение (слева) и установка (справа) VDD напряжения программатора PIC-KIT3 программой MPLAB IDE v8.92.

Пример MPLAB сообщения успешного подключения микроконтроллера к программатору по команде меню → Programmer → Reconnect показан на Рис. 27.

Рис. 27. Сообщение MPLAB об успешном подключении микроконтроллера к программатору.

Можно программировать не только отдельный PIC контроллер, но и контроллер, находящийся в составе рабочего устройства. Для программирования PIC контроллера в составе устройства необходимо предусмотреть установку перемычек и токоограничивающих резисторов как показано на Рис. 28 [3].

Рис. 28. Подключение микроконтроллера в составе электронного устройства к программатору.

Заключение

Малоразрядные PIC-контроллеры имеют широкий диапазон питания, низкое потребление и малые габариты. Они программируются на языках низкого уровня. Разработка программ на языке графического программирования Simulink с использованием многочисленных библиотек значительно сокращает время разработки и отладки в сравнении с программированием на уровне ассемблера. Разработанные для PIC-контроллеров Simulink структуры можно использовать и для компьютерного моделирования динамических систем с участием контроллеров. Однако, из-за избыточности кода такой подход применим только для семейств PIC контроллеров с достаточными ресурсами.

Microchip Studio (ранее Atmel Studio и AVR Studio) — основанная на Visual Studio бесплатная проприетарная интегрированная среда разработки (IDE) для разработки приложений для 8- и 32-битных микроконтроллеров семейства AVR и 32-битных микроконтроллеров семейства ARM от компании Atmel, работающая в операционных системах Windows NT/2000/XP/Vista/7/8/10.
Atmel Studio содержит компилятор GNU C/C++ и эмулятор, позволяющий отладить выполнение программы без загрузки в микроконтроллер.

Ранее среда разработки носила название AVR Studio, но начиная с версии 6.0, вышедшей в 2012 году, в неё была добавлена поддержка разработки для микроконтроллеров архитектуры ARM, также выпускаемых фирмой Atmel, и среда разработки получила новое название Atmel Studio. Текущая версия (Atmel Studio 7) поддерживает все выпускаемые на сегодняшний день фирмой Atmel микроконтроллеры архитектур AVR, AVR32 и ARM и средства разработки.

Atmel Studio содержит в себе менеджер проектов, редактор исходного кода, инструменты виртуальной симуляции и внутрисхемной отладки, позволяет писать программы на ассемблере или на C/C++.

История

Ранее существовал и фирменный ассемблер под Windows (wavrasm.exe) от Atmel, который совмещал ассемблер и редактор, подобно тому, как это делается в «больших» языках программирования. Его можно извлечь из первых версий AVR Studio, но он довольно примитивный и неудобный. Затем, видимо, в корпорации решили его не развивать, ограничившись AVR Studio. Скачать AVR Studio можно бесплатно с сайта Atmel. Там же доступны и старые версии (последние версии пакета стали довольно объемными — более 700 Мбайт), но чем старее версия, тем меньше ассортимент поддерживаемых контроллеров (версия 3 поддерживает только Classic).

Характеристики

Характеристики AVR Studio:

  • Интегрированный компилятор C/C++;
  • Интегрированный симулятор;
  • При помощи плагина возможна поддержка компилятора GCC в виде сборки WinAVR;
  • Поддержка инструментов Atmel, совместимых с 8-разрядной AVR архитектурой, в том числе AVR ONE!, JTAGICE mkI, JTAGICE mkII, AVR Dragon, AVRISP, AVR ISPmkII, AVR Butterfly, STK500 и STK600;
  • Поддержка плагина AVR RTOS;
  • Поддержка AT90PWM1 и ATtiny40;
  • Интерфейс командной строки с поддержкой TI.

Литература

  • ATMEL AVR Studio // AVR RISC microcontrollers handbook / by Claus Kühnel. — USA, 1998. — Ch. 4.2. — P. 144—146.

Ссылки

  • Atmel Studio 7.0 на официальном сайте Microchip Technology
  • Руководство по разработке модулей расширений на C# для Visual Studio 2005—2012 и Atmel Studio
Первая часть статьи

Введение
Глава 1. Создание отдельного проекта
Глава 2. Управление платой PICDEM FS USB с компьютера
Глава 3. Управление платой. Переменная состояния
Глава 4. Расчёт секундного интервала для TIMER0
Глава 5. Настройка прерывания от TIMER0
Рекомендуемая литература

Введение

В предыдущей статье обсуждались общие вопросы создания устройства, которое связывается по протоколу USB с компьютером. Микроконтроллер настроен как CDC устройство и компьютер воспринимает его как «виртуальный com-порт». Актуальность проблемы связана с тем, что на современных персональных компьютерах RS-232 больше не устанавливают и как-то нужно выходить из сложившейся ситуации при разработке новых устройств.

В этой статье обсуждается извлечение исходного текста из USB стека MLA для устройства PICDEM FS USB, настройка и использование прерываний от TIMER0 и совместная работа таймера и модуля USB.

Для прочтения этой статьи следует ознакомиться с предыдущей статьёй. Особых знаний о стандарте USB не требуется, необходимо знание базовых конструкций языка СИ и умение работать в Windows. Программы, которые необходимы для работы, можно скачать с сайта www.microchip.com и установить на компьютер:

  • Среда разработки MPLAB X IDE (версия 3.26),
  • Библиотека microchip library application (mla_v2015_08_10),
  • Компилятор языка СИ – XC8 (при написании статьи использована версия 1.36).

Возможно, с сайта www.oracle.com понадобится Java, для установки среды разработки.

Глава 1. Создание отдельного проекта

Представляется целесообразным создать отдельный проект, чтобы исходные тексты программы остались неизменными в качестве резерва. Создаем папку, например, CDC_Standalone. Папку лучше создать там, где MPLAB X IDE создаёт по умолчанию все свои проекты. Открываем проект:
C:microchipmlav2015_08_10appsusbdevicecdc_basicfirmwaresrc
копируем 8 файлов – 4 заголовочных и 4 исходных текста си:
usb_descriptors.c, main.c, app_led_usb_status.c, app_device_cdc_basic.c
usb_config.h, system_config.h, app_led_usb_status.h,
app_device_cdc_basic.h

Затем из папки
C:microchipmlav2015_08_10appsusbdevicecdc_basicfirmwaresrcsystem_configpicdem_fs_usb копируем 4 файла:
fixed_address_memory.h, io_mapping.h, system.h, system.c
В папке C:microchipmlav2015_08_10frameworkusbsrc
находится 3 файла, которые мы тоже скопируем:
usb_device.c, usb_device_cdc.c, также скопируем отсюда файл usb_device_local.h, который не отображается в исходном проекте, но потребуется файлу usb_device.c во время компиляции нашего проекта.

Из папки C:microchipmlav2015_08_10frameworkusbinc
копируем 7 файлов:
usb.h, usb_ch9.h, usb_common.h, usb_device.h, usb_device_cdc.h, usb_hal.h, usb_hal_pic18.h
Из папки C:microchipmlav2015_08_10bsppicdem_fs_usb
копируем оставшиеся семь файлов:
leds.c, buttons.c, adc.c, power.h, leds.h, buttons.h, adc.h
Далее, когда все 29 файлов скопированы в папку CDC_Standalone, создаём новый проект (рис. 1).

Рис. 1. Создание нового проекта.

Выбираем в поле Categories: Microchip Embedded, а в поле Projects:
Standalone Project (рис. 2).

Рис. 2. Выбор типа проекта.

Затем нажимаем кнопку Next> В появившемся окне в поле Family выбираем Advanced 8-bit MCUs (PIC18), микроконтроллер выбираем в поле Device: PIC18F4550 (рис. 3). На следующем шаге в качестве отладчика можно выбрать симулятор (рис. 4). После этого выбираем имеющийся компилятор (рис. 5), на следующем шаге задаём место расположения проекта и выбираем кодировку win1251 для корректного отображения русских символов в комментариях (рис. 6). После того, как параметры проекта заданы, нажимаем кнопку Finish. Убрать другие проекты из окна Project можно, если выделить закрываемый проект, нажав правую кнопку мыши и выбрать Close (рис. 7). Присоединяем к своему проекту заранее подготовленные файлы, которые мы скопировали из MLA. Повторять структуру исходного проекта не обязательно. Файлы с расширением *.h присоединим к папке Hider Files, нажав правой кнопкой мыши и выбрав Add Existing Item (рис. 8). В появившемся окне находим скопированные файлы, которые имеют расширение *.h. Аналогичным образом присоединяем исходные файлы с расширением *.c к проекту, но к папке Source Files.

Рис. 3. Выбор типа микроконтроллера.

Рис. 4. Выбор отладчика.

Рис. 5. Выбор компилятора.

Рис. 6. Задаем параметры проекта.

Рис. 7. Закрытие проекта.

Рис. 8. Прикрепление файла к проекту.

После компиляции возникнут ошибки. Это связано, в основном, с указанием на расположение файлов. Для устранения ошибок нужно щёлкнуть левой кнопкой мыши на описании ошибки в окне Output (рис. 9). После этого появится удобное указание на ошибку (рис. 10). Исправляем строку #include <adc.h> на #include «adc.h», ошибка исчезает. Далее подобным образом исправляем все ошибки, связанные с расположением файлов.

Рис. 9. Ошибка после компиляции.

Рис. 10. Указание на ошибку.

После того, как компиляция удалась, останется большое количество предупреждений. Что легко объяснить, если сравнить уровень предупреждений в нашем проекте и в исходном проекте, который поставляется с библиотекой MLA. Для этого открываем проект, наводим курсор, щёлкаем правой кнопкой мыши выбираем Properties (рис. 12), затем заходим в активный профиль и смотрим настройки компилятора, наведя курсор на строку XC8 compiler и щёлкнув левой кнопкой мыши. В графе Warning Level имеется установка «-3», а в библиотеке MLA «0». Зададим уровень «0» в своём проекте (рис. 11). Конечно, было бы очень хорошо проработать каждое предупреждение, но оставим большое количество предупреждений на совести разработчика. Пока для нас главное, что проект компилируется.

Рис. 11. Настройка “Warning level” компилятора.

Полагаем, что загрузчик уже прошит в плату PICDEM FS USB. Чтобы случайно не испортить загрузчик, хорошо будет сделать следующее: откроем system.c и сделаем предупреждения-напоминания, добавив такой текст:
#warning For compatibility with bootloader set Codeoffset 0x1000 in Additional options of XC8 Linker.
#warning For compatibility with bootloader set ROM ranges: default,-0-FFF,-1006-1007,-1016-1017 in Memory model of XC8 Linker.

Строки предупреждения можно поместить, например, сразу после описания битов конфигурации (#pragma config…). Теперь при каждой компиляции появится предупреждение.

Чтобы проект успешно загрузился и работал с загрузчиком HID Bootloader установим необходимые ограничения по расположению программы в памяти. (см. файл Read me Usage Notes for Bootloader with XC8, расположенный в папке C:microchipmlav2015_08_10appsusbdevice bootloadersfirmwarepic18_non_j также см. [2] – главы 4.8.21 —CODEOFFSET: Offset Program Code to Address и 5.9.2 Changing the Default Interrupt Function Allocation)

Во-первых, смещение для программы. Для этого наведём мышку на папку нашего проекта (папка с изображением микросхемы) и щёлкнем правой кнопкой. В появившемся окне настроек проекта выберем самую нижнюю строку – Properties (рис. 12). Затем выделим строку XC-8 linker, в выпадающем списке Option categories выбираем Additional options, в графу Code offset вписываем адрес 0x1000, с которого будет начинаться программа и нажимаем кнопку Apply (рис. 13).

Во-вторых, в выпадающем списке Option categories выбираем Memory model, в графу ROM ranges помещаем запись default,-0-FFF,-1006-1007,-1016-1017, которая настроит компилятор таким образом, что эти адреса памяти не будут заняты командами из нашей программы и нажимаем кнопку OK (рис. 14).

Откомпилируем программу, теперь она будет работать совместно с загрузчиком, и можно править проект без каких-то опасений, зная, что в случае необходимости проект можно легко восстановить, либо перенести, при необходимости, на другой компьютер без установки всей библиотеки MLA.

Рис. 12. Окно настройки свойств проекта.

Рис. 13. Установка смещения начала программы.

Рис. 14. Установка защиты адресов в памяти программ.

Глава 2. Управление платой PICDEM FS USB с компьютера.

Хотелось бы всё же управлять платой с компьютера. Допустим, включать и выключать светодиоды после того, как компьютер передаст определённые символы. Для работы со светодиодами в составе проекта имеется два файла: leds.c и leds.h. В файле leds.c описывается аппаратное присоединение диодов к микроконтроллеру:
#include <xc.h>

#define LED_D1_LAT LATDbits.LATD0
#define LED_D2_LAT LATDbits.LATD1
#define LED_D3_LAT LATDbits.LATD2
#define LED_D4_LAT LATDbits.LATD3

#define LED_D1_TRIS TRISDbits.TRISD0
#define LED_D2_TRIS TRISDbits.TRISD1
#define LED_D3_TRIS TRISDbits.TRISD2
#define LED_D4_TRIS TRISDbits.TRISD3

#define LED_ON 1
#define LED_OFF 0

#define INPUT 1
#define OUTPUT 0

А в файле leds.h светодиоды описаны следующим образом:
typedef enum
{
LED_NONE,
LED_D1,
LED_D2,
LED_D3,
LED_D4
// D7 = Bus powered — hard wired to power supply
// D8 = Self powered — hard wired to power supply
} LED;

Далее, в файле leds.h имеются прототипы функции для работы со светодиодами, перед каждым прототипом имеется краткое описание, в котором указано название функции, какие действия выполняет, условия для работы функции, входные данные и выходные данные.

Рассмотрим, для примера, описание функции void LED_On(LED led):
Функция: void LED_On(LED led);
Описание: Включение требуемого светодиода LED
Предварительные условия: светодиод LED настраивается функцией LED_Configure()
Входные данные: LED led – светодиод, перечисленный в enum LED в файле leds.h
Выходные данные: нет.

С остальными функциями читателям будет полезно разобраться самим.

На плате PICDEM FS USB имеется четыре светодиода: D1, D2, D3, D4. Светодиод D1 моргает при работе USB. Оставшиеся три диода можно задействовать в своих целях.

Для начала просто включим какой-нибудь из диодов. Пусть это будет D4. Чтобы диод горел, нужно применить функцию
LED_On(LED_D4);
однако, из описания функции мы узнаём, что предварительно светодиод должен быть настроен функцией LED_Configure() хотя в дальнейшем тексте мы встречаем только функцию LED_Enable, конечно же она имелась ввиду.

Помещаем, для начала, эти две функции в файле main.c после строки настройки системы:
SYSTEM_Initialize(SYSTEM_STATE_USB_START);
LED_Enable (LED_D4);
LED_On(LED_D4);

Загрузим программу в микроконтроллер. Если светодиод загорелся и USB работает, значит программа и аппаратура исправны. Аналогично можно проверить диоды D3 и D2. Если проверка прошла успешно, уместно будет спрятать настройку светодиодов внутрь функции SYSTEM_Initialize(). Для этого из файла main.c удалим настройку и включение диода, затем наведём курсор на SYSTEM_Initialize(), щёлкнем правой кнопкой мыши и выберем Navigate> Goto Declaration/Definition (рис. 15).

Рис. 15. Переход к файлу с текстом функции.

После этого откроется файл system.c в окне редактора, курсор будет установлен на функции SYSTEM_Initialize. Внутри конструкции switch в ветке SYSTEM_STATE_USB_START помещаем настройку наших диодов и получаем такой код:

void SYSTEM_Initialize( SYSTEM_STATE state )
{
switch(state)
{
case SYSTEM_STATE_USB_START:
LED_Enable(LED_USB_DEVICE_STATE);
BUTTON_Enable(BUTTON_DEVICE_CDC_BASIC_DEMO);
LED_Off(LED_D4);
LED_Off(LED_D3);
LED_Off(LED_D2);
LED_Enable (LED_D4);
LED_Enable (LED_D3);
LED_Enable (LED_D2);
break;
case SYSTEM_STATE_USB_SUSPEND:
break;
case SYSTEM_STATE_USB_RESUME:
break;
}
}

Теперь сделаем управление диодами, для чего будем анализировать массив данных, которые приходят из USB. Откроем main.c и наведём курсор на функцию APP_DeviceCDCBasicDemoTasks(), опять щёлкнем правой кнопкой мыши и выберем Navigate > Goto Declaration/Definition (рис. 15), и добавим после строки:

if(numBytesRead > 0)
{
/* After processing all of the received data, we need to send out
* the «echo» data now.
*/
строки, которые будут оперировать со светодиодами:
switch (readBuffer[0])
{
case’1′:LED_On(LED_D4);LED_Off(LED_D2);LED_Off(LED_D3);break;
case ‘2’:LED_On(LED_D3);LED_Off(LED_D2);LED_Off(LED_D4);break;
case ‘3’:LED_On(LED_D2);LED_Off(LED_D3);LED_Off(LED_D4);break;
default:LED_Off(LED_D4);LED_Off(LED_D3);LED_Off(LED_D2);break;
}

В этих строках включаются/отключаются светодиоды в зависимости от первого пришедшего по USB символа (ASCII – кода). Откомпилируем программу, загрузим её в микроконтроллер и убедимся в работоспособности – запустим программу dynamic_cdc_demo.exe, передадим символ и проверим реакцию платы. Также убедимся, что есть отклик на нажатие кнопки S2 на плате.

Однако же, при попытке заменить включение/отключение диодов платы на какие-то другие функции могут возникнуть трудности. Поэтому предпочтительнее будет создать переменную состояния системы, которую менять в зависимости от приходящих символов, а уже в зависимости от переменной запускать те или иные функции.

Глава 3. Управление платой. Переменная состояния

Из трёх диодов, которые могут находится в двух состояниях (горит/не горит) получается восемь комбинаций, чтобы задействовать все восемь нужно составить таблицу истинности. Упростим себе задачу, допустим так: получаем число 1 (ASCII код) – загорается диод D4, остальные не горят, получаем число 2 – загорается диод D3, остальные не горят, получаем число -3 – горит диод D2, остальные не горят. Получаем любое другое число (числа) – все диоды гаснут.

Для решения поставленной задачи зададим переменную состояний. В главном цикле будем постоянно её опрашивать и по значению включать или отключать диоды. Всего, по условию задачи, будет четыре состояния:

нулевое – сразу после начала работы, позже, при получении любого символа, кроме 1, или 2, или 3 все диоды отключены.
первое – при получении символа 1 горит только D4,
второе – при получении символа 2 горит только D3,
третье – при получении символа 3 горит только D2.

Поскольку состояний немного, то размер переменной выбираем volatile unsigned char. Префикс volatile нужен, чтобы переменная была всегда доступна из любой части программы, чтобы компилятор в результате оптимизации не внёс беспорядка в нашу программу. Поскольку это глобальная переменная и она определяет работу всей системы, а мы заранее не знаем каким образом нам надо будет изменять состояние системы при модификации программы, в будущем возможно в прерывании. Назовём переменную v_uc_SysState ([4], [5] п. 3.2.2 стр. 28). В файле main.c после строчек #include… добавим строки:

/**VARIABLES*****************************************/
volatile unsigned char v_uc_SysState = 0;
Теперь в файле app_device_cdc_bacic.c в секции VARIABLES добавим строку:
extern unsigned char v_uc_SysState;
чтобы функция APP_DeviceCDCBasicDemoTasks() «знала» о существовании такой внешней переменной. Внутри функции будем менять состояние этой переменной. Для таких манипуляций необходимо передавать внутрь функции адрес переменной состояния системы.

Снабдим функцию APP_DeviceCDCBasicDemoTasks() такой возможностью:
добавим в секции VARIABLES в файле main.c указатель на переменную состояния системы:
volatile unsigned char *us_SysState = &v_uc_SysState;
В файле app_device_cdc_bacic.c функцию перепишем таким образом:
void APP_DeviceCDCBasicDemoTasks(volatile unsigned char *SysState)
не забудем в файле app_device_cdc_bacic.h, подправить объявление функции – в скобках вместо void нужно вставить
volatile unsigned char *SysState

Саму функцию APP_DeviceCDCBasicDemoTasks переделываем. После строки
if(numBytesRead > 0)
{
/* After processing all of the received data, we need to send out
* the «echo» data now.
*/
вставляем такой текст:
if (numBytesRead < 2)
{
switch (readBuffer[0])
{
case ‘1’: *SysState = 1; break;
case ‘2’: *SysState = 2; break;
case ‘3’: *SysState = 3; break;
default: *SysState = 0; break;
}
}
else *SysState = 0;

строка if(numBytesRead > 0) определяет, что символы приняты.
Строка
if (numBytesRead < 2) совместно с else *SysState = 0;
отсекает группы символов. Таким образом фрагмент:
switch (readBuffer[0])
{
case ‘1’: *SysState = 1; break;
case ‘2’: *SysState = 2; break;
case ‘3’: *SysState = 3; break;
default: *SysState = 0; break;
}
работает только при поступлении одиночных символов. При этом все возможные комбинации символов разделяются на четыре случая:
получен символ (ASCII – код) 1, символ 2, символ 3 и все остальные.

При этом в адрес, по которому находится переменная состояния системы записываются обычные числа 0, 1, 2, 3. То есть, переменная состояний системы изменяется в зависимости от полученных по USB ASCII – кодов. После этого нужно менять состояние диодов в зависимости от переменной состояния. Изменяем текст файла main.c следующим образом – после строки:

//Application specific tasks
изменяем функцию APP_DeviceCDCBasicDemoTasks() добавив в скобки переменную состояния, тем самым передавая параметр us_SysState:
APP_DeviceCDCBasicDemoTasks(us_SysState);
А сразу после вызова функции в том же main.c добавляем текст:
switch (v_uc_SysState)
{
case 0:LED_Off(LED_D4);LED_Off(LED_D3);LED_Off(LED_D2);break;
case 1:LED_On(LED_D4);LED_Off(LED_D2);LED_Off(LED_D3);break;
case 2:LED_On(LED_D3);LED_Off(LED_D2);LED_Off(LED_D4);break;
case 3:LED_On(LED_D2);LED_Off(LED_D3);LED_Off(LED_D4);break;
default:LED_Off(LED_D4);LED_Off(LED_D3);LED_Off(LED_D2);break;
}

В этом фрагменте анализируем переменную состояния и реагируем на её изменения.

Компилируем программу, программируем микроконтроллер. После этого всё должно заработать согласно нашему заданию. Вместо диодов можно запускать подпрограммы, которые будут, например, опрашивать датчики и передавать данные на USB.

Глава 4. Расчёт секундного интервала для TIMER0

Рассчитаем секундный интервал нулевого таймера для прерываний.

Откроем файл system.c. Здесь в секции CONFIGURATION Bits заданы следующие биты конфигурации:
#pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board)
#pragma config CPUDIV = OSC1_PLL2

Эти биты конфигурации определяют режим работы тактового генератора микроконтроллера. В документе компилятора языка СИ [2], который расположен в папке компилятора (обычно C:Program FilesMicrochipxc8v1.36docs) в разделе 5.3.5 Configuration Bit Access имеется указание на файл pic18_chipinfo.html, который расположен в той же папке, что и MPLAB XC8 C Compiler User Guide. Откроем файл pic18_chipinfo.html, выберем наш микроконтроллер и посмотрим значение битов конфигурации:
CPUDIV – System Clock Postscaler Selection bits
OSC1_PLL2 [Primary Oscillator Src: /1][96 MHz PLL Src: /2]

В [3] в разделе 2.0 OSCILLATOR CONFIGURATIONS на рис. 2-2 изображены цепи тактового генератора. При указанных выше битах конфигурации CPU микроконтроллера тактируется следующим образом: от кварцевого резонатора поступает частота 20 МГц. Эта частота делится на 5 в предделителе PLL (ФАПЧ), получается 4 МГц. После умножения в блоке PLL до 96 МГц происходит деление на 2 в постделителе PLL. Так на вход CPU подаётся 48 МГц, а поскольку каждый машинный цикл длится четыре такта генератора, то есть возможность подать на вход нулевого таймера сигнал Fosc/4 = 12 МГц.

Для настройки нулевого таймера обратимся к [3] раздел 11.0 TIMER0 MODULE. В управляющем регистре T0CON:
Бит 7 (TMR0ON) установим – это включит нулевой таймер.
Бит 6 (T08BIT) сбросим, это настроит таймер как 16-ти разрядный.
Бит 5 (T0CS) сбросим, выбрав внутренний источник тактового сигнала.
Бит 4 (T0SE) установим, после чего увеличение счётчика будет происходить по нарастанию тактовой частоты.
Бит 3 (PSA) сбросим – это подключит предделитель нулевого таймера.
Биты 2-0 (T0PS2:T0PS0) установим в положение 111, значит тактовая частота поделится на 256.
Получаем такую строку в тексте настройки нулевого таймера:
T0CON = 0b10010111;
Рассчитаем секундный интервал для нулевого таймера:
Частота, поступающая на вход таймера, известна – это Fosc/4 = 12MHz. Поделив на 256 получаем 46,875 КГц. Значит, за секунду будет происходить 46875 колебаний на входе нулевого таймера. Таймер настроен на 16 разрядов – то есть максимальное число до переполнения 65536 (десятичное). Выходит, для секунды нужно записать в регистры Timer0 такое число:
65536 – 46875 = 18661 или 0x48E5.

Это значение запишем в таймер при инициализации. И каждый раз при вызове прерывания будем сбрасывать флаг нулевого таймера, и записывать 0x48E5 в регистры таймера:

INTCONbits.TMR0IF = 0;
TMR0L = 0xE5;
TMR0H = 0x48;

Для настройки прерываний от таймера установим в регистре INTCON бит 6 – GIEL. Если этот бит установлен (GIEL = 1), то разрешены все периферийные прерывания с низким приоритетом (если бит GIEH = 1 и бит IPEN = 1).

После этого установим низкий приоритет для прерывания от нулевого таймера – в регистре INTCON2 сбросим бит TMR0IP.

В регистре INTCON установим бит TMR0IE, что разрешит прерывания от нулевого таймера.

Чтобы каким-то образом увидеть, что таймер работает, будем оперировать с диодом D4.

Получается, что для настройки прерываний от модуля необходима следующая группа команд:
INTCONbits.GIEL = 1;// Enable all Low Priority Interrupt
INTCON2bits.TMR0IP = 0; // 0 – Low/1 -High Priority for TIMER0
INTCONbits.TMR0IE = 1; // Enable timer0 interrupts

В итоге получаем такой текст первоначальной настройки для нулевого таймера:

void Tmr0_Init (void)
{
INTCONbits.GIEL = 1; // Enable all Low Priority Interrupt
INTCON2bits.TMR0IP = 0; // 0 – Low/1 -High Priority for TIMER0
TMR0L = 0xE5;
TMR0H = 0x48;
T0CON = 0b10010111; // Set timer 0
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 1; // Enable timer0 interrupts
}

Текст функции Tmr0_Init вставим в файл system.c, а в файл system.h вставим объявление этой функции:
void Tmr0_Init (void);
В файле main.c добавим вызов функции настройки таймера:
Tmr0_Init ();
перед основным циклом while (1){}

Убедимся, что в функции настройки SYSTEM_Initialize, которая вызывается сразу после запуска программы, есть вызов функции LED_Enable(LED_D4). Функция SYSTEM_Initialize описана в файле system.c.

Откомпилируем текст, убедимся в отсутствии ошибок. Теперь у нас настроен нулевой таймер для работы с интервалом в одну секунду. Перейдём к следующей главе статьи чтобы запустить прерывания от нулевого таймера.

Глава 5. Настройка прерывания от TIMER0

В микроконтроллерах семейства PIC18 реализовано два отдельных вектора прерываний и простая схема приоритетов прерываний. В исходном тексте программы на языке XC8 функция прерывания должна быть написана с квалификатором interrupt. Функция прерывания должна иметь тип void interrupt и не может иметь параметров. Если в исходном тексте программы попадается ключевое слово interrupt, компилятор располагает такую функцию по адресу прерывания и обеспечивает сохранение и восстановление всех необходимых регистров.

По умолчанию в PIC18 функция прерывания имеет высокий приоритет. Чтобы создать функцию прерывания с низким приоритетом (low-priority interrupt function) после квалификатора interrupt добавляют low_priority ([1], [2] – раздел 5.9.1 Writing an Interrupt Service Routine).

Но как понять используются ли прерывания в стеке MLA v2015_08_10 для работы модуля USB? А если используются, то какой приоритет? Для ответа на этот вопрос откроем в среде разработки файл usb_config.h нажмём Ctrl+F, в открывшейся строке поиска наберём USB_INTERRUPT, и найдём нужную строку в файле (рис. 16):

Рис. 16. Поиск строки в файле.

В комментариях к найденной строке обнаруживаем: Выбор режима работы стека USB. Строка #define USB_INTERRUPT включает прерывания для USB.

Каковы же настройки, если включен режим работы с прерываниями? Откроем файл usb_hal_pic18. Найдём фразу:
This section is for all other PIC18 USB microcontrollers

Микроконтроллер PIC18F4550 попадает в раздел «other PIC18 USB microcontrollers». Раздел посвящен обработке прерываний от модуля USB, в нем есть такие строки:
#if defined (USB_INTERRUPT)
#define USBEnableInterrupts() {RCONbits.IPEN = 1;

IPR2bits.USBIP = 1; PIE2bits.USBIE = 1; INTCONbits.GIEH = 1;}

Обратимся к документу на микроконтроллер [3] в разделе прерывания (9.0 INTERRUPTS) можно прочесть следующее:

Приоритет прерываний разрешает бит IPEN в регистре RCON (бит 7). Если IPEN = 1, то приоритет прерываний разрешён. В таком случае глобальные прерывания разрешают двумя битами – GIEH и GIEL. Если бит GIEH в регистре INTCON (бит 7) установлен, то все прерывания с высоким приоритетом разрешены (то есть те прерывания для которых бит high priority установлен). Если бит GIEL в регистре INTCON (бит 6) установлен, то все прерывания с низким приоритетом (low priority) разрешены, то есть все прерывания для которых бит high priority сброшен. Если бит разрешения и соответствующий бит глобального прерывания установлены, то прерывание вызовет переход на адрес 000008h или 000018h, в зависимости от того, какой приоритет установлен битом приоритета. Индивидуальные прерывания могут быть запрещены соответствующими битами.

В нашем случае:

Бит IPEN в регистре RCON установлен в единицу. Это значит, что разрешены приоритеты прерываний. Повторюсь, также в соответствии с [3] – раздел 4.1 RCON Register бит 7 IPEN (Interrupt Priority Enable bit) – бит разрешения приоритета прерываний. Если этот бит = 1, то уровни приоритета прерываний разрешены. Если IPEN = 0, то уровни приоритета прерываний запрещены (режим совместимости с PIC16CXXX), это важно.

Бит USBIP в регистре IPR2 установлен, значит прерывание от модуля USB имеет высокий приоритет.

Бит USBIE в регистре PIE2 установлен, что разрешает прерывание от USB модуля.

Бит GIEH в регистре INTCON установлен, это разрешает, в случае если IPEN = 1, все прерывания с высоким приоритетом.

То есть, настройки такие: прерывания разрешены, приоритеты прерываний разрешены, прерывания от модуля USB разрешены и имеют высокий приоритет.

Как же задействован механизм прерываний?

В файле usb_hal_pic18.h разрешается использование прерываний от модуля USB. Строка
#define USBEnableInterrupts() {RCONbits.IPEN = 1; IPR2bits.USBIP = 1; PIE2bits.USBIE = 1; INTCONbits.GIEH = 1;}

Задаёт макрос настройки прерываний. Далее в файле usb_device.c имеется описание функции USBDeviceAttach, внутри которой вызывается указанный выше макрос. Затем в функции main.c в строках инициализации микроконтроллера вызывается USBDeviceAttach(); Значит, к моменту входа в главный цикл while(1){} у микроконтроллера уже разрешены прерывания, и разрешены приоритеты прерываний.

Откроем файл system.c найдём такие строки:
void interrupt SYS_InterruptHigh(void)
{
#if defined(USB_INTERRUPT)
USBDeviceTasks();
#endif
}
подправим не совсем корректный вызов прерывания из библиотеки MLA; правку производим согласно [1], [2] – раздел 5.9.1 Writing an Interrupt Service Routine и [3] – раздел 9.1 USB Interrupts и раздел 17.5 USB Interrupts. Напишем следующий код:
void interrupt SYS_InterruptHigh(void)
{
if (USBIF && USBIE)
{
USBDeviceTasks();
}
}

Откомпилируем. В случае, если загружаем через bootloader, не забываем установить смещение (рис. 12, 13) Code offset 0x1000, с которого будет начинаться программа. А затем адреса памяти, которые не будут заняты программой (рис. 14) – ROM ranges: default,-0-FFF,-1006-1007,-1016-1017. После компиляции загрузим прошивку в микроконтроллер и убедимся, что программа работает.

Откорректируем прерывание с высоким уровнем приоритета для работу с нулевым таймером. Для этого проделаем следующие операции:

В файле main.c перед главным циклом, то есть перед строкой while(1){} добавим (для демонстрационных целей) настройку высокого уровня приоритета прерываний от нулевого таймера:

INTCON2bits.TMR0IP = 1; // 0 – Low/1 -High Priority for TIMER0

Откроем файл system.c и добавим в текст имеющегося прерывания с высоким уровнем приоритета обработку прерывания от нулевого таймера:
void interrupt SYS_InterruptHigh(void)
{
if (USBIF && USBIE)
{
USBDeviceTasks();
}
else if(TMR0IF && TMR0IE)
{
INTCONbits.TMR0IF = 0;
TMR0L = 0xE5;
TMR0H = 0x48;
LED_Toggle(LED_D4);
}
}

Теперь добавим манипуляции с диодом D4 в переменную состояния: состояние 1 не будет включать или выключать D4; этот диод будет включаться и отключаться нулевым таймером. Для этого в файле main.c переделаем нашу конструкцию switch, убрав в строке case 1: функцию LED_On(LED_D4);
switch (v_uc_SysState)
{
case 0:LED_Off(LED_D4);LED_Off(LED_D3);LED_Off(LED_D2);break;
case 1: LED_Off(LED_D2);LED_Off(LED_D3);break;
case 2:LED_On(LED_D3);LED_Off(LED_D2);LED_Off(LED_D4);break;
case 3:LED_On(LED_D2);LED_Off(LED_D3);LED_Off(LED_D4);break;
default:LED_Off(LED_D4);LED_Off(LED_D3);LED_Off(LED_D2);break;
}

После компиляции загрузим прошивку в микроконтроллер и убедимся, что программа работает: данные передаются по USB, а после передачи на микроконтроллер числа 1 диод моргает раз в секунду.

Однако же не стоит вмешиваться в работу модуля USB – оставим этому модулю прерывание с высоким уровнем приоритета. А поскольку нулевой таймер, настроенный на одну секунду и имеющиеся на плате термодатчик и переменный резистор достаточно медленная аппаратура, то прерывание от нулевого таймера настроим с низким уровнем приоритета (см. [3] – раздел 11, таблица 11-1 бит TMR0IP).

В файле main.c перед главным циклом мы настроили высокий уровень приоритета для прерывания от нулевого таймера:

INTCON2bits.TMR0IP = 1; // 0 – Low/1 -High Priority for TIMER0
удалим эту настройку из исходного текста программы.

Напишем прерывание для нулевого таймера с низким уровнем приоритета.

Для этого откроем файл system.c удалим из прерывания с высоким уровнем приоритета всё что связано с нулевым таймером, оставив строки:
void interrupt SYS_InterruptHigh(void)
{
if (USBIF && USBIE)
{
USBDeviceTasks();
}
}

Напишем обработчик прерывания с низким уровнем приоритета, который будет запускаться по переполнению нулевого таймера. В функции прерывания будем отслеживать бит TMR0IF в регистре INTCON, заполнять таймер на одну секунду, затем переключать диод D4:
void interrupt low_priority Tmr0Isr(void)
{
if(T0IF && T0IE)
{
INTCONbits.T0IF = 0;
TMR0L = 0xE5;
TMR0H = 0x48;
LED_Toggle(LED_D4);
}
}

Вставим этот текст в файл system.c после функции прерывания с высоким уровнем приоритета.

Откомпилируем программу. Перед тем, как прошивать *.hex файл в микроконтроллер откроем файл *.map, который расположен в той же папке, где *.hex и имеет то же самое название. Одна из строк файла *.map будет выглядеть так:

-preset_vec=01000h,intcode=01008h,intcodelo=01018h…

Что говорит нам о следующем: вектор сброса расположен по адресу 0x1000, вектор прерывания с высоким уровнем приоритета расположен по адресу 0x1008, вектор прерывания с низким уровнем приоритета расположен по адресу 0x1018. Это соответствует нашим установкам для XC8 linker и программа будет работать совместно с загрузчиком.

Прошиваем микроконтроллер и убеждаемся в работоспособности программы – должен работать USB (проверяем программой dynamic_cdc_demo), после получения символа ‘1’ раз за секунду будет переключаться светодиод D4.

Рекомендуемая литература.

[1] http://microchip.wikidot.com/faq:31
[2] MPLAB_XC8_C_Compiler_User_Guide.pdf
[3] PIC18F2455/2550/4455/4550 Data Sheet
[4] В. Тимофеев «volatile для «чайников»
[5] В. Тимофеев «Как писать программы без ошибок»
MPLAB_X_IDE_Users_Guide.pdf
PICDEM™ FS USB DEMONSTRATION BOARD USER’S GUIDE
MCHPFSUSB Firmware User`s Guide
MPLAB_XC8_Getting_Started_Guide.pdf
help_mla_usb.pdf

Автор: инженер М. В. Богураев.

После краткого изучения архитектуры и возможностей контроллеров 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

void main( void ) <

return ;

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

Также мы знаем, что контроллеру неохдодимо постоянно находиться в работе. Для этого мы в каждый проект в главную функцию добавляем бесконечный цикл. Добавим и в этот проект

while (1)

Давайте соберём наш проект, нажав соответствующую кнопку в панели инструментов

Проект наш собран. Давайте посмотрим информацию в окне вывода сообщений

Это информация о затраченных и свободных ресурсах различных типов памяти контроллера.

В самом конце информационного сообщения находится путь к файлу прошивки (нажмите на картинку для увеличения изображения)

Убедимся, что файл прошивки там действительно присутствует

Мы видим, что прошивка на месте, также в данной папке присутствует ряд других файлов с отладочной и другой информацией.

Думаю, что на этом мы наш сегодняшний урок закончим. В дальнейшем мы напишем какой-то полезный код в наш проект, попробуем его прошить сначала в протеусе, а затем в настоящий контроллер, собрав соответствующую схему и подключив программатор.

После краткого изучения архитектуры и возможностей контроллеров 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

void main( void ) <

return ;

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

Также мы знаем, что контроллеру неохдодимо постоянно находиться в работе. Для этого мы в каждый проект в главную функцию добавляем бесконечный цикл. Добавим и в этот проект

while (1)

Давайте соберём наш проект, нажав соответствующую кнопку в панели инструментов

Проект наш собран. Давайте посмотрим информацию в окне вывода сообщений

Это информация о затраченных и свободных ресурсах различных типов памяти контроллера.

В самом конце информационного сообщения находится путь к файлу прошивки (нажмите на картинку для увеличения изображения)

Убедимся, что файл прошивки там действительно присутствует

Мы видим, что прошивка на месте, также в данной папке присутствует ряд других файлов с отладочной и другой информацией.

Думаю, что на этом мы наш сегодняшний урок закончим. В дальнейшем мы напишем какой-то полезный код в наш проект, попробуем его прошить сначала в протеусе, а затем в настоящий контроллер, собрав соответствующую схему и подключив программатор.

Важно помнить , что путь к файлам проекта, как и название самих файлов, не должны содержать русских символов. Иначе MPLAB IDE не будет работать, т.к. не увидит файлы с такими названиями. В дальнейшем , что бы у нас не возникало по этому поводу проблем, создадим на диске «С» папку «Project». В этой папке мы и будем хранить наши проекты.

Итак, создаем папку «test_01», так будет называться наш первый проект. Соответственно путь к проекту будет C:Project est_01.

Откроем «блокнот» и сохраним его в созданной папке «test_01» с расширением «asm», назвав то же «test_01»

Далее запускаем программу, должно открыться вот такое окно:

Выбираем вкладку Projekt-> Project Wizard.

Нажимаем кнопку «далее».

Из выпадающего списка выбираем микроконтроллер PIC18F252.

Выбираем язык программирования по умалчиванию (ассемблер) и нажимаем кнопку «далее».

В окне создания проета нажимаем кнопку «Browse», и указываем путь к папке C:Project est_01. Проект назавем то же «test_01» , так же как и папку. Нажимаем кнопку «далее».

Выбираем наш файл (test_01.asm) нажатием кнопки «ADD» или двойным щелчком мышки.

Нажимаем кнопку «Да»

Вот практичеки и все. Осталось выбрать наш файл «test_01.asm » и откроется окно текстового редактора, где мы и будем писать нашу программу.

USB — ��������� USB � ����������������� PicMicro (206 Kb)  —  ������������� ���������������� ���� USB � ����������������� PIC16C745/765 (162 Kb)  —  ����������� ����������� ��� ������ � ����� USB � ����������������� PIC16C745/765 KeeLoq — ���������� «����������» ���� (216 Kb)  —  ���������� KeeLoq � ����������� «���������� ����» ADC — ������ � ������� ��� (161 Kb)  —  ������������ �� ������ � ��� � ����������������� PIC16C7X (291 Kb)  —  ������������� 8 – ���������� ��� � ����������������� PIC16C7X I2C — ���������������� ��������� i2c (192 Kb)  —  ����������� ���������� I2C ���������� (����� ��������) (283 Kb)  —  ������� ����� ���������� I2C SOFT — �������� ������������ ����������� (921 Kb)  —  ����������� ������������ MPASM (2,838 Kb)  —  ����������� ������������ MPLAB IDE CAN — ������ CAN ���������� � ����������������� PicMicro (741 Kb)  —  ������ CAN � ����������������� PIC18CXX8 (258 Kb)  —  �������� � CAN 2.0B ��������� AN — ������� ���������� ����������������� PicMicro (348 Kb)  —  ���������� ����������������� PICmicro ��� ����������� � �������� �� ��������� PPP Reference Manual — ���������� �� �������� ��������� ����������������� PICmicro (248 Kb)  —  ������ 1. ����� �������� (386 Kb)  —  ������ 2. �������� ��������� (353 Kb)  —  ������ 3. ����� (299 Kb)  —  ������ 4. ����������� (200 Kb)  —  ������ 5. ��� � ��� (332 Kb)  —  ������ 6. ����������� ������ (154 Kb)  —  ������ 7. EEPROM ������ ������ (265 Kb)  —  ������ 8. ���������� (460 Kb)  —  ������ 9. ����� �����/������ (183 Kb)  —  ������ 10. ������� ������������ ���� (303 Kb)  —  ������ 11. ������ TMR0 (233 Kb)  —  ������ 12. ������ TMR1 (147 Kb)  —  ������ 13. ������ TMR2 (297 Kb)  —  ������ 14. ������ CCP (622 Kb)  —  ������ 15. ������ SSP (437 Kb)  —  ������ 16. �������� ������ SSP (BSSP) (1,456 Kb)  —  ������ 17. ������ MSSP (536 Kb)  —  ������ 18. ������ USART (185 Kb)  —  ������ 19. �������� �������� ���������� (300 Kb)  —  ������ 20. ������ ������������ (350 Kb)  —  ������ 21. ������ 8 — ���������� ��� (351 Kb)  —  ������ 22. �������� ������ 8 — ���������� ��� (379 Kb)  —  ������ 23. ������ 10 — ���������� ��� (301 Kb)  —  ������ 24. ������ �������������� ��� (593 Kb)  —  ������ 25. ������ LCD (228 Kb)  —  ������ 26. ���������� ������ WDT � ����� ���������������� SLEEP (169 Kb)  —  ������ 27. ���� ������������ (258 Kb)  —  ������ 28. ���������������� ������������� ��������� ���������������� (ICSP) (318 Kb)  —  ������ 29. ������� ������ (604 Kb)  —  ������ 30. ������������� �������������� (849 Kb)  —  ������ 31. �������������� ����������������� (241 Kb)  —  ������ 32. ��������� ������������� (384 Kb)  —  ������ 33. ���������� (179 Kb)  —  ������ 34. ��������� PIC — ������ �������� ��������� �� ��������� ����� ����������������� (1,634 Kb)  —  PIC12C5XX (2,707 Kb)  —  PIC16F62X (3,837 Kb)  —  PIC16F87X (13,060 Kb)  —  ���������� �� ���� ����������������� PIC16 (1,916 Kb)  —  PIC12F6XX (3,030 Kb)  —  PIC18Fxx2 PIC17/PIC18 — �������� ��������� ������������ ������� ����������������� PICmicro �������� ��������� (271 Kb)  —  ������ 10 – ���������� ��� � ����������������� PIC17C7XX (246 Kb)  —  ������ 10 – ���������� ��� � ����������������� PIC18CXX2 (283 Kb)  —  ������������� ���������-����������� ���������������� USART � ����������������� PIC17C4X (334 Kb)  —  TMR0, TMR1, TMR2, TMR3, ���� � �������� ������� � ����������������� PIC17C4X (352 Kb)  —  ����������� ������ ECCP (������/���������/���) � ����������������� PIC18FXX8 Migration — ������������ �� �������� �� ����� ���������������� (126 Kb)  —  ������� � ����������������� PIC16F62X �� PIC16F627A/ PIC16F628A/ PIC16F648A

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

Внешний схемы нашего первого проекта для микроконтроллера PIC16F877A

Поскольку мы используем микроконтроллер PIC16F877A вместе с компилятором XC8, то первым делом желательно изучить даташиты на них. Всегда, когда вы начинаете знакомство с новым микроконтроллером, желательно полностью прочитать даташит на него.

Программу для нашего микроконтроллера PIC16F877A мы будем писать в среде MPLAB-X

Создание нового проекта в MPLAB-X

Шаг 1. Запустите IDE MPLAB-X, в результате чего вы на экране должны увидеть следующее окно.

Главное окно программы MPLAB-X

Шаг 2. Откройте пункт меню Files -> New Project (для этой цели можно также использовать комбинацию клавиш Ctrl+Shift+N). После этого вы на экране увидите следующее всплывающее окно, в котором вам необходимо выбрать Standalone Project и нажать Next.

Создание нового проекта в MPLAB-X

Шаг 3. Теперь необходимо выбрать устройство для нашего проекта – выберем из выпадающего списка PIC16F877A. После этого нажмем на Next.

Выбор типа микроконтроллера в MPLAB-X

Шаг 4. На следующей странице нам необходимо выбрать инструменты (программатор) для нашего проекта. Выберем PicKit 3 и нажмем на Next.

Выбор типа программатора в MPLAB-X

Шаг 5. Затем необходимо выбрать компилятор – выберем XC8 и нажмем на Next.

Выбор типа компилятора в MPLAB-X

Шаг 6. На следующей странице необходимо задать имя нашего проекта и местоположение куда он будет сохраняться. Мы назвали проект Blink. Файл проекта будет сохраняться с расширением .X, что позволяет запускать его непосредственным образом из MAPLB-X. После этого нажмем на Finish.

Задание пути для сохранения проекта в MPLAB-X

Шаг 7. Поздравляем. Теперь наш проект успешно создан. Слева в окне мы увидим имя нашего проекта (у нас оно Blink), нажмите на него чтобы посмотреть все файлы, которые входят в проект.

Чтобы начать написание программы в наш проект необходимо добавить основной файл (C Main file) в каталог с нашим проектом. Для этого сделайте правый клик мыши на source file и в открывшемся меню выберете New -> C Main File как показано на следующем рисунке.

Создание основного файла программы в MPLAB-X

Шаг 8. Откроется диалоговое окно с именем нашего C-файла. Мы назвали его снова Blink, но вы можете выбрать для него любое другое имя по своему усмотрению. После ввода имени файла нажмите на finish.

Задание имени основного файла программы в MPLAB-X

Шаг 9. После того как файл C будет создан, откроется IDE с некоторым кодом в ней по умолчанию, как показано на следующем рисунке.

Код программы по умолчанию в MPLAB-X

Шаг 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 как показано на следующем рисунке.

Открытие окна для настройки битов конфигурации в MPLAB-X

Шаг 2. После этого внизу программы MPLAB-X откроется окно настройки битов конфигурации (Configuration Bits window) как показано на рисунке ниже. В нем вы можете установить значение каждого бита конфигурации по своему желанию. Далее мы рассмотрим установку некоторых из этих бит.

Внешний вид окна для настройки битов конфигурации в MPLAB-X

Шаг 3. Первыми битами конфигурации являются биты выбора генератора. Микроконтроллер PIC16F87XA может работать в одном из 4-х режимов генератора, которые можно установить с помощью битов FOSC1 и FOSC0:

  • LP Low-Power Crystal (маломощный генератор);
  • XT Crystal/Resonator (внешний кварцевый резонатор);
  • HS High-Speed Crystal/Resonator (высокоскоростной кварцевый резонатор);
  • RC Resistor/Capacitor (RC генератор).

Возможные частоты работы микроконтроллера в зависимости от выбранного типа генератора приведены в следующей таблице.

Возможные частоты работы микроконтроллера PIC в зависимости от выбранного типа генератора

Для нашего проекта мы будем использовать внешний кварцевый генератор на 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 включен, то после программирования микроконтроллера никто не сможет перезаписать в нем программу. В нашем случае мы оставим все эти три бита в выключенном состоянии.

После того как все необходимые настройки битов конфигурации сделаны наше диалоговое окно должно выглядеть следующим образом.

Настроенные биты конфигурации микроконтроллера PIC для нашего проекта

Шаг 8. После этого выберите пункт меню Generate Source Code to Output – в результате этого код нашей программы будет сгенерирован, нам необходимо всего лишь скопировать его вместе с заголовочным файлом и вставить его в файл Blink.c как показано на следующем рисунке.

Вставка кода настройки битов конфигурации в основной код нашей программыНа этом настройка битов конфигурации (фьюзов) для нашего проекта будет закончена. Мы будем использовать подобную настройку битов конфигурации для всех проектов на основе микроконтроллеров PIC, которые мы далее рассмотрим на нашем сайте.

Написание программы мигания светодиодом для микроконтроллера PIC

В нашем проекте мы будем подключать светодиод к одному из контактов ввода/вывода микроконтроллера PIC16F877A, с помощью которого мы будем управлять миганием светодиода. Распиновка микроконтроллера 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).

Характеристики портов в микроконтроллере PIC16F877A

Все эти порты являются двунаправленными. Направление работы порта управляется с помощью регистров 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 как показано на следующем рисунке.

Сообщение об успешной компиляции проекта в MPLAB-X

Разработка схемы проекта в Proteus

Если компоновка (Build) нашего проекта была успешной, то нашей IDE в фоновом режиме будет сгенерирован HEX файл, который можно найти внутри каталога DesktopBlinkBlink.Xdistdefaultproduction (каталог может отличаться, если вы в настройках выбрали другой путь сохранения файлов).

Теперь откроем программу Proteus, установленную нами ранее и создадим в ней схему для нашего проекта. Процесс создания схемы проекта в 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.

    }

}

Видео, демонстрирующее работу проекта

Загрузка…

4 563 просмотров

11 января 2022

Александр Русу (г. Одесса)

Компания Microchip создала комплексную экосистему, состоящую из аппаратных и программных средств, позволяющую значительно ускорить процесс разработки, не беспокоясь о совместимости инструментов. Экосистема включает в себя отладочные платы с модулями расширения, интегрированные среды разработки, в том числе построенные на базе облачных технологий, а также опорные проекты, готовые библиотеки и техническую поддержку.

Чтобы быть конкурентоспособными в условиях современного рынка, компаниям-производителям необходимо быстро реализовывать новые идеи и решения, воплощая их в конкретных устройствах и системах. Однако этот процесс напрямую зависит от возможностей и качества аппаратных и программных инструментов, используемых в процессе разработки. Неудачный выбор аппаратной платформы или системы автоматизированного проектирования в лучшем случае может значительно затормозить разработку, а в худшем – из-за ограничений, о которых в начале работы над проектом не думали или просто не знали, даже вернуть ее к самому началу процесса.

Очевидно, что избежать этого можно лишь с помощью правильного выбора инструментов, позволяющих быстро и качественно решать задачи на всех этапах сложного и многоитерационного процесса проектирования, от создания экспериментальных макетов до поддержки и модификации серийно выпускающихся продуктов. В этой статье речь пойдет об инструментальных средствах, разработанных специалистами компании Microchip, комплексно подошедшими к этому вопросу и разработавшими целую экосистему, позволяющую разработчикам электронных устройств больше концентрироваться на реализации собственных уникальных решений и тратить меньше времени на стандартные задачи.

Особенности реализации проектов в области электроники

Реализация любой новой идеи, в том числе и в области электроники, во многом является творческим процессом и требует от разработчиков не только обширных знаний в своей области, но еще и профессиональной интуиции. Перед тем как приступить непосредственно к творчеству – созданию инновационных функций – инженеру-проектировщику вначале необходимо проделать огромное количество рутинных подготовительных операций. Ситуация усугубляется еще и тем, что в электронике новые идеи чаще всего являются комбинацией решений от различных производителей, которые обычно плохо сочетаются друг с другом как на физическом, так и на информационном уровне. Из-за этого разработчикам вначале нужно придумать, как соединить в единую систему не только компоненты с различными интерфейсами и форм-факторами, но и инструментальное программное обеспечение, используемое для работы с этими узлами.

Большинство проектов в области электроники проходит через несколько ключевых этапов, на каждом из которых могут возникнуть сложности, порой приводящие к тому, что работу придется начинать чуть ли не с самого начала. На первом этапе обычно создается макет, обеспечивающий те уникальные функции будущего устройства, ради которых этот проект и создавался. Этот этап характеризуется огромным количеством экспериментов, в том числе и с новой элементной базой и программными модулями, поведение которых из-за неизбежных ошибок может быть абсолютно непредсказуемым. Очевидно, что для ускорения создания макета лучше всего максимально использовать стандартное лабораторное оборудование и различные заготовки, что позволит как уменьшить количество возможных технических ошибок, так и сократить время на реализацию стандартных задач.

Следующим шагом работы над проектом является создание прототипа, максимально приближенного к серийно выпускаемому изделию. На этом этапе может потребоваться совершенной иной набор инструментов для разработки и тестирования устройства, ведь испытательные стенды или программное обеспечение для настройки могут быть уникальными. А это означает, что потребуются дополнительные затраты как времени, так и средств на разработку, в том числе и из-за неизбежного расширения команды специалистов, новым членам которой также необходимо время для ознакомления с существующими наработками. Также на этой стадии проекта вполне вероятен откат к самому началу работы, ведь элементы, использованные в макете, могут быть недоступны в количествах, необходимых для серийного производства, или их возможностей будет недостаточно для реализации всех функций конечного устройства.

Доработки проекта, в том числе и возврат к этапу макетирования, также возможны и на этапе тестирования опытной партии продукта. Это может произойти, например, из-за того, что устройство не соответствует заявленным характеристикам или из-за необходимости добавления новой функциональности, потребность в которой на начальных этапах проектирования была неочевидна. На этом этапе очень важна обратная связь с потребителями, осуществляющими тестирование опытных образцов, ведь их замечания могут оказаться критически важными для коммерческого успеха проекта.

Не является исключением и этап серийного производства оборудования. Наличие ошибок, не замеченных на ранних этапах, или необходимость в расширении функциональности, например, для поддержки нового типа внешних датчиков, могут потребовать вмешательства в уже отлаженный процесс производства для модифицирования как электронной, так и программной частей уже готового изделия. Кроме этого, при удачном стечении обстоятельств, возможно, потребуется расширение линейки выпускаемой продукции и разработки похожего устройства, но уже с другим набором технических характеристик и поддерживаемых функций.

Таким образом, потребность в изменениях может возникнуть на всех этапах существования проекта, поэтому удачный выбор инструментов, обеспечивающих комплексный подход к проектированию с эффективной поддержкой командной работы, является немаловажным условием его коммерческого успеха. В противном случае даже самая незначительная модификация, например, изменение константы в программном коде, может потребовать значительных затрат времени и средств на ее реализацию. Не следует забывать также и о возможности повторного использования наработок в других проектах, поскольку в условиях жесткой конкуренции и хронической нехватки времени это также может оказать решающую роль в успешности конечного продукта.

Аппаратная платформа Microchip

В настоящее время одно и то же устройство можно успешно реализовать на совершенно разных платформах, поэтому при выборе аппаратной платформы важны не только ее технические характеристики, но и возможность быстрой модификации уже готового макета. Поэтому неудивительно, что инженеры-проектировщики тратят достаточно много времени на сравнительную оценку существующих аппаратных и программных платформ с целью найти решение, максимально подходящее для реализации поставленной задачи. Поскольку найти полностью готовый комплекс взаимно совместимых аксессуаров и периферийных устройств достаточно сложно, то на практике приходится тратить немало времени на сопряжение отладочных плат и программных модулей разных производителей, а в некоторых случаях – изготавливать их самостоятельно. В связи с этим переход на комплексную экосистему компании Microchip позволяет значительно облегчить и ускорить этот этап проекта.

В качестве аппаратной основы для макетов небольших устройств можно использовать недорогие и простые в изучении отладочные платы Curiosity Development Boards (рисунок 1), к которым можно без каких-либо переходников подключить любую из сотен плат расширения Click Boards (рисунок 2), производимых одним из многочисленных партнеров Microchip – компанией MikroElektronika. Это позволит буквально за считанные минуты добавить в разрабатываемое устройство нужный функционал и протестировать его в процессе работы.

Рис. 1. Пример платы Curiosity Development Boards

Рис. 1. Пример платы Curiosity Development Boards

Рис. 2. Пример плат расширения Click Boards производства компании MikroElektronika: а) OLED C click; б) THUMBSTICK click

Рис. 2. Пример плат расширения Click Boards производства компании MikroElektronika: а) OLED C click; б) THUMBSTICK click

Для более сложных проектов лучше использовать отладочные платы серии Explorer Development Boards (рисунок 3), отличительной особенностью которых является возможность смены микроконтроллера путем установки в соответствующий разъем платы с уже распаянной необходимой микросхемой (Plug-in Module, PIM). На платах Explorer Development Boards установлен набор стандартных устройств, необходимых для разработки и отладки программного обеспечения микроконтроллера, в том числе программатор-отладчик, стабилизаторы напряжения питания, а также узлы, часто используемые во многих приложениях: кнопки, потенциометры, светодиодные индикаторы, жидкокристаллические дисплеи и наиболее распространенные интерфейсы (RS-232, USB и прочие). Специализированные функции в проекты на основе Explorer Development Boards можно добавить, установив в соответствующие разъемы модули Click Boards или дочерние платы PICtail Plus Daughter Boards (рисунок 4). Если же число необходимых периферийных модулей превышает количество штатных разъемов плат Explorer Development Boards, можно воспользоваться специализированными платами PICtail Plus Expansion Board, позволяющими в один разъем отладочной платы установить несколько плат расширения.

Рис. 3. Отладочная плата EXPLORER 16/32 Development Board (слева) и модуль PIM с предустановленным микроконтроллером (справа)

Рис. 3. Отладочная плата EXPLORER 16/32 Development Board (слева) и модуль PIM с предустановленным микроконтроллером (справа)

Рис. 4. Пример дочерней платы PICtail Plus Daughter Boards (слева) и плата расширения PICtail Plus Expansion Board (справа)

Рис. 4. Пример дочерней платы PICtail Plus Daughter Boards (слева) и плата расширения PICtail Plus Expansion Board (справа)

Для проектов на основе микросхем с ядром AVR или SAM-микроконтроллеров можно использовать специализированные отладочные платы Xplained (рисунок 5), которые могут быть как универсальными, то есть содержащими только микросхемы с минимальным набором внешних компонентов, так и специально разработанными для конкретной прикладной задачи.

Рис. 5. Внешний вид плат Xplained

Рис. 5. Внешний вид плат Xplained

Опорные проекты и демонстрационные платы

Для привлечения финансирования к проекту очень часто необходимо показать инвесторам уже работающее изделие. Однако если для разработчика это направление является новым и он не имеет собственных наработок в этой области, то процесс создания первого макета устройства с нуля может значительно затянуться из-за необходимости реализации достаточно большого количества узлов, обеспечивающих минимальный функционал. Но если внимательно проанализировать любые новые проекты, то окажется, что они содержат множество известных решений, большинство из которых на момент начала разработки уже перешло в разряд стандартных. Поэтому чтобы не изобретать велосипед, повторяя проектирование уже известных узлов, проще и быстрее создать макет на основе наборов или заготовок, специализированных под конкретную прикладную задачу. В этом случае также следует обратить внимание на экосистему компании Microchip, содержащую большое количество опорных проектов и демонстрационных плат, ориентированных на реализацию конкретных прикладных задач, которые физически и программно совместимы с аппаратной платформой Microchip, рассмотренной выше.

Ключевой особенностью такого подхода является использование заготовок, которые не только адаптированы под нужную задачу, но еще и прошли необходимое тестирование, значительно уменьшающее вероятность существования ошибок как в аппаратной, так и в программной части. Типовыми примерами опорных проектов компании Microchip являются набор для разработки солнечных микроинверторов и демонстрационная плата для создания ингаляторов (рисунок 6), содержащие печатные платы с уже установленными компонентами и загруженным программным обеспечением (прошивкой). Они сконфигурированы для работы в некоторых стандартных режимах, что позволяет их запустить буквально за считанные минуты. В комплекте с платами в обязательном порядке прилагается подробная техническая документация, исходный код прошивки, а также инструментальное программное обеспечение для настройки и тестирования прибора. Таким образом, использование опорных проектов и демонстрационных плат позволяет разработчику оперативно проверить свою уникальную идею и создать макет, а иногда и прототип будущего прибора без привлечения значительных инвестиций.

Рис. 6. а) опорный проект Microchip для разработки солнечного инвертора Grid-Connected Solar Microinverter Reference Design; б) демонстрационная плата ингалятора Vibrating Mesh Nebulizer Demonstration Board

Рис. 6. а) опорный проект Microchip для разработки солнечного инвертора Grid-Connected Solar Microinverter Reference Design; б) демонстрационная плата ингалятора Vibrating Mesh Nebulizer Demonstration Board

На момент написания статьи компания Microchip предлагает несколько сотен опорных проектов и демонстрационных плат, сгруппированных по почти 50-ти самым современным категориям приложений, начиная от систем управления двигателями и заканчивая узлами для создания интерфейсов с сенсорным управлением. Все предлагаемые платы и наборы совместимы с остальными элементами экосистемы Microchip и поставляются с исходными кодами программного обеспечения, что позволяет быстро адаптировать программную часть проекта под конкретную задачу. Следует отметить, что компания Microchip предлагает на только готовые узкоспециализированные решения, ориентированные на использование в макетах и прототипах, но и заготовки, предназначенные для общего ознакомления с популярными технологиями. Например, для изучения принципов управления бесколлекторными электродвигателями можно использовать платы из комплекта BLDC High Voltage Motor Control Kit, а для ознакомления с технологией цифрового управления электропитанием – стартовый набор Digital Power Starter Kit (рисунок 7).

Рис. 7. Стартовый набор для изучения технологии цифрового управления питанием Digital Power Starter Kit

Рис. 7. Стартовый набор для изучения технологии цифрового управления питанием Digital Power Starter Kit

Платформа для создания программного обеспечения

В настоящее время микроконтроллеры используются почти в каждом серьезном проекте, поэтому правильный подбор инструментов для разработки их программного обеспечения является не менее важным, чем правильный выбор аппаратной платформы. Очевидно, что аппаратная и программная платформы должны быть совместимы, причем не только между собой внутри проекта, но и со всеми вспомогательными инструментами, используемыми при разработке и серийном производстве. В связи с этим компания Microchip, наряду с богатым выбором готовых аппаратных модулей, предлагает также и целый комплекс программного обеспечения, предназначенного для создания прошивки, в том числе и заготовок исходного кода, позволяющих реализовать большинство наиболее распространенных задач.

Отличительной особенностью всех программных инструментов экосистемы Microchip является использование интуитивно понятного графического интерфейса, который можно легко освоить в кратчайшие сроки. Как правило, все предлагаемые программные инструменты поддерживают широкий спектр продуктов компании Microchip и укомплектованы всеми элементами, необходимыми для работы, например, компиляторами, API-интерфейсами и оптимизаторами ассемблерного кода.

Базовой средой для создания программного обеспечения для микроконтроллеров Microchip является полнофункциональная интегрированная среда разработки MPLAB X (рисунок 8), созданная на основе свободно распространяемой платформы с открытым исходным кодом NetBeans, разработанной компанией Apache Software Foundation. Использование платформы NetBeans позволило значительно расширить функциональность среды разработки за счет использования встроенных дополнительных возможностей, в число которых входит система управления версиями, поддержка плагинов, написанных сторонними разработчиками, и многое другое.

Рис. 8. Рабочее окно IDE MPLAB X

Рис. 8. Рабочее окно IDE MPLAB X

Интегрированная среда разработки (Integrated Development Environment, IDE) MPLAB X предназначена для использования на персональных компьютерах, работающих под управлением операционных систем Windows, Mac OS и Linux, и поддерживает все модели микроконтроллеров с ядрами PIC и dsPIC, последние из которых специализированы для цифровой обработки сигналов (Digital Signal Controllers, DSC). Кроме этого, с помощью IDE MPLAB X можно разрабатывать программное обеспечение для большого количества микроконтроллеров на основе ядер AVR и SAM.

Для поддержки распределенных коллективов разработчиков наилучшим образом подходит бесплатная IDE MPLAB Xpress (рисунок 9), основанная на облачных технологиях. Ключевым преимуществом платформы MPLAB Xpress является возможность доступа к проекту из любой точки земного шара без необходимости использования специализированных программ или какой-либо специфической операционной системы. Кроме этого, в общем для всех пользователей репозитории могут размещаться проекты и модули других программистов, что позволяет обмениваться наработками как различных компаний, так и индивидуальных разработчиков.

В IDE MPLAB Xpress реализовано большинство наиболее популярных функций, существующих в MPLAB X. Она также актуальна для работы с большинством микроконтроллеров, поддерживаемых базовой IDE, что позволяет быстро мигрировать между этими двумя системами. В перечень аппаратных средств, поддерживаемых MPLAB Xpress, входят специально разработанные для этой платформы платы MPLAB Xpress Evaluation Boards, достаточно большое количество плат Curiosity Development Boards, последние версии плат Explorer Development Boards (Explorer 16/32 Board), а также популярный программатор-отладчик PICkit 4.

Благодаря доступности большого количества готовых проектов и примеров исходного кода, а также возможности подключить к проекту программистов, расположенных в любой точке земного шара, IDE MPLAB Xpress является идеальной средой для начинающих специалистов, которые делают только первые шаги в освоении искусства создания программного обеспечения для микроконтроллеров (рисунок 9).

Рис. 9. Рабочее окно MPLAB Xpress

Рис. 9. Рабочее окно MPLAB Xpress

Одной из сложностей написания программного обеспечения для микроконтроллеров, отнимающей достаточно большое количество времени, является настройка их аппаратных узлов, требующая скрупулезного изучения технической документации. Для решения этой проблемы компания Microchip разработала бесплатный графический конфигуратор MPLAB Code Configurator (MCC), который можно интегрировать в IDE MPLAB X и MPLAB Xpress (рисунок 10). С помощью этого инструмента можно за несколько минут в графическом режиме сконфигурировать нужным образом аппаратную часть достаточно большого количества как микроконтроллеров производства Microchip, так и плат расширения Click boards производства MikroElektronica, что позволяет получить готовый к использованию конфигурационный код на языке С, который остается только скопировать в нужный проект.

Рис. 10. Главное окно программы MPLAB Code Configurator

Рис. 10. Главное окно программы MPLAB Code Configurator

Для сложных проектов на основе 32-разрядных микроконтроллеров с ядрами PIC и SAM наилучшим образом подходит специализированный фреймворк MPLAB Harmony (рисунок 11), ключевой особенностью которого является исключительная гибкость за счет возможности интеграции сторонних программных модулей, в том числе и операционных систем реального времени (Real-time Operating System, RTOS). Использование MPLAB Harmony позволяет максимально использовать все возможности объектно-ориентированного программирования, что, в совокупности с наличием редактора WYSIWYG и графического конфигуратора MPLAB Harmony Graphics Suite (MHGS), позволяет значительно сократить время на разработку приложений подобного уровня.

Рис. 11. Главное окно фреймворка MPLAB Harmony

Рис. 11. Главное окно фреймворка MPLAB Harmony

При создании проектов, критичных к скорости выполнения или размеру программного кода, рекомендуется использовать специализированные компиляторы MPLAB XC Compilers, поддерживающие все 8-разрядные микроконтроллеры PIC и AVR (версия XC8), все 16-разрядные микросхемы PIC и dsPIC (версия XC16), а также все 32-разрядные системы PIC и SAM (версия XC32). Использование компиляторов MPLAB XC Compilers даже по бесплатной лицензии позволяет ощутимо повысить скорость выполнения ассемблерного кода и уменьшить его размер, однако наибольшего эффекта можно достичь при покупке лицензии PRO. При этом следует учесть, что срок действия лицензии PRO равен всего одному месяцу, что позволяет активировать ее лишь на то время, когда она действительно необходима, например, на заключительных этапах проекта. Это дает возможность сократить расходы на разработку за счет исключения необходимости приобретать более долгосрочные лицензии для программных инструментов, которые большую часть времени использоваться не будут.

Для создания программного обеспечения микроконтроллеров на основе ядер AVR и SAM наилучшим образом подходит специализированная платформа Atmel Studio (рисунок 12), интегрированная с онлайн-магазином Atmel Gallery, в котором доступно огромное количество дополнительных модулей и готовых проектов, разработанных как компанией Microchip, так и сторонними разработчиками. Для работы с этими микроконтроллерами также предназначен бесплатный веб-инструмент Atmel START (рисунок 13), с помощью которого можно оперативно ознакомиться со всеми возможностями микроконтроллеров Atmel, а также получить информацию о наличии драйверов, библиотек исходного кода, доступных сред разработки и других инструментов, необходимых для работы с данными микроконтроллерами.

Рис. 12. Главное окно IDE Atmel Studio

Рис. 12. Главное окно IDE Atmel Studio

Рис. 13. Главное окно конфигуратора Atmel START

Рис. 13. Главное окно конфигуратора Atmel START

Библиотеки примеров исходного кода

На разработку качественного программного кода может уйти намного больше времени, чем на разработку и сборку аппаратной части устройства, поэтому компания Microchip не могла оставить без внимания и эту стадию разработки проекта. На сегодняшний день в онлайн-библиотеках компании Microchip содержится огромное количество программных модулей, разработанных и протестированных профессиональными программистами. Примерами таких ресурсов являются библиотека для разработки приложений, использующих протоколы TCP/IP (MPLAB Harmony TCP/IP Stack) и библиотека для создания USB-устройств (MCC USB Stack). Библиотека MPLAB Harmony TCP/IP Stack может стать прекрасной основой для приложений, подключаемых к локальным вычислительным сетям, поскольку она содержит уже готовые реализации многих стандартных функций, интерфейсов и протоколов, например, HTTP, SMTP, SNMP, Telnet, TFTP и многих других, а библиотека MCC USB Stack содержит уже готовые программные модули для реализации USB-устройств различных типов и классов, которые можно легко интегрировать с RTOS.

Поддержка разработчиков на всех этапах проектирования

Устранение ошибок является неотъемлемой частью любого этапа проектирования, и в этом процессе очень важно оперативно найти нужный документ, с помощью которого можно разобраться в проблеме. Однако даже при наличии нужной технической документации нередки случаи, когда информации, содержащейся в ней, оказывается недостаточно для понимания механизмов работы того или иного узла, а служба технической поддержки по тем или иным причинам оказывается недоступна. Таким образом, наличие качественной технической поддержки со стороны производителей элементной базы и программных модулей позволяет значительно ускорить процесс создания конечного продукта.

Для решения этой проблемы в интегрированных средах разработки от компании Microchip непосредственно в меню и других элементах интерфейса встроены ссылки на интернет-ресурсы с полезной информацией по данному вопросу. При этом ссылки могут быть связаны как со страницами, содержащими техническую документацию, так и со специализированными ветками форума, где можно и ознакомиться с уже существующей дискуссией, и задать вопрос другим пользователям и специалистам компании Microchip, постоянно присутствующим на форуме. Все это в конечном итоге позволит значительно сократить время на поиск ошибок и свести к минимуму, а то и полностью исключить количество бессонных ночей, проводимых разработчиками, постоянно находящимися в состоянии хронической нехватки времени.

Удобный инструмент для скорейшего выхода на рынок

Как и конечные потребители, разработчики электроники при выборе аппаратной и программной основы для своих проектов отдают предпочтение поставщикам, предоставляющим решения с наиболее широким перечнем функциональных возможностей, максимальным уровнем гибкости и оперативной технической поддержкой. Именно поэтому экосистема Microchip, позволяющая эффективно решать вопросы, возникающие на всех этапах проектирования, является одной из наиболее распространенных аппаратно-программных платформ, используемых при создании широкого спектра устройств, от простейших систем домашней автоматизации и до сложных автоматизированных систем с элементами искусственного интеллекта. И это вполне обосновано, ведь в наше время коммерческим успехом любого проекта является не только использование качественной элементной базы, но и возможность ее оперативного внедрения в конечный продукт, что при низком уровне интеграции или недостаточной технической поддержке будет весьма затруднительно. Экосистема разработки от компании Microchip создана для упрощения работы инженера-разработчика и успешно справляется с сокращением выхода на рынок ваших проектов.

•••

После краткого изучения архитектуры и возможностей контроллеров PIC пришло время нам попробовать себя в программировании данных контроллеров, так как без программы микроконтроллер — это бесполезная микросхема.

Только чтобы попробовать себя в программировании, обычно требуется какая-то среда программирования (не в блокноте же мы будем писать код), а также компилятор. Для этого у компании Microchip есть бесплатный IDE — это MPLAB X IDE. Давайте её для начала скачаем. Для этого идём на официальный сайт Microchip и идём по пунктам меню DESIGN SUPPORT -> Development Tools -> Software Tools For PIC® MCUs And DsPIC® DSCs -> MPLAB® X IDE

Image00

И попадаем на следующую страницу, в которой выбираем закладку Downloads, в которой скачаем последнюю версию среды разработки (нажмите на картинку для увеличения изображения)

Image02_0500

Установим среду

Image03  Image04

Путь оставим предложенный по умолчанию, если у нас нет Proxy, то отключим их

Image05

Далее тоже оставим всё по умолчанию

Image06 Image07

И программа установится на наш компьютер

Image08

Отключаем все галки и жмём Finish

Image09

Эти галки гласят о том, что у нас не установлен компилятор, также советуют установить фреймворк для удобства разработки. Всё это мы проделаем самостоятельно потом. Компилятор в среде уже есть, правда только для ассемблера. Но, так как мы решили писать на C, то компилятор нам всё-таки скачать и установить придётся, но чуть позже.

Попробуем запустить нашу среду разработки, чтобы хотя бы убедиться, что всё у нас нормально установилось. И, не создавая никаких проектов, закроем её.

Теперь, соответственно, чтобы нам писать код на C, потребуется компилятор. Компиляторы для контроллеров разной битности (8, 16 и 32) отдельные.

На официальном сайт Microchip проследуем по пунктам меню DESIGN SUPPORT -> Development Tools -> Software Tools For PIC® MCUs And DsPIC® DSCs -> MPLAB® XC Compilers

Image10

На открывшейся странице перейдём по закладке Downloads и скачаем последнюю версию 8-битного компилятора (XC 8) (нажмите на картинку для увеличения изображения)

Image11_0500

Установим компилятор

Image12  Image14  Image13

Путь оставляем по умолчанию

Image15

Включим все галочки

Image16 Image17

Начнётся установка

Image18

После установки жмём Next, никакой ID не запоминаем, нам профессиональная лицензия не нужна, воспользуемся свободно-распространяемой. На сайте можно почитать об ограничениях свободной лицензии. Они очень незначительны

Image19 Image20

Ещё раз запустим среду программирования MPLAB X IDE. Закроем там стартовое окно и перейдём на вкладку Projects

Image21

Как видим, у нас тут пусто. Исправим эту ситуацию, создав новый проэкт. Для этого выберем пунк меню File -> New Project…

Image22

Выбираем Standalone Project и идём далее

Image23

Выберем из выпадающего списка наш контроллер, отфильтровав выше для удобства по семейству

Image24

Выбираем Sinulator, так как пока мы отлаживать проект будем именно в нём. Да и мой контроллер PICkit 2 неоригинальный не поддерживается данной средой. А загружить созданную нами впоследствии прошивку мы будем спомощью специальной программы

Image25

В следующем окне выбираем наш компилятор и идём далее

Image26

В следующем окне назовём наш первый проект BLINK01, выберем папку для его хранения и оставим галку напротив того, чтобы наш проект стал главным и заетм жмём Finish

Image27

Проект появится в дереве проектов.

Создадим в нём файл main.c, выбрав соответствующий пункт контекстного меню в папке Source Files

Image28

В открывшемся окне исправим имя файла, чтобы он был именно main.c ибо нам так как-то привычнее и нажмём Finish

Image29

Файл откроется самостоятельно. В нём будет уже некоторый код

#include <xc.h>

void main(void) {

return;

}

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

Также мы знаем, что контроллеру неохдодимо постоянно находиться в работе. Для этого мы в каждый проект в главную функцию добавляем бесконечный цикл. Добавим и в этот проект

void main(void) {

  while (1)

  {

  }

  return;

Давайте соберём наш проект, нажав соответствующую кнопку в панели инструментов

Image30

Проект наш собран. Давайте посмотрим информацию в окне вывода сообщений

Image31

Это информация о затраченных и свободных ресурсах различных типов памяти контроллера.

В самом конце информационного сообщения находится путь к файлу прошивки  (нажмите на картинку для увеличения изображения)

Image32_0500

Убедимся, что файл прошивки там действительно присутствует

Image34

Мы видим, что прошивка на месте, также в данной папке присутствует ряд других файлов с отладочной и другой информацией.

Думаю, что на этом мы наш сегодняшний урок закончим. В дальнейшем мы напишем какой-то полезный код в наш проект, попробуем его прошить сначала в протеусе, а затем в настоящий контроллер, собрав соответствующую схему и подключив программатор.

Предыдущий урок Программирование МК PIC Следующий урок

PIC Первый проект в MPLAB X IDE


Post Views:
5 163

Понравилась статья? Поделить с друзьями:
  • Точечная сварка из микроволновки своими руками видео пошаговая инструкция
  • Машинка для маникюра nail master инструкция
  • Mythic oil loreal инструкция по применению
  • Лактазар инструкция для новорожденных при смешанном вскармливании
  • Ринза таблетки инструкция по применению взрослым для лечения орви