Как научиться программировать микроконтроллеры pic


Программирование микроконтроллеров PIC. Часть 1. Необходимые инструменты и программы. Основы MPLAB

Итак, вы решили научиться программировать pic-контроллеры. Для начала поговорим о том, что вам для работы с этими контроллерами понадобится.

Контроллер работает по определённой программе, которая должна как-то в него попасть. Обычно программу в машинных кодах, готовую для записи в контроллер, называют прошивкой. Следовательно нужно какое-то устройство, которое будет записывать (на сленге обычно говорят заливать или прошивать) программу в контроллер. Такое устройство называется программатор. Подробнее о программаторах и заливке программы мы поговорим позднее, в последней части нашей эпопеи (когда уже будет что заливать), а пока давайте по-порядку — как нам эту программу написать.

Программа для контроллера — это, как я уже сказал, набор машинных кодов, записанный в файле с расширением «hex» (здесь можно почитать про формат *.hex), который и нужно заливать в контроллер с помощью программатора. Никакого другого языка контроллер не понимает. Следовательно, нужна специальная программа, которая будет переводить текст программы, написанный на каком-либо языке программирования, в машинные коды. Наиболее удобными в этом плане являются интегрированные среды разработки (IDE — integrated development environment), поскольку они могут не только осуществлять перевод текста программы в машинный код, но и производить симуляцию её работы. Причём симуляцию можно проводить пошагово, при этом можно наблюдать состояние регистров или даже менять их состояние по своему желанию. Короче, интегрированные среды помимо, собственно, компиляции (перевода в машинные коды) предоставляют отличные возможности для отладки программы.

IDE, как и программаторов, существует много. Лично я пользуюсь MPLAB и вам рекомендую, по той простой причине, что MPLAB — это IDE от самого производителя PIC-контроллеров — фирмы Microchip, поэтому имеет отличную поддержку (в том числе на русском языке, что особенно приятно). С официального сайта Microchip можно скачать и сам этот пакет, и подробное описание по работе с ним. Если не нашли или ломает искать — ссылки для скачивания здесь, правда это уже не самая свежая версия.

В описании на русском языке про всё рассказано: от установки и настройки до удаления. В большинстве случаев вся установка заключается в том, чтобы запустить setup и ответить на пару вопросов, типа куда ставить драйверы и тому подобное, от себя лишь добавлю, что во избежание глюков ставить пакет надо в такую папку, чтобы в пути были только английские буквы (а не в какую-нибудь, типа C:\Программы\PIC\MPLAB). Вообще, кириллицу в путях к файлам или в названиях файлов лучше не использовать, иначе возможны глюки.

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

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

Программа на языке СИ (да и вообще на любом языке высокого уровня) — это уже набор команд не контроллера, а соответствующего языка. При компиляции каждая такая команда заменяется набором команд для контроллера, но каким именно набором команд она заменяется, — этого вы уже не знаете, это знает только разработчик языка программирования. Соответственно, невозможно понять, каким именно образом контроллер выполняет желаемое действие.

Короче говоря, в случае с языком высокого уровня вы изучаете как какой-то дядя обозвал свои способы реализации необходимых вам функций и по каким правилам их надо записывать. В данном случае можно провести следующую аналогию: вы хотите поговорить с китайцем, но вам говорят: "Китайский слишком сложный язык, но есть один дядя в Болгарии, который 20 лет жил в Китае и отлично его выучил. А болгарский язык с русским очень похожи и русскому человеку он интуитивно понятен, так что выучите болгарский, а уж дядя переведёт."

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

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

Что нужно сделать в MPLAB, чтобы получить желанную прошивку? Как я уже сказал — подробности читайте в руководстве к IDE MPLAB, оно на русском и там всё понятно (если не понятно — идём на форум), я же только кратко перечислю самое основное и дам некоторые рекомендации.

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

Сначала нужно создать проект. Для каждого проекта рекомендую заводить отдельную папку, потому что, во-первых, в проект может входить несколько файлов, а, во-вторых, сам MPLAB создаст ещё несколько вспомогательных файлов (*.lst, *.err, *.cod, *.bkx). Если несколько проектов будут в одной папке, то легко можно запутаться какие файлы к какому проекту относятся. Короче, создаём для проекта новую папку, потом запускаем MPLAB и выбираем меню Project -> New Project…

В появившемся окошке, в проводнике справа, выбираем нашу папку, в левой части (в поле под надписью File Name) пишем название будущего проекта, например my1.pjt (не забываем указать расширение), и жмём ОК.

Появляется окно с названием Edit Project. Это менеджер проекта, в котором указываются параметры проекта (какие файлы и библиотеки нужно подключить к проекту, какой будет использоваться камень, будет ли использоваться симуляция и многое другое). Находим поле ввода с названием Development Mode. Справа от этого поля есть кнопочка Change… Нажимаем.

Открывается окошко с названием Development Mode, в котором мы видим кучу вкладок. На вкладке Tools ставим галочку рядом с MPLAB SIM Simulator (грех для отладки симулятором не пользоваться), в поле ввода Processor выбираем контроллер, с которым мы будем работать. На вкладке Clock указываем какая у нас будет частота генератора. Жмём ОК. На ошибку и предупреждение не обращаем внимания, это просто нам говорят, что пока не могут создать .hex (ну правильно, у нас пока и программы нет) и что при изменении настроек надо заново перекомпилировать проект (так мы ещё вообще ни разу не компилировали).

В поле ввода Language Tool Suite выбираем Microchip.

Нажимаем кнопку с названием Add Node… В появившемся окне, в проводнике справа выбираем папку проекта, в поле ввода слева пишем как будет называться файл с текстом программы на ассемблере, например my1.asm (не забываем указывать расширение), и жмём ОК. Всё, теперь мы подключили к проекту файл my1.asm (указали, что текст программы будет в этом файле).

На этом с Edit project заканчиваем, — нажимаем ОК.

Теперь нужно, собственно, создать файл с текстом программы (в менеджере проекта мы просто указали, что текст будет в таком-то файле, но фактически этот файл ещё не создан). Для этого идём в меню File и выбираем пункт New. Откроется окошко редактора с названием Untitled1. Выбираем меню File -> Save As…, в проводнике справа указываем папку проекта, в поле ввода File Name пишем название файла, которое мы указали в менеджере проекта, то есть в нашем примере это будет my1.asm. Если всё сделано правильно, то название окошка редактора поменяется с Untitled1 на \путь\my1.asm.

Вот и всё! Теперь осталось только набрать в окошке редактора текст программы, скомпилировать проект (меню Project->Build All) и, если в программе нет ошибок (что с первого раза бывает очень редко), то в папке проекта появится готовая прошивка (файл с расширением hex), которую можно заливать в контроллер.

  1. Часть 1. Необходимые инструменты и программы. Основы MPLAB
  2. Часть 2. Что такое микроконтроллер и как с ним работать
  3. Часть 3. Структура программы на ассемблере
  4. Часть 4. Разработка рабочей части программы. Алгоритмы
  5. Часть 5. Ассемблер. Организация циклов и ветвлений
  6. Часть 6. Как перевести контроллер в режим программирования и залить в него прошивку

Введение в архитектуру PIC и MPLABX

В 1980 году Intel разработала первый микроконтроллер (8051) с гарвардской архитектурой 8051, и с тех пор микроконтроллеры совершили революцию в индустрии электроники и встраиваемых систем. А с развитием технологий со временем у нас появилось гораздо больше эффективных микроконтроллеров с низким энергопотреблением, таких как AVR, PIC , ARM. Эти микроконтроллеры более функциональны и просты в использовании, они имеют новейшие протоколы связи, такие как USB, I2C, SPI, CAN и т. Д.Даже Arduino и Raspberry Pi полностью изменили взгляд на микроконтроллеры, а Raspberry Pi - это не просто микроконтроллер, а весь компьютер внутри.

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

Микроконтроллер

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

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

Теперь давайте начнем с простого введения в микроконтроллеры PIC и некоторых настроек программного обеспечения, которые помогут нам приступить к следующему руководству. Проверьте видео в конце для установки и настройки MPLABX, XC8, Proteus и быстрой распаковки программатора PICkit 3.

Архитектура микроконтроллера PIC и приложения:

Микроконтроллер PIC был представлен компанией Microchip Technologies в 1993 году. Первоначально эти PIC были разработаны как часть компьютеров PDP (Программируемый процессор данных) , и каждое периферийное устройство компьютера было подключено с помощью этого микроконтроллера PIC. Следовательно, PIC получил свое название как контроллер периферийного интерфейса . Позже Microchip разработала множество микросхем серии PIC, которые могут быть использованы для любого небольшого приложения, например, для освещения, до более продвинутого.

Каждый микроконтроллер должен быть построен на основе некоторой архитектуры, наиболее известным типом архитектуры является архитектура Гарварда, наша PIC основана на этой архитектуре, поскольку она принадлежит к классическому семейству 8051. Давайте перейдем к небольшому вступлению об архитектуре Harvard PIC .

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

.

ЦП (центральный процессор):

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

Он состоит из ALU (Арифметический логический блок), с помощью которого он выполняет арифметические операции и логические решения. MU (блок памяти) также присутствует для хранения инструкций после их выполнения. Этот MU определяет размер программы нашего MC. Он также состоит из CU (блок управления), который действует как коммуникационная шина между ЦП и другими периферийными устройствами микроконтроллера. Это помогает получить данные после их обработки в указанных регистрах.

Оперативная память (RAM):

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

  • Регистр общего назначения (GPR)
  • Регистр специальных функций (SFR)

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

В то время как SFR используется для выполнения сложных специальных функций , которые также включают некоторую 16-битную обработку, их регистры могут быть только прочитаны (R), и мы не можем ничего записать (W) в них. Таким образом, у этих регистров есть предопределенные функции для выполнения, которые устанавливаются во время производства, и они просто отображают нам результат, с помощью которого мы можем выполнять некоторые связанные операции.

Постоянная память (ПЗУ):

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

электрически стираемая программируемая постоянная память (EEPROM):

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

Флэш-память :

Флэш-память

- это также программируемая постоянная память для чтения (PROM), в которой мы можем читать, писать и стирать программу тысячи раз.Обычно микроконтроллер PIC использует этот тип ПЗУ.

Порты ввода / вывода

  • Наш PIC16F877A состоит из пяти портов, а именно порта A, порта B, порта C, порта D и порта E.
  • Из всех пяти ПОРТОВ только порт A 16-битный, а PORT E 3-битный. Остальные ПОРТЫ 8-битные.
  • Контакты этих ПОРТОВ могут использоваться как вход или выход, в зависимости от конфигурации регистра TRIS.
  • Помимо выполнения операций ввода-вывода, выводы также могут использоваться для специальных функций, таких как SPI, прерывание, ШИМ и т. Д.

Автобус:

Термин «шина» - это просто набор проводов, соединяющих устройство ввода или вывода с ЦП и ОЗУ.

Шина данных используется для передачи или приема данных.

Адресная шина используется для передачи адреса памяти от периферийных устройств к ЦП. Контакты ввода / вывода используются для подключения внешних периферийных устройств; UART и USART, оба протокола последовательной связи используются для взаимодействия последовательных устройств, таких как GSM, GPS, Bluetooth, IR и т. Д.

Выбор микроконтроллера PIC для наших руководств:

Микроконтроллеры

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

  1. Первое семейство, PIC10 (10FXXX) - называется Low End.
  2. Второе семейство, PIC12 (PIC12FXXX) - называется Mid-Range.
  3. Третье семейство - PIC16 (16FXXX).
  4. Четвертое семейство - PIC 17/18 (18FXXX)

Поскольку мы начинаем изучать PIC, давайте выберем IC, которая используется и доступна повсеместно.Эта микросхема принадлежит к семейству 16F, номер детали - PIC16F877A. От первого руководства до конца мы будем использовать ту же микросхему, что и , эта микросхема оснащена всеми расширенными функциями, такими как SPI, I2C и UART и т. Д. Но если вы не получите ничего из этого сейчас, все в порядке. , мы будем продвигаться по каждому руководству и, наконец, использовать все вышеупомянутые функции.

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

Peripheral Feature, упоминает, что он имеет 3 таймера , два из которых 8-битные, а один 16-битный предварительный делитель. Эти таймеры используются для создания временных функций в нашей программе. Также их можно использовать как счетчики. Он также показывает, что он имеет опций CCP (сравнение захвата и ШИМ) , которые помогают нам генерировать сигналы ШИМ и считывать входящие частотные сигналы.Для связи с внешним устройством он имеет SPI, I2C, PSP и USART . В целях безопасности он оснащен с функцией сброса неисправности (BOR), , которая помогает в сбросе программы while.

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

Специальные возможности микроконтроллера, означает, что он имеет 100000 циклов стирания / записи, означает, что вы можете запрограммировать его примерно 100000 раз. In-Circuit Serial Programming ™ (ICSP ™), помогает нам программировать IC напрямую, используя PICKIT3. Отладка может быть выполнена с помощью внутрисхемной отладки (ICD ). Другой функцией безопасности является сторожевой таймер (WDT), , который представляет собой самонадежный таймер, который при необходимости сбрасывает всю программу.

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

Выбор программного обеспечения для наших руководств:

Микроконтроллер

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

Для программирования микроконтроллера PIC нам понадобится IDE (интегрированная среда разработки) , в которой происходит программирование. Компилятор , , где наша программа конвертируется в читаемую MCU форму, называемую HEX-файлами. IPE (интегрированная среда программирования) , которая используется для сброса нашего шестнадцатеричного файла в наши микроконтроллеры PIC.

IDE: MPLABX v3.35

IPE: MPLAB IPE v3.35

Компилятор: XC8

Компания

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

Для моделирования мы использовали программное обеспечение под названием PROTEUS 8 , предоставленное Labcenter.Это программное обеспечение можно использовать для моделирования нашего кода, созданного с помощью MPLABX. Существует бесплатное демонстрационное программное обеспечение, которое можно скачать с их официальной страницы по ссылке.

Подготовка оборудования:

Все наши обучающие программы заканчиваются оборудованием. Чтобы изучить PIC наилучшим образом, всегда рекомендуется тестировать наши коды и схемы на оборудовании, потому что надежность моделирования намного ниже. Коды, которые работают в программном обеспечении для моделирования, могут работать не так, как вы ожидали, на вашем оборудовании.Следовательно, мы будем создавать свои собственные схемы на платах Perf, чтобы сбрасывать наши коды.

Для создания дампа или загрузки нашего кода в PIC нам потребуется PICkit 3. Программатор / отладчик PICkit 3 - это простой и недорогой внутрисхемный отладчик, управляемый ПК, на котором запущена MPLAB IDE (v8.20). или выше) на платформе Windows. Программатор / отладчик PICkit 3 является неотъемлемой частью набора инструментов разработчика. В дополнение к этому нам также понадобится другое оборудование, такое как плата Perf, паяльная станция, микросхемы PIC, кварцевые генераторы, конденсаторы и т. Д.Но мы будем добавлять их в наш список по мере прохождения наших руководств.

Я принес свой PICkit 3 от Amazon, видео распаковки можно найти в видео ниже. Также предоставляется ссылка на PICKIT3; цена может быть немного высока, но поверьте мне, это стоит того.

ТЕПЕРЬ, ГОТОВО, МЫ НАЧНЕМ РАБОТУ С НАШЕГО СЛЕДУЮЩЕГО Учебника

,

Как начать работу с микроконтроллерами PIC: внутренний осциллятор и контакты ввода / вывода | ПИК

Вы используете браузер, который не поддерживает CSS Flexbox. Мы предлагаем обновить ваш браузер, чтобы получить максимальную пользу.

Домой Проводить исследования

Категории

  • 3D-печать
  • Любительское радио
  • Аудио
  • Дополненная реальность
  • Автоматика
  • Автомобильная промышленность
  • Облачные вычисления
  • Компьютеры и периферия
  • Бытовая электроника
  • Кибербезопасность
  • Дисплеи
  • Дроны
  • Здоровье и фитнес
  • Домашняя автоматизация
  • Промышленное
  • Промышленный Интернет вещей
  • Интернет вещей
  • Освещение
  • Машинное обучение
  • мобильный
  • Управление двигателем
  • Мощность
  • Робототехника
  • Безопасность / идентификация
  • Датчики
  • Интеллектуальная сеть / Энергия
  • Телеком
  • Виртуальная реальность
  • Носимые устройства
  • Погода
Посмотреть все

Платформы

Linux

Raspberry Pi

Ардуино

,

Как начать работу с микроконтроллерами PIC: прерывания | ПИК

Вы используете браузер, который не поддерживает CSS Flexbox. Мы предлагаем обновить ваш браузер, чтобы получить максимальную пользу.

Домой Проводить исследования

Категории

  • 3D-печать
  • Любительское радио
  • Аудио
  • Дополненная реальность
  • Автоматика
  • Автомобильная промышленность
  • Облачные вычисления
  • Компьютеры и периферия
  • Бытовая электроника
  • Кибербезопасность
  • Дисплеи
  • Дроны
  • Здоровье и фитнес
  • Домашняя автоматизация
  • Промышленное
  • Промышленный Интернет вещей
  • Интернет вещей
  • Освещение
  • Машинное обучение
  • мобильный
  • Управление двигателем
  • Мощность
  • Робототехника
  • Безопасность / идентификация
  • Датчики
  • Интеллектуальная сеть / Энергия
  • Телеком
  • Виртуальная реальность
  • Носимые устройства
  • Погода
Посмотреть все

Платформы

Linux

Raspberry Pi

Ардуино

ESP8266

,

Смотрите также