Как подключить pic16f84a к программатору

Средства программирования 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), который должен быть включен в состав модели.

Как подключить pic16f84a к программатору

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

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

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

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

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

Как подключить pic16f84a к программатору

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:

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

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

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

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

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

Рис. 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

Как подключить pic16f84a к программатору

Рис. 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.

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

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

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

Как подключить pic16f84a к программатору

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

Заключение

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

Источник

Осваиваем простейший микроконтроллер PIC. Часть 1

Выбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: PIC16F628A.

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

На первых страницах перечислены основные характеристики МК (русское описание).

Схема расположения выводов:
Как подключить pic16f84a к программатору
Vdd — питание.
Vss — земля.

Это минимум, необходимый для работы МК.
Как подключить pic16f84a к программатору

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

Компилятор

Как я уже писал в предыдущих статьях, самым простым и легким я посчитал компилятор JAL с IDE JALEdit.

Качаем JALPack, устанавливаем.
В этом паке содержаться все необходимые библиотеки, а так же примеры их использования.

Запускаем JALEdit. Открываем пример програмы для нашего микроконтроллера: 16f628a_blink.jal, дабы не портить исходник, сразу сохраняем ее в новый файл, к примеру, 16f628a_test.jal.

enable_digital_io() — переключение всех входов\выходов на цифровой режим

forever loop
led = on
_usec_delay( 250000 )
led = off
_usec_delay( 250000 )
end loop

Code :58/2048 Data:4/208 Hardware Stack: 0/8 Software Stack :80

Если прочитать комментарии, то станет ясно, что данная программа рассчитана на использование внешнего кварца 20MHz.
Так как у нас его пока нет, разберемся с конфигурацией и перепишем программу на использование внутреннего генератора.

Конфигурация

Изменим конфигурацию под себя:

pragma target clock 4_000_000 — указываем рабочую частоту, необходимо для некоторых функций расчета времени
— конфигурация микроконтроллера
pragma target OSC INTOSC_NOCLKOUT — используем внутренний генератор
pragma target WDT disabled — сторожевой таймер отключен
pragma target PWRTE disabled — таймер питания отключен
pragma target MCLR external — внешний сброс активен
pragma target BROWNOUT disabled — сбос при падении питания отключен
pragma target LVP disabled — программирование низким напряжением отключено
pragma target CPD disabled — защита EEPROM отключена
pragma target CP disabled — защита кода отключена

Моргаем светодиодом по нажатию кнопки

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

Цифровой выход

Выберем еще неиспользуемую ногу МК. Возьмем, к примеру, RB5(pin 11). Данная нога не имеет дополнительных функций, потому она нам более нигде не понадобится.
В режиме цифрового выхода МК может притягивать к ноге либо питание, либо землю.
Подключать нагрузку можно как к плюсу, так и к минусу. Разница будет лишь в том, когда и в какую сторону потечет ток.

Как подключить pic16f84a к программатору
В первом случае ток потечет от МК при установке единицы, а во втором — к МК при установке нуля.

Дабы светодиод зажигался от логической единицы, остановимся на первом варианте.

Для ограничения тока через ногу (максимально допустимо 25 мА на цифровой вход или 200 мА на все порты) установлен токоограничительный резистор. По простейшей формуле высчитываем минимальное значение в 125 Ом. Но так как предел нам не нужен, возьмем резистор в 500 Ом (а точнее ближайший подходящий).

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

Цифровой вход

Возьмем вторую неиспользуемую нигде ногу — RB4 (pin 10, указанная в распиновке функция PGM отностися к LVP, который мы отключили).
В режиме цифрового входа микроконтроллер может считывать два состояния: наличие или отсутствие напряжения. Значит нам необходимо подключить кнопку так, что бы в одном состоянии на ногу шел плюс, а во втором состоянии — к ноге подключалась земля.

Как подключить pic16f84a к программатору

В данном варианте резистор используется в качестве подтяжки (Pull-up). Обычно для подтяжки применяют резистор номиналом 10 кОм.

Впрочем, подтягивающий резистор не всегда необходим. Все ноги PORTB (RB0-RB7) имеют внутреннюю подтяжку, подключаемую программно. Но использование внешней подтяжки куда надежнее.

Можно подключать не только кнопку, главное помнить о ограничении тока через МК.

Кнопка сброса

Пока не забыли, что мы активировали внешний сброс, добавим аналогичную кнопку на ногу MCLR (pin 4).

Как подключить pic16f84a к программатору

После нажатия такой кнопки МК начнет выполнение программы с нуля.

Прошивка

Присваиваем нашему светодиоду и кнопке переменные:

enable_digital_io() — переключение всех входов\выходов на цифровой режим

alias led is pin_B5 — светодиод подключен к RB5
pin_B5_direction = output — настраиваем RB5 как цифровой выход

alias button is pin_B4 — кнопка подключена к RB4
pin_B4_direction = input — настраиваем RB4 как вход
led = off — выключаем светодиод

Теперь присваивая переменной led значения 1 или 0 (on или off, true или false, другие алиасы..) мы будем подтягивать к нужной ноге МК или плюс, или минус, тем самым зажигая и гася светодиод, а при чтении переменной button мы будем получать 1 если кнопка не нажата и 0 если кнопка нажата.

Теперь напишем необходимые нам действия в бесконечном цикле (эти действия будут выполняться постоянно. При отсутствии бесконечного цикла МК зависнет):

forever loop
led = off — выключаем светодиод
_usec_delay( 500000 ) — ждем 0,5 сек
if Button == 0 then — если кнопка нажата, выполняем действия
led = on — зажигаем светодиод
_usec_delay( 500000 ) — ждем 0,5 сек
end if
end loop

Задержка считается просто:
частота генератора у нас 4MHz. Рабочая частота в 4 раза меньше: 1 MHz. Или 1 такт = 1 мкс. 500.000 мкс = 0,5 с.

Errors :0 Warnings :0
Code :60/2048 Data:4/208 Hardware Stack: 0/8 Software Stack :80

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

Программатор

Все таже схема:
Как подключить pic16f84a к программатору

Как подключить pic16f84a к программатору

Некачественная пайка — одна из основных проблем неработоспособности устройства.
Не повторяйте мои плохие привычки: не используйте навесной монтаж.

В качестве питания 5В в данном случае использовался хвост от старой PS/2 мыши, вставленный в разъем для мыши.

Подключаем к компьютеру.

Качаем и запускаем WinPic800.

Идем в Settings->Hardware, выбираем JDM и номер порта, на котором висит программатор

Как подключить pic16f84a к программатору

Нажимаем Hardware Test, затем Detect Device

Как подключить pic16f84a к программаторуКак подключить pic16f84a к программатору

Открываем нашу прошивку pic628a_test.hex

Как подключить pic16f84a к программатору

На вкладке Setting можно проверить, что конфигурационные биты выставлены верно, при желании тут же их можно изменить

Как подключить pic16f84a к программатору

Program All, затем Verify All

Как подключить pic16f84a к программаторуКак подключить pic16f84a к программатору

Если ошибок не возникло, продолжаем паять.

Результат

Как подключить pic16f84a к программатору

От программатора нам мешает только высокое напряжение (12в) на MCLR. Дабы не отпаивать весь программатор, можно отпаять только один провод… Или просто не подключать программатор к COM порту. Остальные провода нам мешать не будут (а подключенные питание и земля только упростят пайку).

Кнопку на MCLR паять можно по желанию, но подтяжка обязательна.

При повторном подключении программатора резистор необходимо будет убрать, иначе он подтянет 12в к питанию.

Как подключить pic16f84a к программатору
Результат работы можно увидеть на видео.

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

Теперь нам необходимо научиться пользоваться всей оставшейся периферией, но об этом в следущей статье.

Источник

Программирование микроконтроллеров PIC16/PIC18 на языке C. Статья вторая. Базовые сведения о платформе. Первая программа

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

Как я говорил ранее, пока что объяснять буду на базе МК PIC16F628A.
Обязательно качаем документацию на него. Рекомендую для поиска — alldatasheet.com
DataSheet — главный документ при разработке на базе МК.
Рекомендую распечатывать основные таблицы и разделы для удобства пользования.

Наиболее важные сведения о кристалле:
— максимальная рабочая частота — 20МГц;
— 2048х14 бит флеш-ПЗУ;
— 224 байта статической ОЗУ;
— 128 байт энергонезависимой ПЗУ;
— 16 доступных выводов;
— модуль приемо-передатчика;
— 3 таймера.

Данный кристалл — представитель так называемого среднего (Mid-range) семейства МК PIC.

Вкратце расскажу о том, что обязательно нужно понимать.

Память данных устройства разделена на 4 банка.
Банки содержат регистры специального назначения(SFR) и регистры общего назначения(GPR).
SFR — используются для управления устройством и его модулями.
Регистры обшего назначения представлены в виде статической ОЗУ, где мы можем хранить свои переменные.
Специальные регистры занимают по 32 начальные позиции в каждом банке.
В ДШ на страницах 18-21 показаны все регистры специального назначения. Распечатайте их — пригодится и не раз.

Это довольно таки объемная тема, и пропускать ее никак нельзя.
А с другой стороны нудноватая и неинтересная.
Пробуйте переосилить себя и прочитать об организации памяти и регистрах специального назначения в ДШ и у Шпака(упоминал в первой статье).

У данного устройства два порта: PORTA и PORTB.
Каждый вывод порта может использоваться непосредственно как простой вывод либо как вывод прочих модулей МК.
В самом начале ДШ вы должны были заметить что каждый вывод помимо основного названия, к примеру RB1, содержит еще и другое наименование RX и DT.
Вот здесь RX и есть второстепенная функция вывода — как вход приемо-передатчика.
Но пока мы не будем трогать периферийные модули устройства.

Каждый вывод порта может функционировать как вход или как выход.
Например, если нам нужно зажечь светодиод то вывод, к которому он подключен мы конфигурируем как выход, и выставляем на нем соответствующий уровень.
А вот если нам нужно подключить кнопку к порту и считывать факт нажатия, то здесь уже необходимо конфигурировать этот вывод как вход.
Конфигурация вход/выход осуществляется с помощью регистров TRIS.
Если в соответствующий бит регистра TRIS записать 1 то этот вывод станет входом, если 0 — выходом(видимо в связи с схожестью 1 и Input, а 0 и Output)
К примеру:

Имена регистров можно посмотреть в папке «Папка HT-PICC\include» для соответствующего контроллера.

Для установления определенного уровня на выводе используем регистр PORT.
К примеру:

PORTA = 0; // Все выводы порта А с низким уровнем
PORTB = 0xff; // Все выводы порта B с высоким уровнем
RB5 = 1; // На пятом выводе порта B высокий уровень

Так. Достигаем момента когда неоходимо сделать отступление собственно по языку C.
Наверное напишу здесь небольшой пример. Скомпилируем. Запустим в Proteus, а о базовом языке C напишу в следующей статье.

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

Для начала подключим файл заголовков.

Мы не выбираем конкретную модель, а указываем pic.h. Если открыть его то увидим скрипт выбора конкретного файла исходя из выбранного устройства при создании проекта.

Далее нам нужно инициализировать наши порты.
Создаем основную функцию программы:

Пойдем в «Папка HT-PICC\samples\delay».
Скопируем оттуда delay.c и delay.h и вставим их в папку проекта.

Добавим строку в начале:
#include «delay.c»
Мы будем использовать функцию DelayMs(x) для создания паузы между переключениями светодиода.

Допустим светодиод подключен к RB0.
Для его переключения будет использоваться логическое исключающее «ИЛИ»:

В итоге код принимает вид:

void main(void)
<
TRISA = 0;
PORTA = 0;
TRISB = 0;
PORTB = 0;

while(1)
<
DelayMs(250); // Сделаем паузу в полсекунды
DelayMs(250);
RB0 ^= 1; // инвертируем вывод
>
>

Как подключить pic16f84a к программатору

Видим несколько пунктов.
Выставляем как на скрине.
Oscillator — HS — в качестве тактового генератора будет использоваться высокочастотный кварцевый резонатор.
WatchDog Timer — Off, если включить, то микроконтроллер будет периодически сбрасываться во избежание каких-либо зависаний. Нам такая возможность пока не нужна.
Power Up Timer — Enabled, МК будет находится в состоянии сброса, пока напряжение питания не достигнет необходимого порогового уровня.
Brown Out Detect — On, сброс МК, если произошло падение питающего напряжения ниже определенного уровня.
Low Voltage Program — Disabled, запрещаем использовать низковольтное внутрисхемное программирование МК. Здесь уже зависит от Вашего программатора.
Data EE Read Protect — Off, разрешаем чтение данных и EEPROM памяти МК.
Code Protect — Off, отключаем защиту кода в МК. Если выставить On — то невозможно будет считать программу из МК. Нам пока такая возможность не нужна.

Как подключить pic16f84a к программатору

Еще раз жмем F10.
Закрываем.

Прогоним программу в Proteus.
Запускаем Proteus ISIS.
Находясь в разделе Component mode жмем Pick from libraries и, пользуясь поиском, добавляем на форму компоненты:
— PIC16F628A;
— LED-RED;
— RES;

Два раза кликаем на каждом из них и выставляем параметры.
Для МК — выбираем файл прошивки *.hex из папки нашего проекта, и выставляем частоту 4МГц.
Для LED-RED выбираем Model type — Digital.
Для резистора выбираем сопротивление в 300 Ом.
Добавляем на форму Ground в разделе Terminals mode и соединияем как на скрине.
Как подключить pic16f84a к программатору
Жмем Play — светодиод должен мигать.

В следующей статье плотно пройдусь по языку C.
Вслед за ней будет статья по периферии контроллера и примеры кода для нее.
И за ней планирую рассказать о USB и PIC 18.
Вот такой план пока:-)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *