Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

226 Часть 111. Практическое программирование микроконтроллеров АVR полнительных 8- и 1 6-разрядных таймерах, режимов значительно больше. Среди них возможности работы в режиме «захвата» внешнего события (удобная для по­ строения периодомеров или подсчета редких событий) и счета до определенного знау:ения (или даже нескольких таких значений) с возникновением прерывания по достижении заданного числа, несколько режимов широтно-импульсной модуляции (PWM), возможность функционирования в асинхронном режиме от отдельного так­ тового генератора и т. п . В некоторых старших Mega (ATmega64 и др. ) есть еще и третий регистр управления ( тссRхс ) , с помощью которого можно программно управлять выводом ОСпх (об этом рассказано далее) . Интересно, что в АTtiny23 1 3 ТimerO - аналогично старшим моделям Mega - также имеет два регистра управ­ ления : TCCROA и TCCROB. Все варианты мы тут рассматривать не станем, чтобы не переписывать <<Инструк­ цию» : подробное описание всех функций таймеров-счетчиков АVR займет много места, к тому же большинство этих возможностей редко требуются на практике. Остановимся мы лишь на некоторых практических аспектах использования тай­ меров. СОВЕТ Чтобы не запутаться в многообразии режимов, следует иметь в виду общее правило : если вы какие-то режимы не используете, то соответствующие им биты регистров управления следует оставлять в нулевом («сброшенном») состоянии , в которое они установлены по умолчанию . Например, для простого запуска таймеров (режим Normal) достаточно установить режим делителя тактовой частоты в нужное состояние с помощью битов cso2-csoo . Они для ТimerO и Тimer2 находятся в младших разрядах регистров тссRО /TCCR2 ( тссRов для АTtiny23 1 3 ) или регистра тccRlB - для Timer 1 . Для выключения эти биты следует обнулить . Обычно еще устанавливается либо состояние бита пере­ ключения внешнего вывода ОСх, либо режим прерывания таймера, что также дела­ ется одинаково для всех моделей. Больше никаких дополнительных действий неза­ висимо от модели контроллера предпринимать не требуется. Разумеется, в большинстве случаев использования таймеров (за исключением фор­ мирования простых задержек, как в главе 7) нет смысла остющять тактовую часто­ ту, задаваемую от внутреннего RС-генератора, обеспечивающего эту функцию по умолчанию, - он слишком неточен, и к тому же частота 1 МГц недостаточна для корректного выполнения многих действий. Поэтому большинство задач далее мы ориентируем на подключение внешнего кварца с компромиссной частотой 4 МГц. При такой частоте и потребление еще не слишком увеличивается, и в то же время она достаточна для корректного выполнения многих действий. Напомним (см. гла­ ву 5), что при этом необходимо переключить контроллер на работу от внешнего кварцевого резонатора, для чего fusе-биты CKSELЗ . . о необходимо установить в зна­ чения 1 1 1 1 (а для ATtiny23 1 3 еще дополнительно установить сброшенный по умол­ чанию бит скоrvв, чтобы отключить режим деления частоты на 8) .

RkJQdWJsaXNoZXIy MTExODQxMg==