Как начать работу с микроконтроллерами Pic для начинающих

Что такое микроконтроллеры PIC?

Микроконтроллеры PIC — это небольшие интегральные схемы, предназначенные для выполнения конкретных задач управления в электронных устройствах. Разработанные Microchip Technology, микроконтроллеры PIC (Peripheral Interface Controller) основаны на архитектуре Гарварда, которая разделяет программы и память данных. Эта конструкция позволяет эффективно выполнять инструкции одного цикла, что делает их пригодными для приложений реального времени. В отличие от микропроцессоров общего назначения, микроконтроллеры PIC включают в себя ОЗУ на чипе, ROM/Flash и различные периферийные устройства, такие как таймеры, ADC и последовательные модули связи. Их низкое энергопотребление, широкий диапазон рабочего напряжения и обширный семейный диапазон делают их популярным выбором как для любителей, так и для профессионалов.

Семейство микроконтроллеров PIC охватывает от 8-битных устройств, таких как серии PIC10, PIC12, PIC16 и PIC18, до 16-битных (PIC24, dsPIC) и 32-битных (PIC32) вариантов. Для начинающих 8-битные серии PIC16 или PIC18 предлагают правильный баланс простоты и возможностей. Например, PIC16F877A - это классический чип для начинающих с 40 выводами, 14 КБ программной памяти, 256 байтами EEPROM, 8-канальным 10-битным ADC и несколькими интерфейсами связи (UART, SPI, I2C). Его обширная документация и поддержка сообщества делают его идеальной отправной точкой.

Почему стоит выбрать микроконтроллеры PIC вместо других платформ?

В то время как платформы, такие как Arduino, снизили барьер входа для встроенных систем, микроконтроллеры PIC предлагают явные преимущества для тех, кто хочет более глубокого понимания аппаратного и прошивочного оборудования. PIC заставляют вас работать непосредственно с регистрами, бит-манипуляцией и обработкой прерываний, создавая прочную основу в архитектуре микроконтроллеров. Они также широко используются в промышленных и автомобильных приложениях, делая навыки PIC ценными в профессиональных настройках. Кроме того, микроконтроллеры PIC доступны во многих форм-факторах (DIP, SMD) и при очень низких удельных затратах, что позволяет создавать экономически чувствительные проекты. Microchip обеспечивает зрелую экосистему разработки с MPLAB X IDE и бесплатными компиляторами (XC8, XC16, XC32), которые конкурируют с платными альтернативами с точки зрения оптимизации.

Однако кривая обучения более круче по сравнению с Arduino. Предварительно установленного загрузчика нет; вам нужен внешний программист (PICkit или ICD). Но эта авансовая инвестиция учит вас основам программирования микроконтроллеров с нуля.

Основные инструменты и компоненты

Перед тем, как написать первую строку кода, нужно собрать нужные инструменты. Вот полный список для настройки новичка:

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

Совет по развитию или Breadboard

Программист / отладчик

Программное обеспечение

Основные электронные компоненты

Создайте свою среду развития

Выполните следующие действия, чтобы запустить MPLAB X IDE и XC8:

  1. Загрузите и установите MPLAB X IDE с веб-сайта Microchip. Выберите версию для вашей операционной системы (Windows, macOS, Linux).
  2. Установите компилятор XC8 — Выберите бесплатную версию; он предлагает оптимизацию уровней до —O1 без лицензии.
  3. Подключите программиста (PICkit 4) через USB.Установите все необходимые драйверы (обычно в комплекте с MPLAB X).
  4. Управляйте вашей целевой доской или встроенным PIC с 5V DC. Обеспечьте общую основу между программистом и целью.
  5. Проводите разъем ICSP: PICkit 4 pin 1 (MCLR / VPP) к PIC MCLR pin; PIN 2, 3, 4 (VDD, GND, PGD, PGC) соответствующим образом. Проконсультируйтесь с руководством пользователя PICkit 4 для соединений.
  6. Запустите MPLAB X. Перейдите к Tools > Options > Embedded и проверьте, что путь компилятора правильный (XC8 должен автоматически обнаруживать).

Написание вашей первой программы: мигание светодиодом

Классический «Hello World» встроенных систем представляет собой светодиодное моргание. Он знакомит вас с созданием проекта, битами конфигурации, контролем GPIO и циклами задержки. Ниже приведено пошаговое руководство.

Шаг 1: Создайте новый проект

  • В MPLAB X выберите File > New Project.
  • Выберите Microchip Embedded > Standalone Project.
  • Выберите устройство (например, PIC16F877A).
  • Выберите программиста (например, PICkit 4).
  • Выберите компилятор (XC8).
  • Назовите проект (например, «Blink LED»).

Шаг 2: Поймите конфигурационные биты

Биты конфигурации устанавливают тип осциллятора, таймер сторожевого пса и таймер питания. В PIC16F877A вы обычно определяете их в заголовке или с помощью ' pragma(config)' или ' config'. Для XC8 используйте:

#pragma config FOSC = HS // High-speed oscillator (crystal)
#pragma config WDTE = OFF // Watchdog Timer disabled
#pragma config PWRTE = OFF // Power-up Timer disabled
#pragma config BOREN = ON // Brown-out Reset enabled
#pragma config LVP = OFF // Low-Voltage Programming disabled
#pragma config CPD = OFF // Data EEPROM Code Protection off
#pragma config CP = OFF // Flash Program Memory Code Protection off

Поместите их в верхней части исходного файла, прежде чем включать их.

Шаг 3: Настройка главной петли

В PIC порты ввода/вывода настраиваются через регистр TRIS (Data Direction): выводимое значение «0», входное значение «1». Данные вывода записываются в регистр LAT (или PORT для операций записи, но LAT рекомендуется для проблем RMW). Пример Blink с внутренним осциллятором (4 МГц):

#include <xc.h>

#define _XTAL_FREQ 8000000 // 8MHz if using external crystal

void main(void) {
 TRISBbits.TRISB0 = 0; // Set RB0 as output
 LATBbits.LATB0 = 0; // Start with LED off

 while(1) {
 LATBbits.LATB0 = 1; // Turn LED on
 __delay_ms(500); // Wait 500ms
 LATBbits.LATB0 = 0; // Turn LED off
 __delay_ms(500); // Wait 500ms
 }
}

При использовании внутреннего осциллятора, убедитесь, что биты конфигурации установлены на INTOSC и определяют ' XTAL FREQ' в соответствии с частотой осциллятора (например, по умолчанию 4 МГц).

Шаг 4: Создание и программа

  • Нажмите кнопку Build Main Project (иконка молотка). Исправьте любые ошибки (часто отсутствует задержка.h или несоответствие частоты).
  • Подключите программиста, затем нажмите Make and Program Device (зеленая стрелка с чипом).
  • В случае успеха светодиод, подключенный к RB0 (штопор 33 на PIC16F877A DIP), должен мигать на частоте 1 Гц.

Понимание кода в глубине

Приведенный выше код использует встроенный компилятор ' delay ms()', предоставленный 'xc.h'. Этот макрос опирается на определение ' XTAL FREQ', чтобы цикл задержки точно считал инструкции. Для осциллятора 8 МГц 1 цикл инструкций занимает 0,5 мкс (поскольку PIC16 использует 4 тактовых цикла на команду). Таким образом, задержка 500 мс требует 1 000 000 циклов инструкций, которые компилятор обрабатывает через вложенные петли.

Обратите внимание, что мы использовали вместо . Регистр LAT (Latch) позволяет избежать проблем с чтением-изменением-записью при смешивании входов и выходов на одном порту. Это лучшая практика в программировании PIC.

Регистр TRIS устанавливает направление. Настройка TRISB0 = 0 делает вывод штифта. Если вы хотите прочитать кнопку позже, вы установите бит TRIS на 1.

Основные ошибки начинающих и как их избежать

  • Неправильная конфигурация осциллятора — чип может не запускаться, если FOSC не соответствует вашему оборудованию.
  • Отсутствующие разъемные конденсаторы — Всегда помещайте конденсатор 100 нФ как можно ближе к штифтам VDD/VSS. Колебания или сбросы могут происходить без него.
  • Использование PORT для вывода — Когда вы пишете в PORT (например, PORTB = 0xFF), это может вызвать непреднамеренные изменения в других штифтах из-за бродячей емкости.
  • Watchdog Timer включен — Если WDT включен, микроконтроллер может сбрасывать каждые несколько миллисекунд., если вы не используете его намеренно.
  • Включено низковольтное программирование — LVP может вызвать неожиданную операцию, если штырь RB3/PGM плавает.

Расширение ваших навыков: ключевые периферийные устройства

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

Ввод/вывод общего назначения (GPIO)

Научитесь читать кнопки с отскоком (задержка программного обеспечения или триггер Шмитта). объедините несколько светодиодов, чтобы сформировать двоичный счетчик или световой преследователь. Поймите подтягивающие и вытягивающие резисторы.

Аналоговый цифровой преобразователь (ADC)

PIC16F877A имеет 8 аналоговых каналов (AN0-AN7). Используйте ADC для считывания напряжения потенциометра и вывода пропорционального рабочего цикла PWM для управления яркостью светодиодов. Примечание: ADC требует установки регистров ANSEL/ANSELH для включения аналогового ввода на штифте.

Модули таймера

Тимеры позволяют точно задерживать процессор без блокировки. Например, Timer0 может быть настроен с прекалибром для генерации прерывания каждые несколько миллисекунд. Используйте Timer1 для часов реального времени. Серия PIC18 предлагает более продвинутые таймеры с режимами захвата/сравнения/PWM.

Пульсовая модуляция (PWM)

PWM необходим для управления двигателем, светодиодного затемнения и генерации звука. На PIC16F877A PWM доступен на CCP1 (RC2) и CCP2 (RC1). Настройка прескалера PR2, CCPR1L и TMR2 для установки частоты и рабочего цикла.

Серийная связь (UART)

Подключайтесь к компьютеру через конвертер USB-to-TTL (например, FTDI232). Отправьте «Hello World» на терминал. Это имеет решающее значение для отладки и регистрации данных. Настройте регистры BRGH и SPBRG для генерации скорости бод.

Внешние прерывания и прерывание-на-изменении

Научитесь запускать код на восходящей/падающей кромке. Полезно для пробуждения от сна, нажатия кнопок или сигналов кодера. Понять биты Global Interrupt Enable (GIE) и Peripheral Interrupt Enable (PEIE) и как написать Interrupt Service Routine (ISR) с использованием атрибута ' interrupt()' в XC8.

Образец проекта: монитор температуры с ЖК-дисплеем

Практический промежуточный проект объединяет в себе множество периферийных устройств.

  • Подключите датчик температуры LM35 к каналу ADC.
  • Используйте Timer0, чтобы запускать ADC-считывание каждую секунду.
  • Преобразуйте значение ADC в Цельсия: температура = (ADC результат * 5000,0) / (1024 * 10).
  • Отобразите температуру на ЖК-дисплее 16x2 HD44780 в 4-битном режиме.
  • Если температура превышает 30 ° C, включите красный светодиод; в противном случае включите зеленый светодиод.

Этот проект учит ADC, таймерам, управлению ЖК-дисплеем (параллельный интерфейс) и условной логике. Многие примеры кода доступны в примечаниях приложения Microchip .

Отладка как Pro

Вот методы, характерные для разработки ПИК:

Следующие шаги и ресурсы

После освоения основ, рассмотрите эти продвинутые темы:

Recommended resources:

Заключение

Начало работы с микроконтроллерами PIC требует методического подхода: собрать правильные инструменты, настроить среду разработки, а затем продвигаться по простым проектам, которые строятся друг на друге. Усилия, вложенные на ранней стадии, окупаются, поскольку вы получаете четкое понимание аппаратного обеспечения микроконтроллера и низкоуровневого программирования. PIC не являются самой простой точкой входа, но они являются одними из самых полезных для тех, кто хочет по-настоящему контролировать аппаратное обеспечение. Работая через GPIO, ADC, таймеры и прерывания, вы будете развивать навыки, передаваемые в любую встроенную систему. Обширная экосистема Microchip и сообщество гарантируют, что вы никогда не будете без руководства. Теперь, выберите PIC, подключите светодиод и начните мигать свой путь к мастерству.