Андрей Смирнов
Время чтения: ~26 мин.
Просмотров: 0

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

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

Итак, пришло время изучать микроконтроллеры, а потом и их программировать, а так же хотелось собирать устройства на них, схем которых сейчас в интернете ну просто море. Ну нашли схему, купили контроллер, скачали прошивку….а прошивать то чем??? И тут перед радиолюбителем, начинающим осваивать микроконтроллеры, встает вопрос – выбор программатора! Хотелось бы найти оптимальный вариант, по показателю универсальность — простота схемы — надёжность. «Фирменные» программаторы и их аналоги были сразу исключены в связи с довольно сложной схемой, включающей в себя те же микроконтроллеры, которые необходимо программировать. То есть получается «замкнутый круг»: что бы изготовить программатор, необходим программатор. Вот и начались поиски и эксперименты! В начале выбор пал на PIC JDM. Работает данный программатор от com порта и питается от туда же. Был опробован данный вариант, уверенно запрограммировал 4 из 10 контроллеров, при питании отдельном ситуация улучшилась, но не на много, на некоторых компьютерах он вообще отказался что либо делать да и защиты от «дурака» в нем не предусмотрено. Далее был изучен программатор Pony-Prog. В принципе, почти тоже самое что и JDM.Программатор «Pony-prog», представляет очень простую схему, с питанием от ком-порта компьютера, в связи с чем, на форумах, в Интернете, очень часто появляются вопросы по сбоям при программировании того, или иного микроконтроллера. В результате, выбор был остановлен на модели «Extra-PIC». Посмотрел схему – очень просто, грамотно! На входе стоит MAX 232 преобразующая сигналы последовательного порта RS-232 в сигналы, пригодные для использования в цифровых схемах с уровнями ТТЛ или КМОП, не перегружает по току COM-порт компьютера, так как использует стандарт эксплуатации RS232, не представляет опасности для COM-порта.Вот первый плюс! Работоспособен с любыми COM-портами, как стандартными (±12v; ±10v) так и с нестандартными COM-портами некоторых моделей современных ноутбуков, имеющих пониженные напряжения сигнальных линий, вплоть до ±5v – еще плюс! Поддерживается распространёнными программами IC-PROG, PonyProg, WinPic 800 (WinPic800) и другими – третий плюс! И питается это все от своего собственного источника питания! Было решено – надо собирать! Так в журнале Радио 2007 №8 был найден доработанный вариант этого программатора. Он позволял программировать микроконтроллеры в двух режимах. Известны два способа перевода микроконтроллеров PICmicro в режим программирования: 1.При включённом напряжении питания Vcc поднять напряжение Vpp (на выводе -MCLR) от нуля до 12В 2.При выключенном напряжении Vcc поднять напряжение Vpp от нуля до 12В, затем включить напряжение Vcc Первый режим — в основном для приборов ранних разработок, он накладывает ограничения на конфигурацию вывода -MCLR, который в этом случае может служить только входом сигнала начальной установки, а во многих микроконтроллерах предусмотрена возможность превратить этот вывод в обычную линию одного из портов. Это еще один плюс данного программатора. Схема его приведена ниже:bfecd5.jpgКрупнее Все было собрано на макетке и опробовано. Все прекрасно и устойчиво работает, глюков замечено небыло! Была отрисована печатка для этого программатора.depositfiles.com/files/mk49uejin все было собрано в открытый корпус, фото которого ниже.

Соединительный кабель был изготовлен самостоятельно из отрезка восьмижильного кабеля и стандартных комовских разьемах, никакие нуль модемные тут не прокатят, предупреждаю сразу! К сборке кабеля следует отнестись внимательно, сразу избавитесь от головной боли в дальнейшем. Длина кабеля должна быть не более полутора метров. Фото кабеля3a0d17.jpg Итак, программатор собран, кабель тоже, наступил черед проверки всего этого хозяйства на предмет работоспособности, поиск глюков и ошибок. Сперва наперво устанавливаем программу IC-prog, которую можно скачать на сайте разработчика www.ic-prog.com, Распакуйте программу в отдельный каталог. В образовавшемся каталое должны находиться три файла: icprog.exe — файл оболочки программатора. icprog.sys — драйвер, необходимый для работы под Windows NT, 2000, XP. Этот файл всегда должен находиться в каталоге программы. icprog.chm — файл помощи (Help file). Установили, теперь надо бы ее настроить. Для этого: 1.(Только для Windows XP): Правой кнопкой щёлкните на файле icprog.exe. «Свойства» >> вкладка «Совместимость» >> Установите «галочку» на «Запустить программу в режиме совместимости с:» >>выберите «Windows 2000». 2.Запустите файл icprog.exe. Выберите «Settings» >> «Options» >> вкладку «Language» >> установите язык «Russian» и нажмите «Ok». Согласитесь с утверждением «You need to restart IC-Prog now» (нажмите «Ok»). Оболочка программатора перезапустится. Настройки» >> «Программатор 1.Проверьте установки, выберите используемый вами COM-порт, нажмите „Ok“. 2.Далее, „Настройки“ >> „Опции“ >> выберите вкладку „Общие“ >> установите „галочку“ на пункте „Вкл. NT/2000/XP драйвер“ >> Нажмите „Ok“ >> если драйвер до этого не был устновлен на вашей системе, в появившемся окне „Confirm“ нажмите „Ok“. Драйвер установится, и оболочка программатора перезапустится. Примечание: Для очень „быстрых“ компьютеров возможно потребуется увеличить параметр „Задержка Ввода/Вывода“. Увеличение этого параметра увеличивает надёжность программирования, однако, увеличивается и время, затрачиваемое на программирование микросхемы. 3.»Настройки» >> «Опции» >> выберите вкладку «I2C» >> установите «галочки» на пунктах: «Включить MCLR как VCC» и «Включить запись блоками». Нажмите «Ok». 4.«Настройки» >> «Опции» >> выберите вкладку «Программирование» >> снимите «галочку» с пункта: «Проверка после программирования» и установите «галочку» на пункте «Проверка при программировании». Нажмите «Ok». Вот и настроили! Теперь бы нам протестировать программатор в месте с IC-prog. И тут все просто: Далее, в программе IC-PROG, в меню, запустите: Настройки >> Тест Программатора Перед выполнением каждого пункта методики тестирвания, не забывайте устанавливать все «поля» в исходное положение (все «галочки» сняты), как показано на рисунке выше. 1.Установите «галочку» в поле «Вкл. Выход Данных», при этом, в поле «Вход Данных» должна появляться «галочка», а на контакте (DATA) разъёма X2, должен установиться уровень лог. «1» (не менее +3,0 вольт). Теперь, замкните между собой контакт (DATA) и контакт (GND) разъёма X2, при этом, отметка в поле «Вход Данных» должна пропадать, пока контакты замкнуты. 2.При установке «галочки» в поле «Вкл. Тактирования», на контакте (CLOCK) разъёма X2, должен устанавливаться уровень лог. «1». (не менее +3,0 вольт). 3.При установке «галочки» в поле «Вкл. Сброс (MCLR)», на контакте (VPP) разъёма X3, должен устанавливаться уровень +13,0… +14,0 вольт, и светиться светодиод D4 (обычно красного цвета).Если переключатель режимов поставить в положение 1 то будет светится светодиод HL3Если при тестировании, какой-либо сигнал не проходит, следует тщательно проверить весь путь прохождения этого сигнала, включая кабель соединения с COM-портом компьютера. Тестирование канала данных программатора EXTRAPIC: 1. 13 вывод микросхемы DA1: напряжение от -5 до -12 вольт. При установке «галочки»: от +5 до +12 вольт. 2. 12 вывод микросхемы Da1: напряжение +5 вольт. При установке «галочки»: 0 вольт. 3. 6 вывод микросхемы DD1: напряжение 0 вольт. При установке «галочки»: +5 вольт. 3. 1 и 2 вывод микросхемы DD1: напряжение 0 вольт. При установке «галочки»: +5 вольт. 4. 3 вывод микросхемы DD1: напряжение +5 вольт. При установке «галочки»: 0 вольт. 5. 14 вывод микросхемы DA1: напряжение от -5 до -12 вольт. При установке «галочки»: от +5 до +12 вольт. Если все тестирование прошло успешно, то программатор готов к эксплуатации. Для подключения микроконтроллера к программатору можно использовать подходящие панельки или же сделать адаптер на основе ZIF панельки (с нулевым усилием прижатия), например как здесь radiokot.ru/circuit/digital/pcmod/18/. Теперь несколько слов про ICSP — Внутрисхемное программирование PIC-контроллеров. При использовании ICSP на плате устройства следует предусмотреть возможность подключения программатора. При программировании с использованием ICSP к программатору должны быть подключены 5 сигнальных линий: 1. GND (VSS) — общий провод. 2. VDD (VCC) — плюс напряжение питания 3. MCLR’ (VPP)- вход сброса микроконтроллера / вход напряжения программирования 4. RB7 (DATA) — двунаправленная шина данных в режиме программирования 5. RB6 (CLOCK) Вход синхронизации в режиме программирования Остальные выводы микроконтроллера не используются в режиме внутрисхемного программирования. Вариант подключения ICSP к микроконтроллеру PIC16F84 в корпусе DIP18: 1.Линия MCLR’ развязывается от схемы устройства перемычкой J2, которая в режиме внутрисхемного программирования (ICSP) размыкается, передавая вывод MCLR в монопольное управление программатору. 2.Линия VDD в режиме программирования ICSP отключается от схемы устройства перемычкой J1. Это необходимо для исключения потребления тока от линии VDD схемой устройства. 3.Линия RB7 (двунаправленная шина данных в режиме программирования) изолируется по току от схемы устройства резистором R1 номиналом не менее 1 кОм. В связи с этим максимальный втекающий/стекающий ток, обеспечиваемый этой линией будет ограничен резистором R1. При необходимости обеспечить максимальный ток, резистор R1 необходимо заменить (как в случае c VDD) перемычкой. 4.Линия RB6 (Вход синхронизации PIC в режиме программирования) так же как и RB7 изолируется по току от схемы устройства резистором R2, номиналом не менее 1 кОм. В связи с этим максимальный втекающий/стекающий ток, обеспечиваемый этой линией будет ограничен резистором R2. При необходимости обеспечить максимальный ток, резистор R2 необходимо заменить (как в случае с VDD) перемычкой. Расположение выводов ICSP у PIC-контроллеров:Эта схема только для справки, выводы программирования лучше уточнить из даташита на микроконтроллер. Теперь рассмотрим прошивку микроконтроллера в программе IC-prog. Будем рассматривать на примере конструкции вот от сюда rgb73.mylivepage.ru/wiki/1952/579 Вот схема устройстваce4d98.jpg вот прошивка Прошиваем контроллер PIC12F629. Данный микроконтроллер для своей работы использует константу osccal — представляет собой 16-ти ричное значение калибровки внутреннего генератора МК, с помощью которого МК отчитывает время при выполнении своих программ, которая записана в последней ячейке данных пика. Подключаем данный микроконтроллер к программатору. Ниже на сриншоте красными цифрами показана последовательность действий в программе IC-prog. 1. Выбрать тип микроконтроллера 2. Нажать кнопку «Читать микросхему» В окне «Программный код» в самой последней ячейке будет наша константа для данного контроллера. Для каждого контроллера константа своя!Не сотрите ее, запишите на бумажку и наклейте ее на микросхему! Идем далее 3. Нажимаем кнопку «Открыть файл…», выбираем нашу прошивку. В окне программного кода появится код прошивки. 4. Спускаемся к концу кода, на последней ячейке жмем правой клавишей мыши и выбираем в меню «править область», в поле «Шестнадцатеричные» вводим значение константы, которую записали, нажимаем «ОК». 5. Нажимаем «программировать микросхему». Пойдет процесс программирования, если все прошло успешно, то программа выведет соответствующее уведомление. Вытаскиваем микросхему из программатора и вставляем в собранный макет. Включаем питание. Нажимаем кнопку пуск.Ура работает! Вот видео работы мигалкиvideo.mail.ru/mail/vanek_rabota/_myvideo/1.html С этим разобрались. А вот что делать если у нас есть файл исходного кода на ассемблере asm, а нам нужен файл прошивки hex? Тут необходим компилятор. и он есть — это Mplab, в этой программе можно как писать прошивки так и компилировать. Вот окно компилятора Устанавливаем Mplab Находим в установленной Mplab программу MPASMWIN.exe, обычно находится в папке — Microchip — MPASM Suite — MPASMWIN.exe Запускаем ее. В окне (4) Browse находим наш исходник (1) .asm, в окне (5) Processor выбираем наш микроконтроллер, нажимаем Assemble и в той же папке где вы указали исходник появится ваша прошивка .HEX Вот и все готово! Надеюсь эта статья поможет начинающим в освоении PIC контроллеров! Удачи! Выбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: PIC16F628A. Первым делом необходимо скачать документацию по выбранному микроконтроллеру. Достаточно зайти на сайт производителя и скачать Datasheet. На первых страницах перечислены основные характеристики МК (русское описание). Основные моменты, которые нам понадобятся:

  • микроконтроллер содержит внутренний генератор на 4 MHz, так же можно подключить внешний кварц частотой до 20 MHz
  • 16 ног микроконтроллера можно использовать как цифровые входывыходы
  • есть 2 аналоговых компаратора
  • 3 таймера
  • CCP модуль
  • USART модуль
  • 128 байт энергонезависимой памяти EEPROM

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

Компилятор

Как я уже писал в предыдущих статьях, самым простым и легким я посчитал компилятор JAL с IDE JALEdit. Качаем JALPack, устанавливаем. В этом паке содержаться все необходимые библиотеки, а так же примеры их использования. Запускаем JALEdit. Открываем пример програмы для нашего микроконтроллера: 16f628a_blink.jal, дабы не портить исходник, сразу сохраняем ее в новый файл, к примеру, 16f628a_test.jal. Весь код можно разделить на 4 блока:

  • выбор МК и его конфигурация

    <font>include 16f628a -- подключение библиотеки нашего МК </font><font>-- -- This program assumes a 20 MHz resonator or crystal -- is connected to pins OSC1 and OSC2. </font>pragma <font>target clock </font><font>20_000_000 </font><font>-- oscillator frequency -- configuration memory settings (fuses) </font>pragma <font>target </font>OSC HS <font>-- HS crystal or resonator </font>pragma <font>target </font>WDT <font>disabled </font><font>-- no watchdog </font>pragma <font>target </font>LVP <font>disabled </font><font>-- no Low Voltage Programming </font>pragma <font>target </font>MCLR external <font>-- reset externally -- </font>

  • объявление переменных, процедур, функций

    alias led is pin_A0 pin_A0_direction = <font>output </font>

  • выполнение настроек и расчетов до основного цикла

    enable_digital_io() <font>-- переключение всех входоввыходов на цифровой режим</font>

  • бесконечный цикл основных действий МК

    forever loop led = <font>on </font>_usec_delay(<font>250000</font>) led = <font>off </font>_usec_delay(<font>250000</font>) end loop

Нажав F9 (или соответсвующую кнопку) программа скомпилируется в готовую прошивку, при этом будет видно сколько ресурсов МК будет задействовано:

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

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

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

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

<font>-- Symbolic Fuse definitions -- ------------------------- -- -- addr 0x2007 -- </font>pragma <font>fuse_def </font>OSC <font>0x13 </font>{ <font>-- oscillator </font>RC_CLKOUT = <font>0x13 </font><font>-- rc: clkout on ra6/osc2/clkout, rc on ra7/osc1/clkin </font>RC_NOCLKOUT = <font>0x12 </font><font>-- rc: i/o on ra6/osc2/clkout, rc on ra7/osc1/clkin </font>INTOSC_CLKOUT = <font>0x11 </font><font>-- intosc: clkout on ra6/osc2/clkout, i/o on ra7/osc1/clkin </font>INTOSC_NOCLKOUT = <font>0x10 </font><font>-- intosc: i/o on ra6/osc2/clkout, i/o on ra7/osc1/clkin </font>EC_NOCLKOUT = <font>0x3 </font><font>-- ec </font>HS = <font>0x2 </font><font>-- hs </font>XT = <font>0x1 </font><font>-- xt </font>LP = <font>0x0 </font><font>-- lp </font>} pragma <font>fuse_def </font>WDT <font>0x4 </font>{ <font>-- watchdog timer </font><font>ENABLED </font>= <font>0x4 </font><font>-- on </font><font>DISABLED </font>= <font>0x0 </font><font>-- off </font>} pragma <font>fuse_def </font>PWRTE <font>0x8 </font>{ <font>-- power up timer </font><font>DISABLED </font>= <font>0x8 </font><font>-- disabled </font><font>ENABLED </font>= <font>0x0 </font><font>-- enabled </font>} pragma <font>fuse_def </font>MCLR <font>0x20 </font>{ <font>-- master clear enable </font>EXTERNAL = <font>0x20 </font><font>-- enabled </font>INTERNAL = <font>0x0 </font><font>-- disabled </font>} pragma <font>fuse_def </font>BROWNOUT <font>0x40 </font>{ <font>-- brown out detect </font><font>ENABLED </font>= <font>0x40 </font><font>-- enabled </font><font>DISABLED </font>= <font>0x0 </font><font>-- disabled </font>} pragma <font>fuse_def </font>LVP <font>0x80 </font>{ <font>-- low voltage program </font><font>ENABLED </font>= <font>0x80 </font><font>-- enabled </font><font>DISABLED </font>= <font>0x0 </font><font>-- disabled </font>} pragma <font>fuse_def </font>CPD <font>0x100 </font>{ <font>-- data ee read protect </font><font>DISABLED </font>= <font>0x100 </font><font>-- disabled </font><font>ENABLED </font>= <font>0x0 </font><font>-- enabled </font>} pragma <font>fuse_def </font>CP <font>0x2000 </font>{ <font>-- code protect </font><font>DISABLED </font>= <font>0x2000 </font><font>-- off </font><font>ENABLED </font>= <font>0x0 </font><font>-- on </font>}

  • OSC — конфигурация источника тактирования может принимать 8 различных значений, 4 из которых нам могут понадобиться
    1. INTOSC_NOCLKOUT — внутренний генератор (4M Hz)
    2. HS — внешний высокочастотный кварц (8-20 MHz)
    3. XT = внешний кварц (200 kHz — 4 MHz)
    4. LP — внешний низкочастотный кварц (до 200 kHz)
  • WDT — сторожевой таймер. Основная работа этого таймера в том, что бы перезагрузить микроконтроллер когда он дотикает до конца. Что бы перезагрузки не происходило, его нужно своевременно обнулять. Таким образом при сбое счетчик таймера перестанет обнуляться, что приведет к сбросу МК. Иногда бывает удобно, но в данный момент нам это не потребуется.
  • PWRTE — очередной таймер. При активации он будет сбрасывать МК до тех пор, пока питание не поднимется до нужного уровня.
  • BROWNOUT — сброс МК при падении питания ниже нормы.
  • MCLR — активация возможности внешнего сброса МК. При включении функции МК будет в постоянном резете до тех пор, пока на ноге MCLR (pin 4) не будет положительного напряжения. Для сброса МК достаточно установить кнопку, замыкающую pin 4 на землю.
  • LVP — активация возможности программирования при низком напряжении. При активации один цифровой вход переключится в режим LVP (pin 10). Если подать 5В на эту ногу, то МК перейдет в режим программирования. Для нормальной работы МК требуется держать на этой ноге 0В (подсоединить к земле). Мы будем использовать программатор, использующий повышенное напряжение, потому LVP активировать не требуется.
  • CPD — защита EEPROM от считывания программатором.
  • CP — защита FLASH (прошивки) от считывания программатором.

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

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

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

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

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

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

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

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

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

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

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

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

Прошивка

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

enable_digital_io() <font>-- переключение всех входоввыходов на цифровой режим -- </font>alias led is pin_B5 <font>-- светодиод подключен к RB5 </font>pin_B5_direction = <font>output </font><font>-- настраиваем RB5 как цифровой выход -- </font>alias button is pin_B4 <font>-- кнопка подключена к RB4 </font>pin_B4_direction = <font>input </font><font>-- настраиваем RB4 как вход </font>led = <font>off </font><font>-- выключаем светодиод </font>

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

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

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

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

Все таже схема: Смотрим на распиновку:

  • PGD — pin 13
  • PGC — pin 12
  • MCLR(Vpp) — pin 4
  • Vdd — pin 14
  • Vss — pin 5

Паяем…

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

Подключаем к компьютеру. Качаем и запускаем WinPic800. Идем в Settings->Hardware, выбираем JDM и номер порта, на котором висит программатор Нажимаем Hardware Test, затем Detect Device

Открываем нашу прошивку pic628a_test.hex На вкладке Setting можно проверить, что конфигурационные биты выставлены верно, при желании тут же их можно изменитьProgram All, затем Verify All
Если ошибок не возникло, продолжаем паять.

Результат

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

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

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

Работа с программой PicKit2 Programmer

mikrokontroller.jpg

Если вы уже собрали USB программатор PIC своими руками, то пора научиться им пользоваться. Для этого нам необходимо установить программную оболочку «PICkit 2 Programmer», которая разрабатывалась специально для управления программатором PICkit2.

Для работы программы требуется .NET Framework. Если этот пакет не установлен на компьютере, то его нужно установить. Также можно воспользоваться дистрибутивом «PICkit 2 Programmer» с интегрированным пакетом — PicKit 2 V2.61 Install with .NET Framework. Скачать его можно здесь.

Итак, если программа установлена, приступим к изучению её возможностей.

Устанавливаем микроконтроллер в панель программации, подключаем программатор к компьютеру и запускаем «PICkit 2 Programmer».

write-pic16f628.jpg

При запуске программа производит опрос программатора и автоматически определяет тип программируемого микроконтроллера по идентификационным битам (так называемому device ID). Внимание! Микросхемы семейства Baseline, а также микросхемы EEPROM и KeeLOG не имеют device ID. Чтобы программа смогла работать с этими микросхемами, нужно выбрать конкретное изделие через меню «Device Family».

connect-mk.jpg

Если вместо такой дружелюбной картинки покажется вот такая…

not-connect.jpg

…, то нужно проверить корректно ли подключен usb-кабель, и через меню «Tools» — «Check Communication» произвести переподключение устройства.

Открытие файла с прошивкой.

Чтобы записать программу МК в его память, необходимо выбрать в меню пункт «File» — «Import Hex».

import-hex.jpg

Затем выбрать в открывшемся окне нужный файл прошивки.

hex-file.jpg

После этого в окне памяти программ (Program Memory) и данных (EEPROM Data) отобразится содержимое .hex файла.

program-and-data-window.jpg

Запись программы в МК.

Теперь можно программировать МК. Для этого жмём кнопку «Write». Процесс записи занимает 3 — 5 секунд.

write-pic.jpg

Об успешном выполнении процедуры записи уведомит надпись «Programming Successful».

programming-successful.jpg

Для большей уверенности можно провести процедуру проверки. При нажатии на кнопку «Verify» программа сравнивает данные hex-файла и данные, записанные в МК. Если верификация прошла успешно, то в окне сообщений появится надпись «Verification Successful».

Внимание! Если вы прошиваете микроконтроллеры PIC12F675, PIC12F629 и аналогичные с внутренним тактовым генератором, то при верификации может выскакивать ошибка. Дело в том, что PICkit2 Programmer (версии 6.21) сохраняет калибровочную константу, а затем записывает её в последнюю ячейку памяти МК. Понятно, что исходный файл прошивки и записанные данные в памяти будут отличаться. О калибровочной константе будет рассказано далее.

Быстрые кнопки.

Кнопка «Auto Import Hex + Write Device» понравиться тем, кто хочет «загонять прошивку» в МК нажатием одной кнопки. Один щелчок и программа предложит выбрать файл прошивки, а затем незамедлительно запишет её в МК.

aihwd.jpg

Кнопка «Read Device + Export Hex File» выполняет обратную функцию — производит считывание данных с МК и предлагает сохранить файл прошивки в .hex файл.

rdehf.jpg

Изменение битов конфигурации.

Биты конфигурации задают основные параметры работы МК. Это и тип генератора (кварц, RC-цепь), включение/отключение так называемого «сторожевого таймера», установка защиты от считывания памяти программ и некоторые другие. Как правило, при написании алгоритма работы МК (программы) прописываются значения, которые нужно записать в биты конфигурации. При «прошивке» программная оболочка берёт данные о конфигурации из самого файла прошивки и принудительно указывать эти данные не требуется.

Но, нам, как начинающим не будет лишним знать, как можно просмотреть или изменить конкретные биты конфигурации. Для этого щёлкаем по надписи «Configuration». Откроется окно редактирования битов конфигурации.

config-bits.jpg

Если нужно поменять 0 на 1, то меняем — жмём «Save». Естественно, менять надо осознанно. Повторяю, при использовании готового файла прошивки менять ничего не надо, программа сделает всё автоматически.

Выбор модели микроконтроллера.

Микроконтроллеры бывают разные. Поэтому при программировании МК бывает необходимость указать конкретную модель микроконтроллера. При выборе пункта меню «Device Family» выпадает список семейств микроконтроллеров. Есть среди этого списка и микросхемы памяти EEPROM.

В отличие от микроконтроллеров, микросхемы памяти EEPROM не определяются автоматически по команде «Tools» — «Check Communication». Поэтому при считывании/записи микросхем EEPROM в программе необходимо указать маркировку микросхемы.

В меню выбираем пункт «Device Family» — «EEPROMS» — «24LC».

Далее выбираем конкретную марку микросхемы в выпадающем списке «-Select Part-«. Как видим, у нас микросхема 24LC08B (аналоги 24C08, 24WC08L и др.).

Чтобы считать данные с микросхемы EEPROM жмём «Read». Если в памяти записаны данные, то в окне «Program Memory» значения обновятся.

Кнопки «Write» (считать), «Erase» (стереть) выполняют соответствующие функции.

Калибровочная константа.

Как известно, для работы микроконтроллера требуется тактовый генератор. Элементом, который задаёт частоту работы этого генератора, может быть внешний кварцевый резонатор, RC — цепь. Но среди микроконтроллеров PIC есть такие, которые содержат необходимые задающие цепи внутри самой микросхемы. К таким МК относятся, например PIC12F629, PIC12F675.

На заводе в память таких микроконтроллеров записывается специальная константа, которая задаёт параметры встроенного генератора на 4 МГц. Эта калибровочная константа вида 34хх записывается в последнюю ячейку памяти программ по адресу 0x3FF.

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

При необходимости константу легко указать вручную. Для этого в меню выбираем пункт «Tools» — «OSCCAL» — «Set Manually».

В поле «OSCCAL value» указываем ранее записанное значение константы. Жмём кнопку «Set» (установить).

Теперь, когда вы знакомы с основными возможностями PICkit2 Programmer, можно смело начать сборку какого-нибудь устройства на микроконтроллере, например, RGB-светильника на PIC12F629/675.

Главная &raquo Микроконтроллеры &raquo Текущая страница

Также Вам будет интересно узнать:

  • Основы цифровой электроники.

  • Базовые логические элементы цифровых устройств.

Используемые источники:

  • http://electronics-lab.ru/blog/mcu/13.html
  • https://habr.com/post/97795/
  • https://go-radio.ru/kak-proshit-microcontroller-pic.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации