
Получайте на почту подборку новых самоделок. Никакого спама, только полезные идеи!
*Заполняя форму вы соглашаетесь на обработку персональных данных
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Итак, вы решили научиться программировать pic-контроллеры. Для начала поговорим о том, что вам для работы с этими контроллерами понадобится.
Контроллер работает по определённой программе, которая должна как-то в него попасть. Обычно программу в машинных кодах, готовую для записи в контроллер, называют прошивкой. Следовательно нужно какое-то устройство, которое будет записывать (на сленге обычно говорят заливать или прошивать) программу в контроллер. Такое устройство называется программатор. Подробнее о программаторах и заливке программы мы поговорим позднее, в последней части нашей эпопеи (когда уже будет что заливать), а пока давайте по-порядку — как нам эту программу написать.
Программа для контроллера — это, как я уже сказал, набор машинных кодов, записанный в файле с расширением «hex» (здесь можно почитать про формат *.hex), который и нужно заливать в контроллер с помощью программатора. Никакого другого языка контроллер не понимает. Следовательно, нужна специальная программа, которая будет переводить текст программы, написанный на каком-либо языке программирования, в машинные коды. Наиболее удобными в этом плане являются интегрированные среды разработки (IDE — integrated development environment), поскольку они могут не только осуществлять перевод текста программы в машинный код, но и производить симуляцию её работы. Причём симуляцию можно проводить пошагово, при этом можно наблюдать состояние регистров или даже менять их состояние по своему желанию. Короче, интегрированные среды помимо, собственно, компиляции (перевода в машинные коды) предоставляют отличные возможности для отладки программы.
IDE, как и программаторов, существует много. Лично я пользуюсь MPLAB и вам рекомендую, по той простой причине, что MPLAB — это IDE от самого производителя PIC-контроллеров — фирмы Microchip, поэтому имеет отличную поддержку (в том числе на русском языке, что особенно приятно). С официального сайта Microchip можно скачать и сам этот пакет, и подробное описание по работе с ним. Если не нашли или ломает искать — ссылки для скачивания здесь, правда это уже не самая свежая версия.
В описании на русском языке про всё рассказано: от установки и настройки до удаления. В большинстве случаев вся установка заключается в том, чтобы запустить setup и ответить на пару вопросов, типа куда ставить драйверы и тому подобное, от себя лишь добавлю, что во избежание глюков ставить пакет надо в такую папку, чтобы в пути были только английские буквы (а не в какую-нибудь, типа C:ПрограммыPICMPLAB). Вообще, кириллицу в путях к файлам или в названиях файлов лучше не использовать, иначе возможны глюки.
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. Необходимые инструменты и программы. Основы MPLAB
- Часть 2. Что такое микроконтроллер и как с ним работать
- Часть 3. Структура программы на ассемблере
- Часть 4. Разработка рабочей части программы. Алгоритмы
- Часть 5. Ассемблер. Организация циклов и ветвлений
- Часть 6. Как перевести контроллер в режим программирования и залить в него прошивку
Я ни раз задавал сам себе вопрос, с какого бы языка начинать изучение. Твёрдо отвечаю – Си, т.к. в ассме много рутины и условностей, что лишает творчества. Постоянно надо проверять и перепроверять себя, а не забыл ли ты то или иное действие. В ассме есть свои неоспоримые преимущества, но о них потом, т.к. это почувствовать можно только на практике. C языком определились. Реально Си учить не надо. Я вам так скажу – мой Си это условно десять пазлов и море логики, которые я комбинирую. Можно ничего не знать, важно понимать механизм, т.е. что на что влияет и к чему приводит. Это как игра в тетрис в котором нужно лишь крутить фигуры и плотнее их ставить. Если вы играли в тетрис (не уверен что вы знаете эту игру), то вы легко поймете что такое Си. Далее о макете (макетной плате). И на эту тему мне задавали вопрос. И пришел к выводу, что человеку, который не первый день в электронике делать какую-то плату или платку с кнопками и светодиодами не интересно. Школьнику мигалка, пищалка и кнопка будут интересны. Но не взрослому человеку. Тем более всё это можно сделать в Протеусе. Протеус изучается за 30 мин. Тогда вы меня спрашиваете, а что же сделать? Сделать практическое устройство по которому у вас будет цель – цель доделать это устройство до конца. Это самый главный психологический стимул. Из каких компонентов должно быть устройство? Несколько кнопок (хоть десяток), семисегментные индикаторы 2-5 разрядов, микроконтроллер PIC16F628A (или без А) (на этом микроконтроллере можно много фантазировать), ну и оставить 1-2-3 свободные линии, чтобы что-то внешнее подключить или управлять. У меня всё начинается с идеи и вопроса что собрать и подключить к МК, и сразу думаю, а как это будет подключаться к МК и может ли работать такое подключение. Ну и собственно процесс рисования печатной платы идет в параллели. НеобходимоВ знать и учитывать при рисовании, что не все ножки одинаково работают. И именно это важное начальное условие расписывается в самоучителе с самого начала. В связи с этим ваша задача сейчас по моему самоучителю разобраться с выводами (ножками), как, какие, в какую сторону, при каких условиях работают эти вывода. При всей простоте задачи вы столкнетесь с массой других несложных вещей, которые нужно изучить. Что в итоге вы получите? 1) Понимание как, что и с чем соединять. 2) Как управляются эти соединения на элементарном уровне. 3) Начнете привыкать к интерфейсу среды разработки. 4) Начнете изучать структуру текста программы. 5) Начнете понимать механизм работы программы. Важное условие – вдумчиво читать подряд. Вдумчиво и подряд. Возможно перечитывать. Мир вам.
Введение. Взаимосвязь Си и Ассемблера. Как учить Си?
Как работает МК. Программа в МК. Области памяти в МК.
Байты и биты.
МК и текст программы. Типы данных. Переменные и константы.
Как и какие микроконтроллеры будем программировать?
Установка MPLAB 8.30 и интеграция PICC Compiler 9.50.
Создание проекта с помощью волшебника (wizard)
Программа №1. «Рыба».
Физиололгия работы программы в МК.
Как работают функции. Комментарии.
Программа №2. «Продолжение рыбы». Именование портов и линий
Регистры портов. Определение направлений работы линий.
Ифы, форы, вайлы или основы интеллекта. Истина не ложь
if-else (если-иначе)
for (в течение)
while (пока)
do-while (делать пока)
switch-case-break (выбрать набор и выйти)
return (возврат)
Избыточный займ и переполнение
Составление проекта из нескольких файлов исходников
Массивы.
Динамическая индикация. Прерывания. Структуры
В Используемые источники:
- https://usamodelkina.ru/11692-samodelnyj-programmator-dlja-pic-kontrollerov.html
- https://radiohlam.ru/progr_asm_1/
- https://labkit.ru/html/c_for_pic
USB программатор PIC своими руками
Миниатюрный USB программатор для AVR микроконтроллеров
Программатор своими руками. Программатор для PIC своими руками
Прошивка и русификация Xiaomi Redmi Note 3 МТК
Контроллер Z 5R: инструкция, схема подключения
Осваиваем простейший микроконтроллер PIC. Часть 1
Как сделать скриншот на Мейзу (Meizu): 5 простых способов