Как начать работу с микроконтроллерами 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). Но эта авансовая инвестиция учит вас основам программирования микроконтроллеров с нуля.
Основные инструменты и компоненты
Перед тем, как написать первую строку кода, нужно собрать нужные инструменты. Вот полный список для настройки новичка:
Выбор микроконтроллера
- PIC16F877A — классический 40-контактный чип, широко доступный, обильные периферийные устройства.
- PIC18F4620 — улучшенный 40-контактный вариант с большей программной памятью и улучшенной архитектурой.
- PIC12F683 — 8-контактный DIP для очень простых проектов.
Совет по развитию или Breadboard
- Стартерные платы — Совет Curiosity от Microchip или PICDEM Lab II включают микроконтроллер, программист и базовый I/O.
- Breadboard + Power Supply — стандартная 830-точечная плита, 5V регулируемый источник питания (например, LM7805) и USB-серийный адаптер для UART.
Программист / отладчик
- PICkit 3 или PICkit 4 — официальные отладчики микрочипов с программированием через ICSP (In-Circuit Serial Programming).
- MPLAB Snap — недорогая альтернатива.
- Для подключения к USB убедитесь, что ваш программист поддерживает USB-to-ICSP (часто отдельный адаптер для 3.3V или 5V-мишени).
Программное обеспечение
- MPLAB X IDE — свободная интегрированная среда разработки на основе NetBeans.
- Компилятор XC8 — бесплатный (с ограниченной оптимизацией) компилятор C для 8-битных PIC.
- MPLAB Code Configurator (MCC) — графический инструмент для генерации кода инициализации.
Основные электронные компоненты
- Светодиоды (красный, зеленый, синий)
- Резисторы (220 Ом для светодиодов, 10 КОм для подтягиваний)
- Нажимные кнопки (тактильные переключатели)
- Конденсаторы (100nF разъединение, 10μF объем)
- 20 МГц кристаллический осциллятор + два конденсатора 22pF (если не используется внутренний осциллятор)
- Провода для прыжков с трамплина (мужчина-мужчина, мужчина-женщина)
Создайте свою среду развития
Выполните следующие действия, чтобы запустить MPLAB X IDE и XC8:
- Загрузите и установите MPLAB X IDE с веб-сайта Microchip. Выберите версию для вашей операционной системы (Windows, macOS, Linux).
- Установите компилятор XC8 — Выберите бесплатную версию; он предлагает оптимизацию уровней до —O1 без лицензии.
- Подключите программиста (PICkit 4) через USB.Установите все необходимые драйверы (обычно в комплекте с MPLAB X).
- Управляйте вашей целевой доской или встроенным PIC с 5V DC. Обеспечьте общую основу между программистом и целью.
- Проводите разъем ICSP: PICkit 4 pin 1 (MCLR / VPP) к PIC MCLR pin; PIN 2, 3, 4 (VDD, GND, PGD, PGC) соответствующим образом. Проконсультируйтесь с руководством пользователя PICkit 4 для соединений.
- Запустите 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
Вот методы, характерные для разработки ПИК:
- Использовать ICD (In-Circuit Debugger) — Установить точки останова в MPLAB X и изучить значения регистра.Для этого требуется PICkit 4 или ICD 4 в режиме отладки (отличающийся от программирования).
- Переключите неиспользованный штифт GPIO — Измерьте его частоту осциллографом для проверки времени петли.
- UART printf() отладка — Внедрение простой функции последовательного принтера (можно найти ] альтернативы для малой памяти). Отправьте переменные значения в последовательную консоль.
- Проверьте биты конфигурации — Когда чип не запускается, перекомпилируйте с минимальным конфигурированием. Используйте окно MPLAB X «Биты конфигурации», чтобы настроить их визуально.
Следующие шаги и ресурсы
После освоения основ, рассмотрите эти продвинутые темы:
- Программирование с прерыванием — Отойдите от блокировки задержек. Используйте таймеры и машины состояний.
- Режимы с низким энергопотреблением — сон, холостой и глубокий сон для конструкций с батарейным питанием.
- Протоколы связи — I2C (акселерометр, RTC), SPI (SD-карта, дисплей), 1-Wire (температурные датчики).
- RTOS для больших PICs — FreeRTOS портируется для PIC32 и некоторых устройств PIC24.
- Создайте свою собственную печатную плату — с помощью KiCad или Eagle, используя PIC в качестве основного процессора.
Recommended resources:
- MPLAB X IDE Official Page — Загрузки и документация.
- XC8 Compiler Downloads — Выберите бесплатную версию.
- PIC16F877A Datasheet — Незаменимая ссылка для регистров и вычисления.
- MPLAB Code Configurator — инструмент графического интерфейса для генерации кода инициализации.
- Микрочип Форум сообщества — Задавайте вопросы и просматривайте решения.
Заключение
Начало работы с микроконтроллерами PIC требует методического подхода: собрать правильные инструменты, настроить среду разработки, а затем продвигаться по простым проектам, которые строятся друг на друге. Усилия, вложенные на ранней стадии, окупаются, поскольку вы получаете четкое понимание аппаратного обеспечения микроконтроллера и низкоуровневого программирования. PIC не являются самой простой точкой входа, но они являются одними из самых полезных для тех, кто хочет по-настоящему контролировать аппаратное обеспечение. Работая через GPIO, ADC, таймеры и прерывания, вы будете развивать навыки, передаваемые в любую встроенную систему. Обширная экосистема Microchip и сообщество гарантируют, что вы никогда не будете без руководства. Теперь, выберите PIC, подключите светодиод и начните мигать свой путь к мастерству.