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

Глава 9. Программирование таймеров 231 TimerO таких режимов не имеет (это практически исключение среди АVR, если не считать уже не выпускающегося семейства Classic), зато их имеет Тimer2 (соответ­ ствующий вывод - ос2 ) . В ATtiny23 1 3 единственный 8-разрядный TimerO в этом· плане полностью аналогичен 1 6-разрядному и имеет два таких режима: А и В . Самый классический в этом плане и з «наших» - ATmega8535 , который имеет по одному режиму сравнения для каждого из 8-разрядных таймеров. Потому, чтобы меньше путаться между моделями, мы рассмотрим использование этих выводов применительно к Тimer l (соответствующие выводы: OC l A и OC l B), что годится для всех контроллеров, кроме некоторых младших Tiny, в которых Тimer l вовсе отсутствует. Подсчитаем, какие параметры нам следует обеспечить. Как мы уже выяснили ра­ нее, если тактовая частота контроллера равна 4 МГц, а коэффициент предделителя составляет 1 /64 , то частота на входе таймера будет 62 500 Гц. Если бы мы считали до переполнения счетчика Тimer 1 , как ранее, при таких параметрах частота на выходе составила бы 62500/65536 = 0,953 7 Гц. Для того чтобы получить 1 Гц, достаточно поделить частоту на входе на 62 500, что укладывается в 1 6 разрядов. Значит, если мы запишем в 1 6-разрядный регистр сравнения число 62 499 и будем досчитывать до этой величины (обнуляя счетный регистр по ее достижении), то как раз получим нужную частоту следования переключающих импульсов (частота на выводе ос1х при этом, как мы говорили, будет вдвое меньше). Чтобы такой режим работал, для таймера есть специальный режим обнуления счет­ чика при совпадении с числом в регистре сравнения А. Тimer 1 имеет два вывода: ОС 1А и ОС 1 В, но здесь нам достаточно одного. Листинг 9 .3 иллюстрирует процесс инициализации Тimer 1 для работы в таком ре­ жиме (пример годится для ATmega8, ATtiny23 1 3 , ATmega8535 и многих других моделей, если изменить строки, относящиеся к инициализации вывода OC lA) . ldi ternp, high ( 62 4 9 9 ) out OCRlAН, temp ; 62 4 9 9 для длительности 1 сек, ; 3 1 2 4 9 для частоты 1 Гц при к. дел 1 / 6 4 ldi temp, low ( 62 4 9 9 ) out OCRlAL , temp ; ; 62 4 9 9 для длительности 1 сек, ; 3 1 2 4 9 для частоты 1 Гц при к. дел 1 / 64 ldi temp, ( l<<COMlAO ) out TCCRlA, temp ; переключающий режим для выхода OClA ldi temp, ObO O O O O O l O ; вывод PBl ( OClA) на выход для mega8 out DDRВ , temp ; ldi temp , ObOO O O l O O O ; вывод РВ3 ( OClA) на выход для tiny2 3 1 3 ; out DDRВ , temp ; ldi temp , ObOO l O O O O O ; вывод PD5 ( OClA) на выход для mega8535 ; out DDRD , temp ldi temp , Ob0 0 0 0 1 0 1 1 ; включить Timerl 1 / 64 out TCCRlB, temp

RkJQdWJsaXNoZXIy MTExODQxMg==