Что такое пик контроллеры
Осваиваем простейший микроконтроллер PIC. Часть 1
Выбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: PIC16F628A.
Первым делом необходимо скачать документацию по выбранному микроконтроллеру. Достаточно зайти на сайт производителя и скачать Datasheet.
На первых страницах перечислены основные характеристики МК (русское описание).
Схема расположения выводов:
Vdd — питание.
Vss — земля.
Это минимум, необходимый для работы МК.
Остаются доступными 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). Данная нога не имеет дополнительных функций, потому она нам более нигде не понадобится.
В режиме цифрового выхода МК может притягивать к ноге либо питание, либо землю.
Подключать нагрузку можно как к плюсу, так и к минусу. Разница будет лишь в том, когда и в какую сторону потечет ток.
В первом случае ток потечет от МК при установке единицы, а во втором — к МК при установке нуля.
Дабы светодиод зажигался от логической единицы, остановимся на первом варианте.
Для ограничения тока через ногу (максимально допустимо 25 мА на цифровой вход или 200 мА на все порты) установлен токоограничительный резистор. По простейшей формуле высчитываем минимальное значение в 125 Ом. Но так как предел нам не нужен, возьмем резистор в 500 Ом (а точнее ближайший подходящий).
Для подключения более мощной нагрузки можно использовать транзисторы в различных вариантах.
Цифровой вход
Возьмем вторую неиспользуемую нигде ногу — RB4 (pin 10, указанная в распиновке функция PGM отностися к LVP, который мы отключили).
В режиме цифрового входа микроконтроллер может считывать два состояния: наличие или отсутствие напряжения. Значит нам необходимо подключить кнопку так, что бы в одном состоянии на ногу шел плюс, а во втором состоянии — к ноге подключалась земля.
В данном варианте резистор используется в качестве подтяжки (Pull-up). Обычно для подтяжки применяют резистор номиналом 10 кОм.
Впрочем, подтягивающий резистор не всегда необходим. Все ноги PORTB (RB0-RB7) имеют внутреннюю подтяжку, подключаемую программно. Но использование внешней подтяжки куда надежнее.
Можно подключать не только кнопку, главное помнить о ограничении тока через МК.
Кнопка сброса
Пока не забыли, что мы активировали внешний сброс, добавим аналогичную кнопку на ногу MCLR (pin 4).
После нажатия такой кнопки МК начнет выполнение программы с нуля.
Прошивка
Присваиваем нашему светодиоду и кнопке переменные:
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
Теперь нам необходимо записать эту прошивку в МК, собрать устройство согласно схеме и проверить, что у нас все получилось как надо.
Программатор
Все таже схема:
Некачественная пайка — одна из основных проблем неработоспособности устройства.
Не повторяйте мои плохие привычки: не используйте навесной монтаж.
В качестве питания 5В в данном случае использовался хвост от старой PS/2 мыши, вставленный в разъем для мыши.
Подключаем к компьютеру.
Качаем и запускаем WinPic800.
Идем в Settings->Hardware, выбираем JDM и номер порта, на котором висит программатор
Нажимаем Hardware Test, затем Detect Device
Открываем нашу прошивку pic628a_test.hex
На вкладке Setting можно проверить, что конфигурационные биты выставлены верно, при желании тут же их можно изменить
Program All, затем Verify All
Если ошибок не возникло, продолжаем паять.
Результат
От программатора нам мешает только высокое напряжение (12в) на MCLR. Дабы не отпаивать весь программатор, можно отпаять только один провод… Или просто не подключать программатор к COM порту. Остальные провода нам мешать не будут (а подключенные питание и земля только упростят пайку).
Кнопку на MCLR паять можно по желанию, но подтяжка обязательна.
При повторном подключении программатора резистор необходимо будет убрать, иначе он подтянет 12в к питанию.

Результат работы можно увидеть на видео.
Итак, у нас получилось самое простое устройство на микроконтроллере: мигалка светодиодом.
Теперь нам необходимо научиться пользоваться всей оставшейся периферией, но об этом в следущей статье.
Микроконтроллеры PIC для начинающих
На современном рынке есть ряд семейств и серий микроконтроллеров от разных производителей, среди них можно выделить AVR, STM32 и PIC. Каждое из семейств нашло свою сферу применения. В этой статье я расскажу начинающим о микроконтроллерах PIC, а именно, что это такое и что нужно знать для начала работы с ними.
Что такое PIC
PIC – это название серии микроконтроллеров, которые производятся компанией Microchip Technology Inc (США). Название PIC происходит от Peripheral Interface Controller.
Микроконтроллеры PIC имеют RISC-архитектуру. RISC – сокращённый набор команд, используется также в процессорах для мобильных устройств. Есть целый ряд примеров её использования: ARM, Atmel AVR и другие.
Компания Microchip в 2016 году купила Atmel – производителя контроллеров AVR. Поэтому на официальном сайте представлены микроконтроллеры семейства и PIC и AVR.
Семейства
Среди 8-битных микроконтроллеров PIC она состоит из 3-х семейств, которые отличаются архитектурой (разрядностью и набором команд).
Baseline (PIC10F2xx, PIC12F5xx, PIC16F5x, PIC16F5xx) ;
Mid-range (PIC10F3xx, PIC12F6xx, PIC12F7xx, PIC16F6xx, PIC16F7xx, PIC16F8xx, PIC16F9xx) ;
Enhanced Mid-range (PIC12F1xxx, PIC16F1xxx) ;
High-end или PIC18 (18Fxxxx, 18FxxJxx and 18FxxKxx).
Характеристики, которых приведены в таблице ниже.
Кроме 8 битных микроконтроллеров компания Microchip производит 16-битные:
DsPIC30/33F для обработки сигналов.
Представители 16-битного семейства работают со скоростью от 16 до 100 MIPS (выполнено миллионов инструкций в секунду). Стоит отметить и особенности:
машинный цикл – 2 такта;
разрядность АЦП – 16 бит;
поддерживают ряд протоколов связи (UART, IrDA, SPI, I2S™, I2C, USB, CAN, LIN and SENT), ШИМ и прочее.
Также есть семейство 32 битных микроконтроллеров – PIC32MX, основные особенности:
работают на частоте до 120 мГц;
выполняют до 150 MIPS;
АЦП: 10-бит, 1 Msps (скорость квантования), до 48 каналов.
С какого PIC начать?
Новичкам стоит начать осваивать микроконтроллеры PIC с 8-битной линейки. Вообще, производитель заявляет о том, что особенностью всего семейства является лёгкая переносимость программ с одного семейства на другое и совпадения цоколевки ряда моделей.
Одним из популярнейших в среде радиолюбителей микроконтроллеров является PIC16f628A. Его технические характеристики такие:
Есть встроенный тактовый генератор. Вы можете настроить для работы с частотой 4 или 8 МГц;
18 пинов, из них 16 – ввод/вывод, а 2 – питание;
Для работы на частотах до 20 МГц можно подключить кварцевый резонатор, но в этом случае на ввод/вывод останется не 16, а 14 ног;
В маркировке есть буква F, это значит, что используется FLASH-память, объёмом в 2048 слов;
14-битные инструкции, 35 штук;
4 аналоговых входа;
На входах PORTB есть подтягивающие резисторы;
Два 8-битных таймера и один 16-битный;
Машинный цикл – 4 такта кварцевого резонатора или внутреннего генератора);
USART – последовательный порт;
внутренний источник опорного напряжения;
питается от 3.3 до 5 В.
Причинами популярности является низкая цена и возможность тактирования от внутреннего генератора.
Какая цоколевка у 16f628 изображено ниже:
Блочная внутренняя схема этого микроконтроллера изображена ниже.
Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств
На что следует обратить внимание на схеме в первую очередь?
У этого микроконтроллера есть два порта PORTA и PORTB. Каждый пин, каждого из них может использоваться как вход и выход, а также для подключения периферии или задействования других модулей микроконтроллера.
Рассмотрим эту часть схемы крупно.
Например, порты RB0-RB3 – могут выступать в роли аналоговых. К RA6, RA7 в случае необходимости подключается источник тактирования (кварцевый резонатор). Сами же выводы микроконтроллера настраиваются в режим входа/выхода с помощью регистра TRIS.
Для этого есть команды типа:
TRISA = 0; // Все выводы порта А устанавливаются как выходы
TRISB = 0xff; // Все выводы порта B назначаются как входы
TRISA0 = 1; // Так назначается отдельный пин как вход (1) или выход (0)
TRISA5 = 1 ; // здесь 5 вывод порта А – назначен входом
Вообще режимы работы, включение WDT (сторожевого таймера) выбор источника тактирования микроконтроллера и прочее настраивается с помощью регистров специального назначения — SFR, а память и данные хранятся в GFR – простыми словами это статическое ОЗУ.
Для удобства ниже приведены эти таблицы в виде картинок (нумерация регистров, как и всё в цифровой электронике начинается с 0, поэтому номер четвертого – 3).
Как подключить и на каком языке программировать?
Чтобы запустить этот микроконтроллер достаточно подать плюс на Vdd и минус на Vss. Если нужен кварцевый резонатор, то он подключается к выводам 16 и 15 (OSC1 и OSC2) микроконтроллера PIC16f628, для других контроллеров с большим или меньшим числом выводов – смотрите в datasheet. Но этот момент нужно указывать при программировании и прошивке.
Кстати о переносимости и совпадении цоколевки – на 16f84A – она аналогична, и на многих других.
Фрагмент схемы с подключенным к pic16f628a внешним резонатором:
Есть два основных языка для программирования микроконтроллеров PIC – это assembler и C, есть и другие, например PICBasic и т.д. Еще можно выделить упрощенный язык программирования JAL (just another language).
Для примера ниже приведена программа для «мигания светодиодом» — своего рода «Hello World» для микроконтроллера PIC на языке C.
В 1 строке подключается библиотека микроконтроллеров PIC, далее подключается библиотека программы задержки.
В функции main(void) в начале устанавливаются начальные параметры, подобно тому как мы это делали в функции Void setup () – в статьях об ардуино. Далее в строках 11-16 объявляется бесконечный цикл while(1), в ходе которого и выполняется программа «мигания светодиодом».
В примере состояние порта постоянно инвертируется, т.е. если он был в «0», то перейдет в «1» и наоборот. На C для PIC есть следующие команды управления команды:
PORTA = 0; // переводит все пины порта А в низкий уровень (лог. 0)
PORTB = 0xff; // переводит все пины порта B в высокий уровень (лог. 1)
RB5 = 1; // На пятом выводе порта B высокий уровень
А так выглядит та же программа, но уже на языке JAL, я перевел на русский язык комментарии от разработчиков встроенных примеров в JALedit (среда разработки).
Возникает соблазн выбрать JAL, и вам он может показаться проще. Безусловно на нём можно реализовать любые проекты, но с точки зрения пользы для вас как для специалиста – это бесполезный язык. Значительно больших результатов вы добьетесь, изучая синтаксис и принципы программирования на языке C (большая часть популярных сейчас языков C-подобны) или на Assembler – это низкоуровневый язык, который заставит вас понимать принцип работы устройства и что происходит в программе в каждый конкретный момент времени.
В чем работать
Если сказать совсем обобщенно для работы с любыми микроконтроллерами нужно:
1. Текстовый редактор.
3. Программа для загрузки прошивки в микроконтроллер.
И я даже читал старые учебники, где автор, работая из-под DOS писал код, компилировал и прошивал его разными средствами. Сейчас же под все популярные операционные системы есть среды для разработки, как узкоспециализированные (для конкретного семейства микроконтроллеров или семейств от одного производителя) так и универсальные (либо содержат все необходимые инструменты, либо они подключаются в виде плагинов).
Например, в цикле статей об Arduino мы рассматривали среду Arduino IDE в ней же мы и код писали и с её помощью «заливали» прошивку в «камень». Для микроконтроллеров PIC есть такие программы, как:
MPASM — используется для разработки на языке Assembler от фирмы Microchip ;
MPLAB — также IDE от Microchip для PIC-контроллеров. Состоит из множества блоков для тестирования, проверки, работы с кодом и компиляции программ и загрузки в микроконтроллер. Также есть версия MPLAB X IDE – отличается большим функционалом и построена на базе платформы NetBeans ;
MikroC — универсальная среда (не только для ПИКов) для разработки. Как видно из названия «заточена» под программирование на C, а также есть такие программы как MikroBasic и MikroPascal, для соответствующих языков ;
JALedit — подходит для языка JAL, о котором мы упоминали выше ;
И ряд других менее известных.
Как прошивать микроконтроллер?
Для PIC-микронотроллеров есть ряд программаторов. Официальным считается PICkit. Их 4 версии. Но можно прошивать и универсальными, например, TL866 (он поддерживает почти всё, что может понадобится начинающему радиолюбителю, при этом очень дешевый).
Также в сети есть ряд различных схем программаторов для ПИКов, как для работы через COM-порт:
Так и через USB (на самом деле тоже com, только через преобразователь на ИМС MAX232).
Заключение
Микроконтроллеры PIC16 подходят для простых проектов, типа простой автоматики, вольтметров, термометров и прочих мелочей. Но это не значит, что нельзя делать на этом семействе сложные и большие проекты, я привел пример того для чего чаще всего их используют. Для общего представления рекомендую посмотреть несколько видео:
В одной статье рассматривать темы о том, как программировать микроконтроллеры, неважно какого семейства, безсмысленно. Поскольку это очень большой объём информации. Для начинающих советую к прочтению:
Катцен С. — PIC-микроконтроллеры. Все что вам необходимо знать;
Кёниг А. — Полное руководство по PIC микроконтроллерам;
Шпак Ю.А. — Программирование на языке С для AVR и PIC микроконтроллеров;
Магда Ю.С. — Микроконтроллеры PIC: архитектура и программирование;
Яценков В.С. — Микроконтроллеры Microchip. Практическое руководство.
Микроконтроллеры PIC. Вводная.
Что-то никто не хочет написать про микроконтроллеры фирмы Microchip, вот и решил я запилить статейку — может кому пригодится.
О том, что же это за звери такие, какие они бывают и что умеют неплохо написано в вики-пики и, естественно, на официальном сайте.
В номенклатуре Microchip Technology Inc. представлен широкий спектр 8-и, 16-и и 32-битных микроконтроллеров и цифровых сигнальных контроллеров под маркой PIC. Номенклатура насчитывает более 500 различных контроллеров со всевозможными вариациями периферии, памяти, количеством выводов, производительностью, диапазонами питания и температуры…
Вот и всё касательно ядра. Остальное считается периферией, основные модули, присутствующие во всех МК это порты ввода/вывода, прерывания и таймеры, но это уже совсем другая тема.
Намекну лишь, что есть ещё слово конфигурации — область памяти в которой хранятся постоянные параметры (режим генератора, биты защиты, биты включения некоторых аппаратных функций, режим работы вывода сброса), а программируется это дело в процессе прошивки.
Без внимания остались также вопросы системы команд, программирования, прошивки, отладки, мигания светодиодом, etc…
Ссылки:
www.microchip.com
microchip.com.ru
www.microchip.ru
Активно пользовал «справочник по среднему семейству микроконтроллеров PIC-micro» — перевод оригинальной технической документации DS33023A с microchip.ru, а также даташиты (в оригинале).
з.ы. опыт работы с пиками — один раз зашил готовую прошивку. в эмулях когда-то ковырялся, а тут пару дней ДШ читал, да вам писал. Первая моя статья, так что любая критика приветствуется. Знаю, что тут обитают те, кто работал с этими МК, не стесняйтесь дополнять, поправлять, я мог что-то упустить или в чём-то ошибиться.
Если интересно, то в свободное время попробую написать продолжение, дальше по сути нужно писать про софт, программатор, систему команд и периферию, в таком порядке.
Всем дочитавшим до конца — спасибо!
PIC-микроконтроллеры, где могут пригодиться радиолюбителю?
Среди множества семейств микроконтроллеров от разных производителей радиолюбители полюбили два – AVR и PIC. Микроконтроллеры PIC производятся компанией Microchip.
Энтузиастами и любителями в области электроники часто используются как для сборки готовых проектов, так и для разработки своих малых автоматизированных систем. Для примера многие встраиваемые вольт-амперметры из Китая построены на базе PIC-контроллеров.
Виды микроконтроллеров PIC и их архитектура
Пожалуй, среди начинающих очень распространены микроконтроллеры пик младших моделей, а именно семейств:
Эти микроконтроллеры 8-битные, при этом различают две архитектуры:
В разработках радиолюбителей очень часто встречается модель 16f628. Конфигурация этого pic-микроконтроллера следующая, в нём есть:
PIC16 имеют низкую цену и достаточно развитую аналоговую периферию, что и обеспечивает их популярность. При этом модели могут выпускаться в корпусах с количеством ножек от 18 до 40. Это позволяет делать более сложные системы, чем возможно на вышеприведенном примере.
Существуют и более мощные модели, например, 16-битные:
Они способны выполнять 16 MIPS (миллионов итераций в секунду), что обеспечивает весьма высокое быстродействие вашей системы при 2 при двухтактном машинном цикле, такая скорость обеспечивается частотой в 32 МГц. 40 MIPS достигается при 80 МГц соответственно.
32-битные микроконтроллеры PIC32MX имеют большую производительность и превосходящий объём памяти, если сравнивать с 16-битными моделями, и работают на частоте в 80 МГц.
Сфера применения PIC-микроконтроллеров
Как уже было сказано, семейство PIC16 очень любят радиолюбители. К тому же оно хорошо описано в большом количестве литературы. По количеству учебников с семейством PIC, на момент написания статьи, может посоревноваться только семейство AVR.
Давайте рассмотрим несколько схем с применением микроконтроллеров семейства PIC.
Таймер для управления нагрузкой на PIC16f628
Простейшая автоматика на микроконтроллерах PIC – это стихия 8-битного семейства. Их объём памяти не позволяет делать сложных систем, но отлично подходит для самостоятельного выполнения пары поставленных задач. Так и эта схема трёхканального таймера на Pic16f628, поможет вам управлять нагрузкой любой мощности. Мощность нагрузки зависит только от установленного реле/пускателя/контактора и пропускной способности электросети.
Настраивается прибор с помощью набора из 4-х кнопок SB1-SB4, на HG1 выводятся параметры, это дисплей типа LCD на 2 строки по 16 символов. В схеме используется внешний кварцевый резонатор на 4 МГц, а KV1 – это реле, с питанием катушки в 24 В, вы можете использовать любое реле, лишь бы оно подходило по напряжению катушки к вашему БП. МК питается от 5 В стабилизированного источника.
Вы можете использовать от 1 до 3 каналов в управлении нагрузкой, стоит только продублировать схему, добавив реле к выводам RA3, RA4 микроконтроллера.
Часы-будильник на МК PIC16f628A
Такие часы, согласно заявлениям разработчика, получились весьма точными, их погрешность весьма мала – порядка 30 секунд в год.
С незначительными переделками вы можете использовать любые 7-мисегментные индикаторы. Питаются от блока питания на 5В, при этом, при отключении от сети продолжают работать от батареек, что вы можете увидеть в правом верхнем углу схемы.
Регулятор мощности паяльника на PIC16f628A
У начинающих радиолюбителей не всегда есть возможность купить паяльную станцию. Но они могут собрать её сами. На схеме ниже представлен регулируемый блок питания на PIC16f628, для работы паяльника. В основу схемы вложено фазоимпульсное управление. Это, по сути, доработанный и осовремененный аналог классического тиристорного регулятора, но с микроконтроллерным управлением.
Схема довольно простая, в нижней части реализация светодиодной индикации. Главный силовой элемент – тиристор BT139, а MOC3041 – нужен для гальванической развязки МК от сети и управления тиристором с помощью логического уровня в 5 В.
Как прошивать микроконтроллер? С чего начать изучение?
Официальный программатор для семейств PIC – это PICkit V3, является наиболее распространенным. Программный код загружается в чип с помощью ПО, которое есть на диске, он идёт в комплекте с программатором. IDE имеет название MPlab. Является официальной средой разработки от производителя, между прочим, бесплатной. Для изучения устройств есть отличная книга на русском языке «Pic-микроконтроллеры. Полное руководство» автор её Сид Катцен. Кроме этой книги вы найдете огромное количество видео-уроков и текстовых материалов, которые вам помогут.
Применение микроконтроллеров PIC весьма широко, многие радиолюбители собирают металлоискатели и счетчики Гейгера на этих МК.


























