Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
242 Часть 111. Практическое программирование микроконтроллеров А VR iп ternp , TCNTlН <пишем второй байт в память> <пишем старший байт соuпtЗ в память > ; === очищаем все регистры clr tern:p out TCNTlH , ternp out TCNTlL, ternp ; очищаем Tirnerl out TCNTO , ternp ; очищаем TirnerO clr соuпtЗ clr couпt_sek ; очищаем счетчик прерываний ; === запускаем таймеры опять ldi ternp , ObO O O O O l O O ; out TCCRO , ternp ; запускаем TirnerO div 1 : 2 5 6 ldi ternp , ObO O O O O l l l ; внешний сигнал Tl ( выв . 1 1 ) п о фронту out TCCRlB , ternp ; запускаем Tirnerl sbi PortD , 6 ; включение контр . выв 12 PD6 длит . 1 с reti Здесь TimerO отсчитывает ровно 1 секунду, за это время Тimer l считает все фрон ты, поступающие на вход Т 1 . После остановки обоих таймеров мы сохраняем ре зультаты и запускаем таймеры на измерение опять . Обратите внимание, что в нача ле работы (в секции Reset ) нужно запустить оба таймера, иначе первое измерение будет ошибочным, причем сделать это нужно после очистки регистров. Запись данных в память не расшифровывается, потому что это может быть и запись в SRAM с последующим выводом на индикацию, и запись во внешнюю энергоне зависимую память для последующего чтения из компьютера, как описано в гла вах 12 и 13, или одновременно и то, и другое . Простейший частотомер можно сде лать, если организовать автоматическую передачу данных через UART в компью тер, который и будет заниматься отображением и записью информации. Из-за инструкции sЬiw, которая занимает два такта (а не один, как инструкция dec, встречавшаяся у нас в процедуре delay ранее), здесь один цикл задержки равен четырем тактам, или 0,5 мкс при тактовой частоте 8 МГц. Меняя число циклов задержки, можно откорректировать длительность секундного интервала отно сительно номинального значения от 576 мкс в сторону уменьшения (задержка равна нулю) до целых 32-х миллисекунд в сторону увеличения (задержка равна 65 535 циклов по 0,5 мкс) . Этого достаточно для подстройки стандартного кварца (в крайнем случае можно отобрать экземпляр из нескольких) . Калибровка осущест вляется измерением длительности импульса на контрольном выводе 1 2 МК с по мощью точного частотомера (лучше использовать профессиональный лаборатор ный прибор, а не мультиметр, который имеет недостаточную точность) . П ериодомер В МК АVR имеется специальный режим работы таймеров с «захватом» (capture) внешнего перепада уровней и генерацией прерывания по этому поводу. Он удобен для измерения периода низких (с точки зрения МК) частот по второму способу -
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==