Компания microchip расширила семейство 8-битных pic® микроконтроллеров серии pic16f178x

Микроконтроллеры Процессоры, проекты, программирование

Nav view search

Навигация

Искать

  • Микроконтроллеры
    • Микроконтроллеры
    • Отладочные платы
    • Языки программирования
    • Разное
  • Микроконтроллеры 8 бит
  • Микроконтроллеры 32 бит
  • Периферийные устройства
  • Проекты

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

Улучшенное ядро микроконтроллеров серии PIC16

Микроконтроллеры серии PIC 16 одно время находились на вершине популярности. Хорошо отработанное ядро, высокая надежность и простота освоения делали эти микросхемы востребованными среди самого широкого круга любителей и специалистов. Но техника не стоит на месте и с началом массового распространения ARM -микроконтроллеров, старые 8-ми битные системы начали сдавать позиции. При этом многие преимущества все равно остались за ними и компании-производители, пытаясь сохранить позиции, постоянно совершенствуют свои изделия. Коснулось это и серии PIC 16.

Микроконтроллеры фирмы Microchip стали дверью в мир программируемой электроники для многих тысяч разработчиков. Долгое время самой востребованной считалась серия PIC 16 F , построенная на базе ядра так называемого среднего семейства Midrange . 8-ми разрядное ядро с 14-ти разрядной шиной команд, обеспечивало выполнение инструкций за 4 такта. 35 простых команд, позволяли управлять широким набором периферийных устройств, среди которых использовались таймеры, модули АЦП и ЦАП, блоки ШИМ и захвата сигналов, интерфейсы UART , SPI и I 2 C . Объем памяти программ зависел от модели контроллера и мог варьироваться от 1 до 8 К слов. В составе семейства выпускались микросхемы с количеством выводов от 14 до 64 в корпусах DIP , SOIC , SSOP , DFN , QFN .

С целью сохранения позиций Microchip произвел улучшение схемы процессора и изменение норм технологического процесса. Результатом стало ядро улучшенного среднего семейства Enhanced Mid — Range и микросхемы на его основе. Если не брать в расчет маркировку, то серия PIC 16 F получила фактически новое ядро, сильно приближенное по возможностям к моделям PIC 18.

Структурная схема улучшенного ядра PIC16

Первое, что бросается в глаза в новых микроконтроллерах – расширенная система команд. Вместо традиционных 35, сейчас используется 49 инструкций. Добавились следующие команды:

  • ADDWFC – сложение содержимого произвольного регистра, аккумулятора и флага переноса.
  • SUBWFB – вычитание из содержимого произвольного регистра значения находящегося в аккумуляторе и инвертированного флага переноса.
  • LSLF – логический сдвиг регистра влево через бит переноса. Младший бит устанавливается равным 0.
  • LSRF – логический сдвиг регистра вправо через бит переноса. Старший бит устанавливается равным 0.
  • MOVLB – Загрузка 5-ти разрядной константы в BSR (Выбор банка памяти)
  • MOVLP – загрузка 7-ми разрядной константы в PCLATH
  • BRA – Сложение содержимого программного счетчика и девятиразрядной константы.
  • BRW — Сложение содержимого программного счетчика и регистра аккумулятора.
  • CALLW – вызов подпрограммы. Младшая часть адреса перехода находится в аккумуляторе, старшая в PCLATH .
  • ADDFSR – сложение константы с содержимым одного из регистра косвенной адресации
  • MOVIW – загрузка содержимого одного из регистров c косвенной адресацией INDF в аккумулятор с предварительным или последующим инкрементом или декрементом регистра указателя FSR
  • MOVWI — загрузка содержимого аккумулятора в один из регистров косвенной адресации INDF с предварительным или последующим инкрементом или декрементом регистра указателя FSR
  • RESET – программный сброс микроконтроллера
  • OPTION – загрузка регистра OPTION _ REG в аккумулятор.
  • TRIS – загрузка содержимого регистра аккумулятора в TRISx

Большинство новых инструкций нацелено на упрощение организации внутрипрограммных переходов и работу с косвенной адресацией, что очень положительно сказывается при компиляции программ с языков высокого уровня. Наряду с дополнительными командами изменилась с 8 до 16 слов глубина стека, в который теперь добавлен контроль переполнения и опустошения, со сбросом процессора в случае возникновения аварийной ситуации. Увеличились доступные области памяти. Максимальный размер памяти программ теперь может составлять 32К слов, ОЗУ – 4кБ. Изменилась система косвенной адресации, для чего в состав ядра введен еще второй регистр FSR . Теперь для косвенного доступа открыто не только ОЗУ, но и память программ. Для работы с последней появился режим самопрограммирования. Улучшена и система обработки прерываний, главным новшеством которой стало автоматическое сохранение контекста в теневые регистры, что не требует внимания со стороны программиста и уменьшает программный код.

Существенным образом переработана и система питания с генератором частоты. В новых микроконтроллерах появилась возможность использовать два внешних источника тактового сигнала. Основной источник используется для тактирования ядра, дополнительный для работы с модулем TIMER 1. При использовании часового резонатора, такое решение позволяет создавать системы реального времени. В состав внутреннего тактового генератора введена система контроля работоспособности внешнего источника частоты, которая в случае возникновения неисправностей, автоматически переключит ядро на встроенный источник. Затронули изменения и сам внутренний генератор. Теперь его максимальная частота равна 32МГц.

По заявлению инженеров Microchip , указанные новшества повысили производительность микросхем на 50% по сравнению со старым вариантом. Затронули изменения и периферийные модули. Кроме существенно переработанных традиционных блоков, в составе новых микроконтроллеров появились такие необычные устройства, как настраиваемые логические ячейки ( CLC ), генераторы сигналов, программируемые переключатели и операционные усилители. Благодаря новым модулям значительно расширилась область использования PIC 16. Но, не смотря на все нововведения, старым 8-ми битным процессорам все сложнее конкурировать с 32-разрядными собратьями. Это даже вызывает некоторую грусть, так как, в общем-то, неплохие микроконтроллеры могут скоро исчезнуть с рынка. На сегодняшний день за них голосуют только простота освоения и наличие удобных корпусов. Во всем остальном, даже по цене, они уже полностью проигрывают старшим собратьям.

Микроконтроллеры 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 для первых экспериментов в подарок!

После прохождения курса в вашем портфолио будет: метостанция с функцией часов и встроенной игрой, распределенная сеть устройств, устройства регулирования температуры (ПИД-регулятор), устройство контроля влажности воздуха, система умного полива растений, устройство контроля протечки воды.

Вы получите диплом о профессиональной переподготовке и электронный сертификат, которые можно добавить в портфолио и показать работодателю.

PIC Урок 1. Знакомство с семейством PIC

Урок 1

Знакомство с семейством PIC

Наконец-то сегодня нашлось время познакомить вас с ещё одним семейством микроконтроллеров – это микроконтроллеры PIC.

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

Разработчиком данного семейства является компания Microchip, которая также ялвяется очень известной и её продукция востребована по всему миру.

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

Также к тому, чтобы поделиться своими знаниями в области программирования данной линейки, меня подтолкнуло то, что я видел много блогов, уроков (в том числе и видео) очень хорошего качества по контроллерам PIC именно с использованием языка ассемблер. А вот на языке C уроков очень мало, что подчёркивает их востребованность.

Поэтому замечу, что программировать МК PIC мы будем именно на языке C. Какую мы выберем среду программирования и компилятор, мы решим чуть позже, а пока же в данном уроке нас ждёт краткое знакомство с самими контроллерами, с их архитектурой и их разновидностями.

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

Например, те контроллеры AVR, с которыми мы до сих пор работаем, являются 8-битными, а контроллеры STM, которые мы изучаем – 32-битными.

Вот и контроллеры PIC также делятся по битности.

Первая линейка – это 8-битные контроллеры PIC. Наименование их моделей начинается с префикса PIC10/PIC12/PIC16.

Данная линейка также делится на 3 семейства.

1. BASELINE – данная архитектура присутствует у контроллеров PIC10. От более мощной серии она отличается количеством выводов (от 6 до 28), дешевизной.

2. MID-RANGE – данную архитектуру имеют ядра микроконтроллеров PIC12/PIC16. Количество выводов в данной серии увеличено (от 6 до 64), стоят они несколько дороже, зато имеют помимо 35 машинных инструкций, поддерживаемых серией BASELINE, ещё 14 дополнительных инструкций (оптимизированных под компилятор языка C). Также у данной серии производительность увеличена на 50%, они имеют более глубокий и улучшенный аппаратный стек, увеличенный объём памяти и некоторые прочие прелести, с которыми мы познакомимся в дальнейшем, так как, скорее всего, мы с данной серии и начнём процесс изучения программирования микроконтроллеров PIC.

3. 8-битовые микроконтроллеры PIC18 – это улучшенная серия контроллеров, здесь на борту много другой периферии, количество выводов от 18 до 100, производительность 16 MIPS, поддержка технологии NanoWatt, наличие программироуемого генератора.

Вторая линейка – это 16-битные контроллеры PIC. Они имеют префикс PIC24F и PIC24H. Это уже более мощные контроллеры. В отличие от первой линейки, машинная команда выполняется уже не за 4 такта генератора, а за 2. Также периферия еще более расширена по разновидностям шин, прямой доступ к памяти DMA (у PIC24H), расширенный набор инструкций. Также есть очень много других особенностей.

Третья линейка – это 32-битные контроллеры. Префикс у них уже PIC32. Частота тактирования таких контроллеров до 120 МГц, а у новой серии MZ – до 200 и даже выше. У меня, например, есть отладочная плата, на которой устрановлен контроллер PIC32MZ2048EFH064, у которого тактовая частота составляет 252 мегагерца. Также здесь ещё более увеличена производительность ядра. Данное семейство построено на ядре MIPS32®, которое также кроме высокой производительности отличается ещё и низким потреблением энергии.

Читайте также  Электронный трансформатор для галогенных ламп 12в с мягким стартом

Вообщем, вот такие вот краткие характеристики существующих на данный момент контроллеров PIC. Если брать по наименованиям, то наименований очень много, на любой, как говорится, вкус.

Также, как и рассмотренные, а также рассматриваемые нами контроллеры AVR и STM32, контроллеры PIC работают приблизительно по той же схеме. Сочиняется программа, собирается в машинный код, понятный арифметическо-логическому устройству контроллера, загружается (прошивается или заливается) в контроллер и затем обеспечивает работу по определённому алгоритму. Основной интерфейс, используемый для прошивки данных контроллеров – это ICSP, предназначенный для внутрисхемного программирования. Подробнее с ним мы познакомимся, когда будем прошивать данные контроллеры.

Давайте немного разберёмся с организацией памяти в контроллерах PIC. Так как мы начнём изучение семейства PIC с более простых 8-битных (принцип от простого – к сложному ведь не отменял никто), то и организацию памяти мы посмотрим у данной серии.

Сначала посомтрим блок-схему контроллера на примере МК PIC16F84A (нажмите на картинку для увеличения изображения)

В левом верхнем углу сразу бросается в глаза модуль памяти FLASH, в которой обычно хранится программа контроллера (прошивка). А в правом верхнем углу мы видим память EEPROM, которая уже исользуется для хранения данных. Эти два вида памяти являются энергонезависимыми и после отклчения и сброса контроллера не стираются. Но данная память не является быстрой, поэтому код при старте программы распределяется уже в память RAM (ОЗУ), которая уже является быстродействующей и предназначена для функционирования контроллера при работе. Поэтому данную память мы уже рассмотрим несколько поподробнее.

Оперативная память контроллера PIC делится на память программ и память данных.

Вот так организована память программ у контроллера PIC16F84A

Микроконтроллеры данной серии имеют счётчик команд, способный адресовать 8К x 14 слов памяти программ и 14-разрядную шину данных памяти программ. Вся память программ разделена на 4 страницы по 2 килослов каждая (0000h-07FFh, 0800h-0FFFh, 1000h-17FFh, 1800h-1FFFh). Ну это общая информация, поэтому у тех контроллеров, у которых память небольшая перемещение между данными страницами приведёт к циклической адресации. Поэтому размер памяти того контроллера, который мы хотим программировать, мы обязаны знать твёрдо. В общем случае память программ состоит из счётчика команд, стека нескольких уровней, память для хранения векторов прерываний, а также внутренней памяти программ.

Также немного познакомимся с организации оперативной памяти, отведённой под хранение данных.

Память данных разделяется на регистры общего назначения и регистры специального назначения. Посмотрим, как организована память данных контроллера PIC16F84A

Регистры специального назначения (SFR) – это регистры, которые предназначены для хранения строго отведённых величин и имеют определённые имена. С ними мы будем знакомиться постепенно, когда будем писать какой-то исходный код, который будет широко их использовать.

Регистры общего назначения (GPR) – это ячейки памяти, которые имеют только адреса и предназначены они для хранения любых данных.

Также из приведённого выше рисунка мы видим, что у нашего контроллера память данных разделена на 2 страницы (или банка) переход между которыми осуществляется посредством установки определённых битов в регистре STATUS. Поэтому данный регистр присутствует в обеих банках и обратиться к нему мы можем в любой момент, чтобы сменить текущую страницу памяти.

Адресация может быть как прямая, так и косвенная или относительная, когда адрес отсчитывается относительно текущего адреса. С этим мы возможно не будем знакомиться, так как такая задача возникает у программистов, которые пишут программы на ассемблере.

Соответственно, у каждого контроллера кроме памяти существует много чего ещё интересного, в том числе порты ввода-вывода. Наши контроллеры PIC – также не исключение. Посмотрим назначение ножек контроллера PIC16F84A

У данного контроллера два порта – порт A и порт B. Из порта A наружу выведены 5 ножек – RA0-RA4, а из порта B – все 8 ножек RB0-RB7.

Также ножки портов могут иметь и другое назначение в зависимости от того, как мы их сконфигурируем. Наример ножка 6 или RB0 может в любой момент превратиться в ножку для захвата внешних прерываний, а ножка 3 или RA4 – стать ножкой для тактирования таймера от внешнего генератора.

Тактирование МК PIC также может осуществляться как от внешнего генератора, так и от кварцевого резонатора, от внутреннего резистора, а также существует ещё несколько вариантов, которые поддерживают не все контроллеры данного семейства. На практике как правило используется тактирование от кварцевого резонатора. Скорее всего, мы также последуем данной традиции в наших дальнейших занятиях.

Думаю, на этом мы закончим знакомство с контроллерами PIC. Знакомство получилось кратким, но на первое время нам и этого хватит за глаза. С более расшифрованной информацией мы столкнёмся, когда будем сочинять наши программы. Так что ждите следующих занятий, которые обещают быть очень интересными. Мы познакомимся сначала с установкой среды и компилятора, изучим, как с ними работать, какие тонкости программирования присутствуют в настройках различной периферии, а также в работе с ней.

Смотреть ВИДЕОУРОК (нажмите на картинку)

Микроконтроллеры PIC. Вводная.

Что-то никто не хочет написать про микроконтроллеры фирмы Microchip, вот и решил я запилить статейку — может кому пригодится.

О том, что же это за звери такие, какие они бывают и что умеют неплохо написано в вики-пики и, естественно, на официальном сайте.

В номенклатуре Microchip Technology Inc. представлен широкий спектр 8-и, 16-и и 32-битных микроконтроллеров и цифровых сигнальных контроллеров под маркой PIC. Номенклатура насчитывает более 500 различных контроллеров со всевозможными вариациями периферии, памяти, количеством выводов, производительностью, диапазонами питания и температуры…

Оставив на будущее самостоятельное изучение 16/32-х битные и DS микроконтроллеры (МК) посмотрим поближе 8-ми битную линейку, которая, в свою очередь, состоит из 3-х семейств с различающейся архитектурой:

  • базового — Baseline, инструкции 12-ти битные, 35 команд;
  • среднего — Mid-Range и Enhanced Mid-Range, инструкции 14-ти битные, 35/49 команд;
  • старшего — PIC18, инструкции 16-ти битные, 83 команды.

Наглядно они представлены на нагло стыжженой картинке с их сайта. Там же имеется сводная табличка по основным характеристикам.

Так уж случилось, что наиболее популярными и часто встречающимися в любительских разработках МК являются PIC16x84(A) и PIC16x628, относящиеся к семейству Mid-Range, поэтому считаю их лучшими кандидатами для рассмотрения. К тому же 16F84 — единственное что есть у меня из PIC’ов.
Информация для сравнения легко находится на всё том же офф. сайте, а подробности, как всегда, в технической документации типа datasheet (ДШ).
Отдельно стоит упомянуть, что тип памяти программ может быть различным и определяется буквами в наименовании:

  • С — EPROM;
  • CR — ROM;
  • F — FLASH.

Подходящим вариантом для издевательств(конечно если вы не собираетесь пускать изделие в серию) я считаю флеш память, которая, кстати выдерживает до 1000 циклов стирания/записи (по ДШ, в реальности возможно и больше).

Так, с тем, что же будем изучать — разобрались. Дальше проще. Основные характеристики семейства:
RISC-ядро, гарвардская архитектура

  • тактовая частота до 20 МГц;
  • количество команд (инструкций) — 35;
  • все команды выполняются за один машинный цикл (4 такта), кроме команд ветвления;
  • адресуемая память команд — 8К слов (слово = 14 бит);
  • оперативная память — до 368 байт;
  • прямая, косвенная и относительная адресация для данных и инструкций;
  • аппаратный стек на 8 уровней;
  • поддержка прерываний.


Специальные возможности микроконтроллера смотрим в ДШ, обычно это варианты тактирования, программирования, виды подтяжек, наличие всяких собак, энергосбережений, защит кода и сбросов по появлению/падению питания, в общем всяческие «фичи». Там же смотрим сколько у нас памяти и какая есть периферия. Например, для PIC16F84 имеем:

  • Память программ — 1K слов FLASH;
  • Память данных ОЗУ — 68 байт;
  • Память данных ЭСППЗУ — 64 байт;
  • 13 линий ввода/вывода с индивидуальным контролем направления
  • Сильноточные схемы для непосредственного управления светодиодными индикаторами (макс. ток 25/20мА)
  • Timer0: 8-разрядный таймер/счетчик с 8-разрядным программируемым предделителем

Не густо, правда? Вот 628-й уже поинтереснее, посмотрите сами что в нём есть (типа домашнее задание, чтоб не скучали). Сказ о периферии нужно писать отдельно, в одну статью точно всё не влезет, так что пока могу лишь отослать. Куда? Да всё туда же — ДШ вам в руки.

А теперь подробнее о ядре семейства, смотрим схему и пытаемся понять что тут за что отвечает:

Тактовый генератор вырабатывает все необходимые сигналы для синхронизации процессов, происходящих в МК. Исполнение команды, находящейся в регистре инструкций, происходит за 4 такта генератора:

  • Q1: декодирование очередной инструкции;
  • Q2: чтение данных (при необходимости);
  • Q3: обработка данных;
  • Q4: запись данных (при необходимости).

Эта последовательность называется машинным циклом (м.ц.). В то же самое время из памяти выбирается следующая инструкция и в конце 4-го такта попадает в регистр инструкций для дальнейшего исполнения. Называется такое чудо конвейером. В командах перехода его приходится перезагружать (выбирать команду из памяти по новому адресу), поэтому-то они и требуют для исполнения 2 м.ц. Адрес выбираемой из памяти инструкции находится в счётчике команд.

Читайте также  Реле напряжения филин

Вычисления в МК производятся арифметико-логическим устройством (АЛУ), которое, в свою очередь при работе взаимодействует с регистрами. Основной регистр, используемый в вычислениях называется аккумулятором или рабочим регистром, обозначается W и не отображается на адресное пространство. Остальные регистры образуют память данных и делятся на 2 группы:

  • регистры специального назначения (SFR) — используются для управления ядром и периферией;
  • регистры общего назначения (GPR) — по сути просто оперативная память, доступная программисту.

Вот и подошли вплотную к организации памяти. Смотрим карту памяти, и…

… о, ужас! Вся оперативная память, называемая тут, как мы уже знаем, регистрами, оказывается разделена на блоки по 128 байт, называемые банками, между которыми как-то надо ещё и переключаться. Мало того, не только оперативка, но и регистры конфигурации (это которые SFR) также разбросаны по банкам. Беспредел полнейший! Но что поделаешь… Смотрим дальше и видим, что некоторые SFR всё-же дублируются (есть в нескольких или во всех банках). Сопоставляя вышесказанное можно предположить, что они относятся к настройкам ядра. Проверяем по ДШ:

  • STATUS — содержит флаги состояния АЛУ, флаги причины сброса, биты переключения банков памяти.

[7] IRP — бит выбора банка при косвенной адресации 0 — 0,1 (0x000-0x0FF); 1 — 2,3 (0x100-0x1FF);
[6-5] RP1:RP0 — биты выбора банка при непосредственной адресации;
[4] -TO — флаг переполнения сторожевого таймера
[3] -PD — флаг включения питания
[2] Z — флаг нулевого результата
[1] DC — флаг десятичного переноса/заёма
[0] C — флаг переноса/заёма

Ага, то что надо нашлось. Что ещё есть?
Обратиться к любому регистру можно используя прямую или косвенную адресацию, помним? Во втором случае используются 2 специальных регистра:

  • FSR — указатель адреса в памяти данных, используемый при косвенной адресации;
  • INDF — регистр, через который осуществляется обращение к памяти при косвенной адресации;

Счётчик команд:

  • PCL — младшая часть 13-ти битного счётчика команд PC;
  • PCLATH — буферный регистр для загрузки PCH (старшей части счётика)

Оппа! Старший, младший… что-то кажется такое уже было? Лезем подтверждать свои догадки — ага, всё правильно, и у программной памяти тоже хитрая разбивка — на 4 страницы по 2К слов:

Для адресации 2К необходимо 11 бит, из них младшие 8 доступны как PCL, а старшие 3, вместе с двумя битами номера страницы образуют PCH, недоступный напрямую, однако он изменяется автоматически при модификациях PCL:

  • при записи в регистр PCL — PCH целиком загружается из PCLATH;
  • при выполнении команды перехода — из PCLATH загружается только номер страницы, остальное из опкода;
  • при возврате по стеку — PCH и PCL загружаются из стека.

Стек служит для запоминания адресов возврата при вызове подпрограмм или прерываний и последующего возвращения по сохранённому адресу, имеет разрядность 14 бит (сохраняет весь PC) и ограничен глубиной в 8 уровней, что необходимо учитывать при активном использовании вложенных подпрограмм.

Вот и всё касательно ядра. Остальное считается периферией, основные модули, присутствующие во всех МК это порты ввода/вывода, прерывания и таймеры, но это уже совсем другая тема.

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

Без внимания остались также вопросы системы команд, программирования, прошивки, отладки, мигания светодиодом, etc…

Ссылки:
www.microchip.com
microchip.com.ru
www.microchip.ru
Активно пользовал «справочник по среднему семейству микроконтроллеров PIC-micro» — перевод оригинальной технической документации DS33023A с microchip.ru, а также даташиты (в оригинале).

з.ы. опыт работы с пиками — один раз зашил готовую прошивку. в эмулях когда-то ковырялся, а тут пару дней ДШ читал, да вам писал. Первая моя статья, так что любая критика приветствуется. Знаю, что тут обитают те, кто работал с этими МК, не стесняйтесь дополнять, поправлять, я мог что-то упустить или в чём-то ошибиться.
Если интересно, то в свободное время попробую написать продолжение, дальше по сути нужно писать про софт, программатор, систему команд и периферию, в таком порядке.
Всем дочитавшим до конца — спасибо!

PIC-микроконтроллеры, где могут пригодиться радиолюбителю?

Среди множества семейств микроконтроллеров от разных производителей радиолюбители полюбили два – AVR и PIC. Микроконтроллеры PIC производятся компанией Microchip.

Энтузиастами и любителями в области электроники часто используются как для сборки готовых проектов, так и для разработки своих малых автоматизированных систем. Для примера многие встраиваемые вольт-амперметры из Китая построены на базе PIC-контроллеров.

Виды микроконтроллеров PIC и их архитектура

Пожалуй, среди начинающих очень распространены микроконтроллеры пик младших моделей, а именно семейств:

  • Pic10;
  • Pic12;
  • Pic16.

Эти микроконтроллеры 8-битные, при этом различают две архитектуры:

  1. Baseline с 10-битными инcтрукциями с 35-ю ассемблерными командами.
  2. Mid-range с 14-битными инструкциями и 35 или 49 команд на языке ассемблера в зависимости от конкретной модели.

В разработках радиолюбителей очень часто встречается модель 16f628. Конфигурация этого pic-микроконтроллера следующая, в нём есть:

  • встроенный тактовый генератор может быть настроен на частоту 4 или 8 МГц;
  • 18 ножек – портов, из которых 16 может использоваться для ввода-вывода данных, 2 задействованы под питание;
  • возможность использовать кварцевый резонатор для работы на тактовых частотах до 20 МГц (тогда задействуют еще 2 ноги для него);
  • буква F в маркировке говорит о памяти типа Flash, объёмом на 2048 слов;
  • гарвардская архитектура, с 14-битными инструкциями, всего их 35 штук;
  • длина машинного цикла 4 такта (1 действие выполняется за 4 такта кварцевого резонатор или внутреннего генератора);
  • 224 байта ОЗУ;
  • 128 байт EEPROM;
  • USART – последовательный порт;
  • внутренний источник опорного напряжения;
  • питается от 3.3 до 5 В.

PIC16 имеют низкую цену и достаточно развитую аналоговую периферию, что и обеспечивает их популярность. При этом модели могут выпускаться в корпусах с количеством ножек от 18 до 40. Это позволяет делать более сложные системы, чем возможно на вышеприведенном примере.

Существуют и более мощные модели, например, 16-битные:

  1. PIC24x
  2. DsPIC30/33F – для цифровой обработки сигналов.

Они способны выполнять 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 весьма широко, многие радиолюбители собирают металлоискатели и счетчики Гейгера на этих МК.