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

Можно ли использовать вывод RESET ATmega328P как обычный порт?

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

Вывод RESET у ATmega328P совмещён с портом PC6. Какую роль он играет, решает фьюз RSTDISBL: по умолчанию он не запрограммирован, и вывод работает как вход сброса. Если запрограммировать RSTDISBL, появляется ещё одна линия порта — но вместе с ней пропадает возможность прошивать микросхему обычным способом.

ЧтоRSTDISBL не запрограммирован (по умолчанию)RSTDISBL запрограммирован
Функция выводавход сброса RESETпорт PC6
Сбросвнешний, при включении, по питанию, сторожевым таймеромпри включении, по питанию и сторожевым таймером
Программирование по ISP (USBasp, Arduino as ISP)работаетне работает
Загрузчик Arduino с автосбросомработаетавтосброс не работает
Как вернуть—высоковольтный программатор, 11,5–12,5 В на RESET

Почему пропадает ISP

Последовательное программирование по даташиту начинается так: питание подаётся при низком уровне на RESET, и только потом программатор посылает команду входа в режим программирования. Если вывод стал портом PC6, программатор больше не может перевести микросхему в этот режим. Остаётся параллельное программирование — для него на RESET подают 11,5–12,5 В, а данные передают по многим выводам.

Как сделать безопасно

  1. Отладьте программу с обычным RESET.
  2. Убедитесь, что под рукой есть высоковольтный программатор, если микросхему понадобится перепрошить.
  3. Только после этого программируйте RSTDISBL — последней операцией.

Похожая ловушка — фьюз DWEN: по даташиту при включённом debugWIRE вывод RESET становится линией связи с отладчиком, и ISP тоже не работает; но выключают debugWIRE через сам debugWIRE, без 12 В. И ещё одно: на плате Arduino RESET связан с конденсатором автосброса и подтяжкой к 5 В, поэтому 12 В подают на микросхему вне платы или с отключённой обвязкой.

Если линий не хватает, проще и безопаснее занять другие выводы или добавить расширитель портов. Значения фьюзов посчитает калькулятор фьюзов AVR, что такое фьюзы — в термине «фьюзы AVR», способы прошивки — на странице программирование AVR и в термине «ISP».

Похожие вопросы

Можно ли вернуть RESET обычным программатором USBasp?

Нет. По даташиту последовательное программирование начинается с низкого уровня на RESET, а после RSTDISBL этот вывод больше не сбрасывает микросхему. Сбросить фьюз можно только в режиме параллельного программирования с 11,5–12,5 В на выводе RESET.

Зачем тогда нужен RSTDISBL?

Для микросхем с малым числом выводов, где каждый на счету: у ATtiny25/45/85 всего шесть линий ввода-вывода, и шестая — как раз RESET. Для них Microchip предусматривает высоковольтное последовательное программирование. На ATmega328P с 23 линиями разумнее поставить расширитель портов или сдвиговый регистр.

Отличается ли PC6 от других выводов порта?

Да. Даташит прямо оговаривает, что электрические характеристики PC6 отличаются от остальных выводов порта C, а гарантированные выходные уровни приводит для всех выводов, кроме RESET. Нагружать этот вывод током, как обычный порт, не стоит.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — разд. 1.1.5 — при запрограммированном RSTDISBL PC6 работает как порт, его электрические характеристики отличаются от остальных выводов порта C; разд. 14.3.2 — при запрограммированном RSTDISBL вывод работает как обычный порт, а без внешнего сброса микросхема полагается на сброс при включении питания и детектор пониженного напряжения; табл. 28-7 — RSTDISBL — бит 7 старшего байта фьюзов, по умолчанию 1 (не запрограммирован); SPIEN недоступен в режиме последовательного программирования; разд. 25.3 — при запрограммированном DWEN вывод RESET становится двунаправленной линией debugWIRE с открытым стоком; разд. 28.8 — последовательное программирование выполняется при RESET, прижатом к земле; разд. 28.7.1 — вход в параллельное (высоковольтное) программирование: на RESET подают 11,5–12,5 В; особенности — 23 программируемые линии ввода-вывода; табл. 30-1 — VIL и VIH вывода RESET в режиме порта (до 0,3 VCC и от 0,6 VCC при 2,4–5,5 В), выходные уровни VOL и VOH приведены для всех выводов, кроме RESET
  2. Atmel. ATtiny25/45/85 datasheet, 2586Q–AVR–08/2013 — особенности — шесть программируемых линий ввода-вывода; разд. 10.3.1 — PB5 работает как вход RESET, пока RSTDISBL не запрограммирован; разд. 20.6–20.7 — высоковольтное последовательное программирование

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