Средства программирования PIC-контроллеров
Введение
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В ( >path без аргументов приводит к отображению списка путей переменной path в окне команд (Command Window). Удалить путь из переменной path можно командой rmpath, например:
4. Создайте Simulink модель для PIC контроллера, используя блоки библиотеки «Embedded Target for Microchip dsPIC» (Рис. 13), или загрузите готовую модель, например, Servo_ADC.mdl.
Тип контроллера, для которого разрабатывается Simulink модель, выбирается из списка в блоке Master > PIC (Рис. 16, Рис. 10), который должен быть включен в состав модели.
Рис. 16. Выбор типа контроллера в блоке Master модели.
5. Проверьте настройки конфигурации модели: Меню → Simulation → Configuration Parameters . В строке ввода 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 контроллеров с достаточными ресурсами.
Источник статьи: http://habr.com/ru/post/321542/
Как написать программу для pic микроконтроллеров
Теперь, наконец-то займемся делом после устанровок программ. Пора написать первую простенькую программу для микроконтроллера. Пережде чем мы начнем ее писать, надо поговорить о том, а какой МК мы будем использовать.
Я могу предложить хорошо зарекомендовавший себя МК PIC16F877. Он включает в себя практически все мыслимые и немыслимые интерфейсы и технологии (за исключением, пожалуй, только USB) и очень неплох по рабочим характеристикам:
- тактовая частота — 20 МГц
- 4 полноценных 8-ми битных порта ввода/вывода
- последовательный и паралельный порт
- шина I2C
- несколько таймеров
- модули сравнения, компараторы
- модуль широтно-импульсной модуляции (ШИМ)
- 10-ти разрядный АЦП
МК этот широко распространенный и в розничной продаже встречается часто. Если Вы в г.Москве, то Вам дорога в «Чип и Дип» — там его можно приобрести примерно за 350 руб. Настоятельно рекомендую покупать его в DIP корпусе (широком), благо такой есть. Для начальных опытов и проверок это самый лучший вариант. Если Вы вдруг приобретете его в корпусе PLCC, то будет целая куча проблем с его использованием — шаг плоских выводов в 1.27 мм не самый удобный вариант.
Итак, с МК определились. В файлах к этой статье можно найти полный справочник по этому МК. Что покупать теперь понятно, но пока дайвайте все же напишем программу, что бы было понятно что с ней дальше делать и как ее «зашить» в этот МК.
Запускаем программу MPLAB (которую установили в прошлых статьях). Выбираем пункт меню Project -> Project Wizard. В открывшемся окне нажимаем Далее.
В выпавшем списке доступных МК выбираем PIC16F877. Нажимаем Далее.
Здесь надо выбрать компилятор, который будет обрабатывать код нашей программы. Обязательно надо выбрать пункт HI-TECH PICC Toolsuite в выпадающем списке Active Toolsuite. Это тот самый компилятор языка Си, который мы установили в прошлой стаье. Нажимаем Далее.
Задайте имя проекта, например, TestPIC и укажите директорию проекта. Тут есть две хитрости. Первое, MPLAB не создают сам отдельную папку для проекта и разместит все файлы прямо в той директории которую Вы указали. Второе и пожалуй, самое главное — MPLAB не понимает русских букв в названии пути. Проект то он создаст, но во время работы программы, особенно при сохранении и открытии файлов, возникнут такие «глюки» что долго будете голову ломать в чем дело. Поэтому, в пути к папке проекта не должны попадаться русские названия. Нажимаем Далее.
Здесь можно добавить к проекту какие-либо готовые файлы, но нам пока такая возможность не нужна. Жмем Далее.
Тут я думаю все понятно. Нажимаем Готово.
Заготовку проекта сделали, но он пока пустой. Нажимаем File -> New. Появится новое окно с заголовком Untitled. Далее выбираем File -> Save As. . Укажите имя файла, например, TestPIC.c и перейдите в папку проекта. Обязательно поставьте галочку Add File to Project.
Теперь помещаем ниже следующий код в открытое окно файла проекта TestPIC.c (весь проект целиком можно найти в файлах к этой статье).
Наверное Вам интересно, что будет результатом работы этого кода. Будет происходить следующее: к МК подключаются 8 светодиодов. При включении питания, светодиоды начнут мигать в виде «волны» (это лучше видеть, благо осталось нет так уж и много). Рассмотрим поподробнее сам код.
Вначале идет думаю всем знакомый оператор include, который подключает заголовочный файл со всеми неоходимыми макроопределениями. Далее идет еще одна директива препроцессора __CONFIG, в которую предается 16-ти ричное число, характерезующие набор специальных опций и свойств, характерезующих работу МК. Мы еще в ходе этой статьи вернемся к этому моменту. Переходим сразу к началу функции main() — точки входа в собственно сам исполняемый код программы. Далее следует операция с каким-то T0IE. Конктерно эта строчка означает, что необходимо запретить прерывания от таймера при работе МК. TOIE — это определенный с помощью #define в файле pic.h адрес специального регистра, отвечающего за эту операцию (и вообще, если видете в коде странные до этого в коде не определенные переменные записанные в верхнем регистре, то это наверняка символические имена регистров МК). Строчка GIE=0; — запрещает обработку любых прерываний глобально во всем МК. Прерывания для нашего простого примера мы использовать не будем, т.к. они нам просто не нужны.
TRISB=0; — означает, что порт ввода/вывода B МК PIC16F877 будет работать на выход, т.е. к нему можно теперь подключать нагрузку, на которой можно подвать из МК 0 или +5В (этой нагрузкой будут светодиоды). В следующей строке мы помещаем в порт B число 0 — т.е. на всех выводах этого порта, настроенного на выход, будет нулевое напряжение. Далее идет конструкция из оператора while, причем с таким параметром, что некоторые программисты, привыкшие писать на Си для ПК будут слегка удивлены — так ведь это, мол, бесконечный цикл, программа зависнет. Но нам именно этого и надо. МК не может ни чего не делать, он должен постоянно что-то выпонять. Поэтому, для МК работа программы в бесконечном цикле это жизненная необходимость. Затем идет оператор увелечения на 1 числа находящегося в порту B. Немного поясним. Если написать PORTB=0xFF; — то на всех выводах порта будет 1. Если PORTB=0x0; — на всех 0. (я думаю, это должно быть понятно). Конструкция из оператора цикла for, как видно, не делает какой-либо «умной» работы не делает и нужна только для организации временной задержки. Если этот участок кода убрать, то мы просто не будем замечать как меняется напряжение на светодиодах (будет очень быстро).
В кратце код разобрали, двигаемся дальше. Вернемся к директиве __CONFIG. Откройте Configure -> Configuration Bits. . Вот тут как раз надо установить для проекта значения этих самых опций. Установите их так как на фото ниже.
Что они означают? Давайте по порядку.
- Oscillator — HS (означает, что в качестве тактового генератора будет использовавытся высокочастотный кварцевый резонатор)
- WatchDog Timer — Off (спец опция, если она включена, то микроконтроллер будет переодически сбрасываться [переходить на начало main()] во избежание каких-либо зависаний в МК. Нам такая возможность не нужна.)
- Power Up Timer — On (если On, то МК будет находится в состоянии сброса, пока напряжение питания не достигнет необходимого порогового уровня)
- Brown Out Detect — On (сбрасывает МК, если произошло падение питающего напряжения ниже определенного уровня)
- Low Voltage Program — Disabled (в этом случае запрещаем использовать низковольтное внутрисхемное прогрпаммирование МК, т.к. будем пользоваться обычным программаторм [см. следующие статьи])
- Flash Program Write — Enabled (допускаем возможность записи во Flash память программ)
- Data EE Read Protect — Off (разрешаем чтение данных и EEPROM памяти МК)
- Code Protect — Off (отключаем защиту кода в МК. Если On то невозможно будет считать программу из МК. Нужно если Вы хотите защитить свою программу от попыток взлома. Нам пока такая возможность не нужна.)
Пора откомпилировать код. Запустите Project -> Build All. При этом начнется компиляция проекта и появится вот такое окно с чудной записью в конце BUILD SUCCEEDED.
Источник статьи: http://www.kernelchip.ru/pcports/PS044.php