Микроконтроллеры 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 для первых экспериментов в подарок!
После прохождения курса в вашем портфолио будет: метостанция с функцией часов и встроенной игрой, распределенная сеть устройств, устройства регулирования температуры (ПИД-регулятор), устройство контроля влажности воздуха, система умного полива растений, устройство контроля протечки воды.
Вы получите диплом о профессиональной переподготовке и электронный сертификат, которые можно добавить в портфолио и показать работодателю.
Источник
Частотомер на PIC16F73 и семисегментных индикаторах
Дата публикации: 01 мая 2012 .
Предлагаемый частотомер собран на микроконтроллере и семисегментных светодиодных индикаторах с общим катодом. Его разрешающая способность составляет 0,1 Гц, что может быть полезным при проведении точных измерений.
Основные технические характеристики
Диапазон измеряемых частот, МГц . 0.1 Гц. 40
Время измерения частоты, с . .1 или 10
Чувствительность, В. 0,1
Напряжение питания, В . 4,5. .5
Потребляемый ток, мА:
в режиме ожидания. 10
максимальный . 35
Схема частотомера показана на рис. 1 На входе устройства установлен компаратор DA1, который включен по типовой схеме с инвертирущим входом. Порог срабатывания компаратора можно изменять подборкой резистора R4 — чем больше его сопротивление, тем выше порог. Работа компаратора управляется сигналом на входе LATCH (вывод 5) DA1 который поступает с линии порта RA3 (вывод 5 DD1), и разрешена при низком логическом уровне на этом входе.
Рисунок 1
Порт В микроконтроллера DD1 задействован для подачи напряжения на элементы а—h индикаторов HG1. HG2, а порт С — для подключения катодов этих индикаторов к общему проводу. Резистор R7 является «подтягивающим» для линии порта RAO, a R6 уменьшает влияние на компаратор DA1 импульсов, поступающих на вход предделителя в режиме досчета. Резисторы R8—R15 токоограничивающие от их сопротивлений зависит яркость свечения индикаторов HG1, HG2.
Входной сигнал преобразуется компаратором DA1 в прямоугольные импульсы с уровнями ТТЛ, которые поступают на вход микроконтроллера для их дальнейшего счета Восьмиразрядные регистры предделителя, таймера TMR0 и двух счетчиков прерывания по переполнению TMR0 подсчитывают эти импульсы. Измерительный интервал задает таймер TMR1.
Информация в регистрах таймера TMR0 и счетчиков доступна для чтения, а вот содержимое высокочастотного (до 90 МГц) регистра предделителя недоступно. Поэтому для извлечения информации, хранящейся в нем, применен ставший уже классическим способ досчета импульсов до переполнения предделителя. После остановки счета значение TMR0 сохраняется в цифровом компараторе. Число поданных на вход предделителя импульсов подсчитывается, и после каждого импульса сравниваются текущее и сохраненное значения TMR0. При изменении текущего значения TMR0 подача импульсов на предделитель прекращается. Накопленное в младшем регистре число, преобразованное в дополнительный код, и будет тем числом, которое было в предделителе. Двоичный код на выходах четырех восьмиразрядных регистров преобразуется в двоично-десятичный, а затем в код для управления семиэлементными индикаторами.
После подачи питающего напряжения осуществляется инициализация регистров микроконтроллера. Частота переключения разрядов при динамической индикации должна быть такой, чтобы не было видно мерцания индикатора. Как известно, эта частота должна быть не ниже 25 Гц. Выбранная длительность индикации одного разряда на восьмиразрядном индикаторе составляет 3 мс, поэтому частота переключения F= 1/Т= 1/(0,003-8) = 41,7 Гц, где F — частота обновления индикатора; Т — период. При такой частоте мерцание индикатора не заметно.
Периодически микроконтроллер проверяет состояние контактов кнопки SB1. Если кнопка нажата, то состояние флага времени измерения изменяется на противоположное, при этом также изменяется положение запятой на индикаторе. Далее последовательно на индикатор выводится информация остальных разрядов. Последовательность вывода на индикацию нарушается только прерываниями.
В программе использованы два прерывания: одно — по результату сравнения значений шестнадцатеразрядных регистров специального события (CCPR1H и CCPR1L) и регистров таймера TMR1 (TMR1H и TMR1L). другое — по переполнению таймера TMR0. Регистры ССР1 и TMR1 используются для формирования временного интервала измерения частоты. Делитель на 10 для получения временного интервала 1 с и еще один делитель на 10 для получения интервала 10 с реализованы на отдельных регистрах, которые заполняются при прерывании
После сохранения значений контекстных регистров проверяются флаги прерывания. Если прерывание произошло по переполнению таймера TMR0. то инкрементируется счетчик и программа выходит из прерывания. При прерывании по результату сравнения модуля ССР1 заполняется регистр делителя на 10 и проверяется флаг времени измерения. Если установлено время измерения 10 с заполняется регистр делителя на 10. После окончания времени измерения выполняются досчет и определение содержимого предделителя. Полученные данные перекодируются в девять разрядов двоично-десятичного кода. Для экономии энергии батарей портативного прибора все незначащие нули гасятся. При выполнении операций во время прерываний работа таймеров TMR0 и TMR1 не останавливается, поэтому цикл измерения повторяется непрерывно
В устройстве применены резисторы С2-23, Р1-4, оксидный конденсатор — импортный, остальные керамические — К10-17. Компаратор AD8611 можно заменить на компаратор AD8561, кварцевый резонатор ZQ1 — HC-49U Кнопки SB1 и SB2 с самовозвратом — ПКн159. выключатель питания — кнопочный с возвратом в исходное положение повторным нажатием. Кнопка и выключатель должны иметь удлиненные (10 мм) толкатели
После включения питания в течение одной секунды во всех разрядах индикаторов появляются нули, а затем высвечиваются две запятые, выделяющие разряды единиц, десятков и сотен герц. При нажатии на кнопку SB1 запятые сдвигаются влево на один разряд. Если эти операции выполняются, частотомер готов к работе.
Налаживание сводится к установке частоты кварцевого генератора. Для этого на вход частотомера подают сигнал с известной частотой и подборкой конденсаторов С6 или установкой последовательно с резонатором конденсатора емкостью 10. 100 пф (на плате для него предусмотрено место, в которое предварительно монтируют проволочную перемычку) устанавливают это значение частоты на индикаторе Для облегчения процедуры можно установить подстроечные конденсаторы, например КТ4-25. Следует отметить, что для обеспечения точности измерения частоты в доли герц следует применить эти конденсаторы, а также кварцевый резонатор с повышенной термостабильностью.
Источник