Перейти к содержанию

MCLR — вывод внешнего сброса PIC

На корпусе PIC один вывод подписан MCLR/VPP. В работе это вход сброса: низкий уровень останавливает микроконтроллер. При прошивке на него же подают высокое напряжение. А битом MCLRE его можно отдать программе как ещё один вход — и тут начинаются сюрпризы с перепрошивкой.

Обновлено Редакция GAW

MCLR (Master Clear) — вывод внешнего сброса микроконтроллеров PIC. Пока на нём низкий уровень, кристалл удерживается в сбросе. Этот же вывод служит входом VPP при программировании: на него подают повышенное напряжение для высоковольтного программирования. Бит MCLRE в слове конфигурации решает, работает ли вывод как сброс или как обычный вход.

Бит MCLRE

КристаллMCLRE = 1MCLRE = 0
PIC12F629/675GP3/MCLR — сброс MCLRGP3 — цифровой вход, MCLR внутри соединён с VDD
PIC16F627A/628A/648ARA5/MCLR/VPP — сброс MCLRRA5 — цифровой вход, MCLR внутри соединён с VDD
PIC16F18857/77 (при LVP = 0)MCLR включёнвывод — вход общего назначения

Данные — DS41190G (рег. 9-1), DS40044G (рег. 14-1), DS40001825F (табл. 5-2). Вывод, освобождённый от сброса, остаётся только входом: у GP3 и RA5 нет выходного драйвера. У PIC12F675 при MCLRE = 1 вывод GP3 читается как 0.

У новых PIC есть ещё одно условие: при включённом низковольтном программировании (LVP = 1) вывод всегда работает как MCLR, и бит MCLRE игнорируется (DS40001825F, табл. 5-2; DS40001970A, разд. 1.4).

Подтяжка и цепь сброса

Здесь кристаллы различаются. У PIC12F675 внутренней подтяжки на MCLR нет, но в цепи сброса MCLR есть фильтр, который отсеивает короткие импульсы; Microchip не рекомендует соединять MCLR напрямую с VDD из-за изменённой ESD-защиты вывода и советует RC-цепь (DS41190G, разд. 9.3.1, рис. 9-5). У PIC16F18857 включённый MCLR подтянут к VDD внутренней слабой подтяжкой, а в цепи сброса стоит фильтр, отсеивающий короткие импульсы (DS40001825F, разд. 5.4.1). Общие правила подтяжек — в термине «Подтягивающий резистор», о начальном сбросе — «Сброс при включении питания».

Внутренний сброс — от сторожевого таймера или команды RESET — не тянет вывод MCLR вниз (DS41190G, разд. 9.3.1; DS40001825F, разд. 5.4).

MCLRE и перепрошивка

Отключённый MCLR сам по себе не закрывает прошивку: у PIC16F184XX высоковольтный вход через MCLR/VPP доступен всегда (DS40001970A, разд. 2.1). Проблема в другом: если программа стартует раньше, чем программатор войдёт в режим, она может занять линии ICSPDAT и ICSPCLK. Спецификация PIC16F184XX называет опасное сочетание — MCLRE = 0, выключенный таймер включения питания и внутренний генератор — и рекомендует вход VPP-first (DS40001970A, разд. 2.1.1.1). Практический случай разобран в ответе «Можно ли перепрошить PIC после MCLRE = OFF», выводы ICSP — в статье «Программирование PIC через ICSP».

Частые вопросы

Нужен ли подтягивающий резистор на MCLR?

Зависит от кристалла. У PIC12F675 внутренней подтяжки на MCLR нет, а Microchip советует не соединять вывод напрямую с VDD, а ставить RC-цепь (DS41190G, разд. 9.3.1). У PIC16F18857 при включённом MCLR вывод подтянут к VDD внутренней слабой подтяжкой (DS40001825F, разд. 5.4.1).

Что будет, если выключить MCLRE?

Вывод станет входом общего назначения, а сброс внутри будет постоянно неактивен: у PIC12F675 и PIC16F628A даташит пишет, что MCLR внутри соединён с VDD. Вывод при этом остаётся только входом — у GP3 и RA5 нет выходного драйвера. Прошивают такой кристалл высоким напряжением на этом же выводе: у PIC16F184XX высоковольтный вход доступен всегда (DS40001970A, разд. 2.1).

Почему бит MCLRE не действует?

Скорее всего включён LVP. У PIC16F18857 и PIC16F184XX при LVP = 1 вывод всегда работает как MCLR, а бит MCLRE игнорируется (DS40001825F, табл. 5-2; DS40001970A, разд. 1.4).

Источники

  1. Microchip. PIC12F629/675 Data Sheet (DS41190G, 2010) — рег. 9-1, бит 5 MCLRE: 1 — вывод GP3/MCLR работает как MCLR, 0 — цифровой вход-выход, MCLR внутри соединён с VDD; разд. 3: GP3 — только вход, при MCLRE = 1 читается как 0; разд. 9.3.1: у вывода MCLR нет внутренней подтяжки, Microchip не рекомендует соединять MCLR напрямую с VDD и предлагает RC-цепь (рис. 9-5), сброс от сторожевого таймера не тянет MCLR вниз
  2. Microchip. PIC16F627A/628A/648A Data Sheet (DS40044G, 2009) — рег. 14-1 CONFIG, бит 5 MCLRE: 1 — RA5/MCLR/VPP работает как MCLR, 0 — цифровой вход, MCLR внутри соединён с VDD; разд. 5.1: RA5 — только вход с триггером Шмитта, без выходного драйвера
  3. Microchip. PIC16(L)F18857/77 Data Sheet (DS40001825F, 2016–2021) — разд. 5.4, табл. 5-2: MCLRE = 0 и LVP = 0 — MCLR выключен, MCLRE = 1 и LVP = 0 — включён, LVP = 1 — включён независимо от MCLRE; разд. 5.4.1: при включённом MCLR вывод соединён с VDD внутренней слабой подтяжкой, в цепи сброса фильтр коротких импульсов; разд. 5.4.2: при выключенном MCLR вывод — вход общего назначения, подтяжкой управляет программа; сброс не тянет MCLR вниз
  4. Microchip. PIC16(L)F184XX Memory Programming Specification (DS40001970A, 2017) — разд. 1.4 и 2.1: при LVP = 1 вывод MCLR/VPP работает как MCLR, бит MCLRE игнорируется, вывод нельзя использовать как вход общего назначения; разд. 2.1.1.1: при MCLRE = 0, выключенном таймере включения питания и внутреннем генераторе программа может занять ICSPDAT и ICSPCLK — поэтому рекомендуется вход VPP-first

Нашли ошибку?