Микроконтроллеры PIC для начинающих
Микроконтроллеры 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 такта кварцевого резонатора или внутреннего генератора);
128 байт EEPROM;
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 – простыми словами это статическое ОЗУ.
В официальном Datasheet, на страницах 18-21 вы найдете 4 банка памяти регистров специального назначения SFR и регистров общего назначения GFR. Знание регистров важно, поэтому распечатайте и выучите указанные страницы из Datasheet .
Для удобства ниже приведены эти таблицы в виде картинок (нумерация регистров, как и всё в цифровой электронике начинается с 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. Практическое руководство.
Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!
Записывайтесь в онлайн-университет от GeekBrains:
Изучить C, механизмы отладки и программирования микроконтроллеров;
Получить опыт работы с реальными проектами, в команде и самостоятельно;
Получить удостоверение и сертификат, подтверждающие полученные знания.
Starter box для первых экспериментов в подарок!
После прохождения курса в вашем портфолио будет: метостанция с функцией часов и встроенной игрой, распределенная сеть устройств, устройства регулирования температуры (ПИД-регулятор), устройство контроля влажности воздуха, система умного полива растений, устройство контроля протечки воды.
Вы получите диплом о профессиональной переподготовке и электронный сертификат, которые можно добавить в портфолио и показать работодателю.
Термостат.
В данном рассказе пойдёт речь о повторении мной много где клонированной конструкции термостата на тину 2313 и DC12B20.
Это не пример для повторения. Просто я хочу показать некоторым сомневающимся что я таки что-то делаю.
Поскольку я последнее время не вылезаю из командировок тут будет показан процесс создания не материальной части прибора.
Перед изготовлением чего либо я сначала выясняю можно ли это купить в готовом исполнении.
В данном случае не получилось. Нашёл готовую конструкцию:
electronics-lab.ru/blog/mcu/60.html
И так задача:
Контролировать нагрев двух вот таких вот тенов www.42unita.ru/catalog/nagrevateli/Nagrevatel_100Vt_HG_14007_0_00_18d
На них устанавливается ванна для травления плат. До этого я использовал часть утюга, зажатую в тисах — не очень удобно.
Корпус пока не придумал, но уже есть идеи.
Изменения касательно оригинальной схемы такие:
на индикаторе всего 2 цифры (поскольку целевая температура 45 градусов плюс минус 1).
Плата индикатора контроллера и кнопок отдельная от блока питания и силовой коммутации.
Логика работы прибора такая: при помощи кнопок + — и «режим» выставляем температурную дельту. для переключения режимов настройки применяется короткое нажатие на кнопку «режим». При перезаключении режимов настройки настраиваемого режима сохраняются. После того как верхнее и нижнее значение дельты установлено нужно нажать и удерживать кнопку «режим» в течении минимум 5сек. после этого значения дельты термостата записываются в еепром, а термостат выводит нагреватели на режим.
Возможно стоит поставить настройку времени в секундах за которое нагреватель должен выйти на режим. и если этого не произошло то отключит нагрузку.
При работе нагревателя термостат показывает реальную температуру на нагревателях. Короткое нажатие на «режим» приводит к переключению последовательно настройки пределов дельты кнопками + и -. Значения при таких настройках после отключения не сохраняются.
Нажатие и удержание кнопки «режим» приводит к отключению нагревателей и переходу в режим остывания.
При остывании экран мигает и показывает текущую температуру нагревателей.
Этот режим является стартовым после включения питания.
Схема будет делаться по плате.
Первичная версия платы индикатора выглядит так:
Блок питания будет из платы блока питания от медиаконвертера выдраной из родного корпуса.
Силовая часть будет на основе симистора с небольшим радиатором.
Корпус предполагается из фанеры 10мм нижняя часть и 3мм кожух электроники.
Как доберусь до дому попробую воплотить устройство в реальности.
Вторая версия будет использована в качестве контроллера плитки для приготовления хим растворов.
В общем я надеюсь что таки смогу что-то сделать за 2 недели дома.
Прочитав коменты и интернеты нашёл такое решение:
Систему автоподстройки коэфициэнтов пока не раскурил 🙁
Датчик с цифровым выходом решил использовать для другого устройства. В этом решил использовать LM35 валяющийся без дела ибо он при однополярном питании имеет предел >0 и приемлимую линейность.
Контроллер заменю на мегу8 или что-то подобное с ацп.
Вот как-то так поменялась мысль пока я был за полярным кругом.
Решено Проблема с программированием PIC16F628A
Информация Неисправность Прошивки Схемы Справочники Маркировка Корпуса Сокращения и аббревиатуры Частые вопросы Полезные ссылки
Справочная информация
Этот блок для тех, кто впервые попал на страницы нашего сайта. В форуме рассмотрены различные вопросы возникающие при ремонте бытовой и промышленной аппаратуры. Всю предоставленную информацию можно разбить на несколько пунктов:
- Диагностика
- Определение неисправности
- Выбор метода ремонта
- Поиск запчастей
- Устранение дефекта
- Настройка
Неисправности
Все неисправности по их проявлению можно разделить на два вида — стабильные и периодические. Наиболее часто рассматриваются следующие:
- не включается
- не корректно работает какой-то узел (блок)
- периодически (иногда) что-то происходит
О прошивках
Большинство современной аппаратуры представляет из себя подобие программно-аппаратного комплекса. То есть, основной процессор управляет другими устройствами по программе, которая может находиться как в самом чипе процессора, так и в отдельных микросхемах памяти.
На сайте существуют разделы с прошивками (дампами памяти) для микросхем, либо для обновления ПО через интерфейсы типа USB.
Схемы аппаратуры
Начинающие ремонтники часто ищут принципиальные схемы, схемы соединений, пользовательские и сервисные инструкции. Это могут быть как отдельные платы (блоки питания, основные платы, панели), так и полные Service Manual-ы. На сайте они размещены в специально отведенных разделах и доступны к скачиванию гостям, либо после создания аккаунта:
- (запросы) (хранилище) (запросы) (запросы)
Справочники
На сайте Вы можете скачать справочную литературу по электронным компонентам (справочники, таблицу аналогов, SMD-кодировку элементов, и тд.).
Marking (маркировка) — обозначение на электронных компонентах
Современная элементная база стремится к миниатюрным размерам. Места на корпусе для нанесения маркировки не хватает. Поэтому, производители их маркируют СМД-кодами.
Package (корпус) — вид корпуса электронного компонента
При создании запросов в определении точного названия (партномера) компонента, необходимо указывать не только его маркировку, но и тип корпуса. Наиболее распостранены:
- DIP (Dual In Package) – корпус с двухрядным расположением контактов для монтажа в отверстия
- SOT-89 — пластковый корпус для поверхностного монтажа
- SOT-23 — миниатюрный пластиковый корпус для поверхностного монтажа
- TO-220 — тип корпуса для монтажа (пайки) в отверстия
- SOP (SOIC, SO) — миниатюрные корпуса для поверхностного монтажа (SMD)
- TSOP (Thin Small Outline Package) – тонкий корпус с уменьшенным расстоянием между выводами
- BGA (Ball Grid Array) — корпус для монтажа выводов на шарики из припоя
Краткие сокращения
При подаче информации, на форуме принято использование сокращений и аббревиатур, например:
Сокращение | Краткое описание |
---|---|
LED | Light Emitting Diode — Светодиод (Светоизлучающий диод) |
MOSFET | Metal Oxide Semiconductor Field Effect Transistor — Полевой транзистор с МОП структурой затвора |
EEPROM | Electrically Erasable Programmable Read-Only Memory — Электрически стираемая память |
eMMC | embedded Multimedia Memory Card — Встроенная мультимедийная карта памяти |
LCD | Liquid Crystal Display — Жидкокристаллический дисплей (экран) |
SCL | Serial Clock — Шина интерфейса I2C для передачи тактового сигнала |
SDA | Serial Data — Шина интерфейса I2C для обмена данными |
ICSP | In-Circuit Serial Programming – Протокол для внутрисхемного последовательного программирования |
IIC, I2C | Inter-Integrated Circuit — Двухпроводный интерфейс обмена данными между микросхемами |
PCB | Printed Circuit Board — Печатная плата |
PWM | Pulse Width Modulation — Широтно-импульсная модуляция |
SPI | Serial Peripheral Interface Protocol — Протокол последовательного периферийного интерфейса |
USB | Universal Serial Bus — Универсальная последовательная шина |
DMA | Direct Memory Access — Модуль для считывания и записи RAM без задействования процессора |
AC | Alternating Current — Переменный ток |
DC | Direct Current — Постоянный ток |
FM | Frequency Modulation — Частотная модуляция (ЧМ) |
AFC | Automatic Frequency Control — Автоматическое управление частотой |
Частые вопросы
После регистрации аккаунта на сайте Вы сможете опубликовать свой вопрос или отвечать в существующих темах. Участие абсолютно бесплатное.
Кто отвечает в форуме на вопросы ?
Ответ в тему Проблема с программированием PIC16F628A как и все другие советы публикуются всем сообществом. Большинство участников это профессиональные мастера по ремонту и специалисты в области электроники.
Как найти нужную информацию по форуму ?
Возможность поиска по всему сайту и файловому архиву появится после регистрации. В верхнем правом углу будет отображаться форма поиска по сайту.
По каким еще маркам можно спросить ?
По любым. Наиболее частые ответы по популярным брэндам — LG, Samsung, Philips, Toshiba, Sony, Panasonic, Xiaomi, Sharp, JVC, DEXP, TCL, Hisense, и многие другие в том числе китайские модели.
Какие еще файлы я смогу здесь скачать ?
При активном участии в форуме Вам будут доступны дополнительные файлы и разделы, которые не отображаются гостям — схемы, прошивки, справочники, методы и секреты ремонта, типовые неисправности, сервисная информация.
Полезные ссылки
Здесь просто полезные ссылки для мастеров. Ссылки периодически обновляемые, в зависимости от востребованности тем.
Термометр на микроконтроллере PIC16F628A и цифровом датчике DS1620. Контроль через Интернет
Это электронный термометр с выводом температуры на ЖК-дисплей.
Температура окружающей среды измеряется каждые 840 мс при помощи цифрового датчика DS1620, фирмы Dallas Semiconductor. Одна из кнопок позволяет переключить экран, на котором отображается максимальная и минимальная температура:
Вторая кнопка сбрасывает значения температуры мин./макс.Как вариант, можно подключить устройство к компьютеру (через RS232). Температура передается на компьютер с устройства, управляемого микроконтроллером 16F628A. Приложение, установленное на компьютере, показывает температуру в реальном времени и выводит её на график. С другой стороны, приложение позволяет запрограммировать два предельных значения температуры термостата DS1620.
2. Принципиальная схема:
Версия № 1: без интерфейса RS232;
Версия № 2: с помощью RS232
ПРИМЕЧАНИЕ: Прошивка для микроконтроллера одна и таже для обоих вариантов.
3. Обзор датчика температуры DS1620
4. Принцип работы ЖК-дисплея (параллельный интерфейс)
5. Принцип работы устройства
5-1. Без интерфейса RS232;
После подачи напряжения, микроконтроллер 16F628A опрашивает датчик температуры DS1620 (команда Write Config с CPU = 1 и 1SHOT = 0, затем команда Start Convert T) и настраивает ЖК-дисплей (команда Set Function для использования в режиме интерфейса 4 бита). Модуль Timer1 (16 бит) микроконтроллера 16F628A активируется, что приводит к прерыванию приблизительно каждые 105 мс. При каждом прерывании модуля Timer1, опрашивается состояние кнопки SELECTION ECRAN и кнопки RESET MIN/MAX. Каждые 8 прерываний (около 840 мс) происходит чтение температуры и информация на ЖК-дисплее обновляется:
5-2. Через порт RS232
Относительно работы без интерфейса RS232, добавляются два прерывания:
- Прерывание приема UART (сообщает микроконтроллеру, что он получил данные от компьютера через RS232)
- Прерывание передачи UART (сообщает микроконтроллеру, что UART собирается передать данные на компьютер)
5-2-1. Кабель связи между компьютером и устройством.
Конечно же нужен компьютер, который имеет COM-порт (разъем SUB-D, 9 контактов «папа»). Нужно подключить нуль-модемный кабель (кабель с перекрёстным соединением) между компьютером и устройством. Если у вас его нет, вы можете легко его сделать (нужно 3 провода и 2 разъема SUB-D, 9 контактов «мама»).
5-2-2. Протокол связи между компьютером и устройством.
Компьютер посылает команду. Микроконтроллер отвечает.
Компьютер посылает 3 байта (через RS232):
Команда DS1620 | 1-ый байт (код команды) | 2-ой байт (данные) | 3-ий байт (данные) |
Read Temperature (каждые 1000 мс) | 0хАА | 0х00 (не используется) | 0х00 (не используется) |
Read TH (чтение высокой температуры термостата) | 0хА1 | 0х00 (не используется) | 0х00 (не используется) |
Read TL (чтение низкой температуры термостата) | 0хА2 | 0х00 (не используется) | 0х00 (не используется) |
Write TH (запись высокой температуры термостата) | 0х01 | (0000000 D8) | (D7 … D0) |
Write TL (запись низкой температуры термостата) | 0х02 | (0000000 D8) | (D7 … D0) |
Получив же их, микроконтроллер передает команду датчику DS1620 (через 3-проводной последовательный порт, синхронный). В случае команды чтения (Read Temperature, TH Read, Read TL), термометр DS1620 отправляет данные в микроконтроллер (температура в виде двоичного числа 9 бит, закодированных в дополнение в 2). Это число передается без изменений на компьютер в виде 2-х байт:
1-й байт: (0000000 D8)
2-й байт: (D7 … D0)
D0 = бит
Для других команд, микроконтроллер посылает компьютеру два байта 0x00 (через RS232).