Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
40 Часть I. Общие принципы устройства и функционирования Atmel AVR А вот при наличии программы-загрузчика контроллер обращается сначала к нему, и запуск откладывается на время ожидания, — а вдруг извне придет команда на перезапись программы? Подробно об этом рассказано в главе 6 , а здесь только от- метим, что время ожидания может составлять несколько секунд, что иногда бывает критично, — еще одно ограничение, присущее в том числе и платформе Arduino. Сброс всегда происходит при включении питания. Кроме этого, источниками сбро- са могут быть следующие события: аппаратный сброс, т. е. подача низкого уровня напряжения на вход RESET. По- скольку активный уровень сброса у всех микросхем всегда низкий (исключения мне неизвестны), то правильнее его обозначать с инверсией: RESET . Если вы встретили такое обозначение, то речь идет именно о выводе сброса, просто функция сброса, понятно, именуется без всякой инверсии; — окончание отсчета установленного интервала сторожевого таймера; — срабатывание схемы BOD. П ОДРОБНОСТИ Значение четырех младших битов регистра состояния MCUCSR должно сигнализировать о том, от какого источника производился сброс предыдущий раз (установка в 1 бита 0 — сброс при включении, бита 1 — аппаратный сброс, бита 2 — от схемы BOD, бита 3 — от сторожевого таймера). На практике, по опыту автора, по состояниям этого ре- гистра надежно отличаются от всех остальных лишь состояния сброса по сторожево- му таймеру (прочие флаги могут оказаться установленными все одновременно). Тем не менее, эта информация может быть полезной, например, при анализе причин пе- рерывов в работе круглосуточно работающих устройств (см. главу 14 ). В младших МК семейства Tiny (кроме ATtiny28L) нет встроенного «подтягиваю- щего» резистора на выводе RESET, поэтому для надежной работы следует преду- смотреть подключение внешнего резистора величиной 2–10 кОм от этого вывода к напряжению питания. Автор также настоятельно рекомендует устанавливать по- добный резистор для любых моделей AVR, т. к. встроенный резистор имеет часто большой номинал (30–60 кОм), и на нем могут наводиться помехи, способные при- вести к непредсказуемому сбросу. Не помешает также (хотя в технических описаниях такой рекомендации и не со- держится) установка конденсатора 0,1–1 мкФ от вывода RESET на «землю» — это сглаживает неизбежный дребезг напряжения и при включении немного затягивает фронт нарастания напряжения на выводе RESET по сравнению с увеличением на- пряжения питания — когда наступит порог срабатывания схемы сброса, напряже- ние питания всего МК уже установится. В пользу этой рекомендации говорит также факт, что на всех платах Arduino такая внешняя цепочка 10 кОм/0,1 мкФ по выводу RESET обязательно имеется совместно с кнопкой ручного сброса. Впрочем, если питание организовано надлежащим образом, то нарушение этой рекомендации не приводит к каким-то фатальным последствиям. Конденсатор можно не устанавли- вать также, если за сбросом следит внешний монитор питания (супервизор — под- робнее о нем рассказано далее).
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==