Прошить PIC16F1937 можно только через интерфейс ICSP (In-Circuit Serial Programming) — у этого микроконтроллера нет встроенного загрузчика, поэтому без внешнего программатора обойтись не получится. Минимальный набор: программатор PICkit 3 (или совместимый клон, ICD 3/4, PICkit 4), пять сигнальных линий и файл прошивки в формате HEX.

Частая ситуация на практике: программатор подключён, а среда разработки выдаёт ошибку «Target device was not found». В большинстве таких случаев проблема не в самом чипе, а в питании, неправильной распайке разъёма ICSP или конфликте внешней обвязки на линиях программирования. Ниже разберём весь процесс по шагам — от подготовки железа до верификации прошивки.

Что нужно для прошивки PIC16F1937

Микроконтроллер PIC16F1937 от Microchip выполнен в 40-выводном корпусе (PDIP, TQFP, QFN) и поддерживает низковольтное и высоковольтное программирование. Для работы потребуется:

  • 🔌 Программатор — PICkit 3, PICkit 4, ICD 3/4 или качественный клон PICkit 3
  • 💻 ПО — среда MPLAB X IDE с плагином IPE или отдельная утилита MPLAB IPE
  • 📄 HEX-файл прошивки, скомпилированный именно под PIC16F1937
  • 🔋 Стабильное питание — от программатора или внешний источник на целевой плате
  • 🧰 Провода или готовый шлейф ICSP с разъёмом 6-pin (или 5-pin)

Отдельно стоит сказать о питании. PICkit 3 умеет питать целевую плату напряжением до 5 В, но ток ограничен — если на плате есть энергоёмкая периферия, лучше запитать устройство от собственного источника, а в настройках программатора отключить подачу питания на таргет.

💡

Перед первой прошивкой проверьте напряжение питания платы мультиметром: PIC16F1937 работает в диапазоне примерно 1,8–5,5 В, но точные границы для вашей ревизии смотрите в официальном даташите Microchip.

Распиновка ICSP: какие выводы подключать

Для программирования используются пять линий. Их нужно соединить с соответствующими контактами разъёма программатора:

Сигнал ICSPВывод PIC16F1937 (PDIP-40)Назначение
VPP/MCLRPin 1 (MCLR)Сброс и вход напряжения программирования
VDDPin 11 и 32Питание микроконтроллера
GND (VSS)Pin 12 и 31Общий провод
PGD (ICSPDAT)Pin 28 (RB7)Данные программирования
PGC (ICSPCLK)Pin 39 (RB6)Тактовый сигнал программирования

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

⚠️ Внимание: если на линиях RB6 и RB7 в вашей схеме висят конденсаторы, подтяжки или активная периферия, это может мешать программированию. Рекомендуется отключать нагрузку с этих выводов на время прошивки или предусмотреть в схеме размыкающие джамперы.

На линии MCLR обычно стоит подтягивающий резистор к питанию и, возможно, конденсатор на землю для сброса. Ёмкость этого конденсатора не должна быть слишком большой — иначе программатор не сможет корректно управлять линией VPP. Точные рекомендации по обвязке ICSP приведены в даташите и в документе Microchip по внутрисхемному программированию.

Подготовка программатора и среды MPLAB X

Для записи прошивки удобнее всего использовать MPLAB IPE — облегчённую утилиту, которая ставится вместе с MPLAB X IDE и не требует создания проекта. Порядок действий:

  • 🖥️ Установите MPLAB X IDE с официального сайта Microchip — IPE ставится вместе с ней
  • 🔌 Подключите PICkit 3 к USB-порту и дождитесь установки драйверов
  • ⚙️ Запустите IPE, в поле Device выберите PIC16F1937, в поле Tool — ваш программатор
  • 📂 Загрузите HEX-файл через File → Import → Hex или кнопку Browse

В разделе настроек питания (Settings → Advanced Mode → Power) укажите, кто питает плату: программатор или внешний источник. Если питание идёт от PICkit, выставьте напряжение, соответствующее вашей схеме — обычно 3,3 В или 5 В.

Что делать, если PICkit 3 не определяется системой

Попробуйте другой USB-порт (желательно USB 2.0 напрямую, без хаба), проверьте кабель — многие дешёвые кабели содержат только линии питания. Если программатор ранее «зависал» при прошивке, возможно, слетела его собственная прошивка: в MPLAB IPE есть функция восстановления firmware программатора, которая запускается автоматически при подключении.

Пошаговая инструкция по прошивке

Когда железо подключено и среда настроена, сам процесс занимает меньше минуты. Выполняйте шаги последовательно:

☑️ Чек-лист прошивки PIC16F1937

Выполнено: 0 / 6

Нажмите кнопку Connect — программатор установит связь с чипом и считает его идентификатор. Если Device ID совпал с ожидаемым, нажимайте Program. Утилита сотрёт память, запишет прошивку и конфигурационные биты. Завершающий обязательный этап — Verify: сверка записанных данных с исходным HEX-файлом. Только после успешной верификации прошивку можно считать корректно записанной.

Если чип уже был запрограммирован с включённой защитой от чтения (code protection), старая прошивка не прочитается, но стирание и запись новой всё равно выполняются — защита снимается полным стиранием.

💡

Успешная прошивка PIC16F1937 = правильная распайка ICSP + стабильное питание + верный HEX-файл + обязательная верификация после записи.

Типичные ошибки и их устранение

Самая частая ошибка — Target device was not found или несовпадение Device ID. Проверяйте в таком порядке: питание на выводах VDD, целостность линий PGD и PGC, полярность подключения разъёма (перепутанный первый контакт — классика), отсутствие нагрузки на RB6/RB7.

Вторая группа проблем — сбои в середине записи. Возможная причина — просадка питания от программатора, когда плата потребляет больше, чем может отдать PICkit. Решение: перейти на внешнее питание платы и отключить подачу VDD от программатора в настройках IPE.

⚠️ Внимание: не подключайте и не отключайте шлейф ICSP при поданном питании и не касайтесь выводов во время записи. Прерывание процесса на этапе стирания может оставить чип в неконсистентном состоянии — обычно лечится повторным циклом стирания, но лучше этого не допускать.

Реже встречается ситуация, когда чип определяется, но верификация не проходит. Здесь стоит проверить, не скомпилирован ли HEX под другой контроллер семейства (например, PIC16F1936 — у них разный объём памяти), а также попробовать снизить скорость программирования, если такая опция доступна в вашей версии ПО.

📊 Каким программатором вы прошиваете PIC16F1937?
Оригинальный PICkit 3
Клон PICkit 3
PICkit 4 / ICD
Самодельный программатор

Особенности конфигурационных битов

Конфигурационные слова PIC16F1937 определяют источник тактирования, работу сторожевого таймера WDT, сброса по питанию и защиту кода. Обычно они уже зашиты в HEX-файл, и MPLAB IPE записывает их автоматически. Но если вы собирали прошивку сами, проверьте, что биты конфигурации заданы в исходном коде через директивы #pragma config (в XC8) или __CONFIG.

Критичный момент: неверно выставленный источник тактирования (например, внешний кварц вместо внутреннего RC-генератора при его отсутствии на плате) приведёт к тому, что прошитый чип «не заведётся», хотя запись прошла успешно. Если устройство после прошивки молчит — первым делом сверяйте биты конфигурации с реальной схемой платы.

FAQ: частые вопросы о прошивке PIC16F1937

Можно ли прошить PIC16F1937 без программатора, через UART или USB?

Нет, штатного загрузчика (bootloader) у PIC16F1937 нет из завода. Теоретически можно предварительно записать в чип сторонний бутлоадер через ICSP, после чего обновлять прошивку по UART — но для самой первой записи программатор всё равно потребуется.

Подойдёт ли клон PICkit 3 вместо оригинала?

Качественные клоны на оригинальной элементной базе работают с PIC16F1937 корректно. Проблемы чаще возникают с самыми дешёвыми экземплярами: нестабильное питание таргета, отсутствие защитных цепей на линии VPP. Если клон «не видит» чип при заведомо исправной обвязке — стоит проверить его на другом устройстве.

Чип не определяется, хотя всё подключено верно. Что ещё проверить?

Проверьте, не заперт ли MCLR внешней схемой (например, жёсткой подтяжкой через малое сопротивление или цепью сброса с большой ёмкостью). Также убедитесь, что обе пары VDD/VSS запитаны, и попробуйте укоротить провода ICSP — длинные шлейфы (более 15–20 см) могут давать помехи на сигнальных линиях.

Можно ли считать прошивку с уже запрограммированного чипа?

Только если при прошивке не была включена защита от чтения (Configuration bit CP). Если защита активна, считывание вернёт нули — снять её можно только полным стиранием памяти с потерей содержимого.

Чем отличается прошивка PIC16F1937 от PIC16F1936?

Процедура и распиновка ICSP идентичны, отличается объём памяти программ. HEX-файл, собранный под одну модель, нельзя записывать в другую — верификация либо не пройдёт, либо устройство будет работать некорректно. Всегда проверяйте, под какой именно чип скомпилирована прошивка.