Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
372 Часть 111. Практическое программирование микроконтроллеров АVR вились, и ничего плохого от жизни больше не ждем. Но вполне могут быть случаи, когда возможность повторных срабатываний так легко предотвратить не удается. Да и здесь тоже возникнет неприятная ситуация, если вы задержите палец на кноп ке дольше секунды. В этом деле могут помочь возможности, которые предоставляют другие контролле ры. В ATmega8535 и ATmega l 6 (как и во многих других) есть прерывание INT2, которое выполняется асинхронно. Потому в них можно смело объявлять прерыва ние INT2 на нажатие, т. е. по перепаду из единицы в ноль (режим специально уста навливать не надо - как и режим по уровню для INTO/INT 1 , он действует по умол чанию). И дальше в нашем случае· делать все то же самое. Отдельную тестовую программу для этого случая вы найдете в архиве по адресу, указанному во введении (файл Sleep_I NT2_test.asm ) . Она мало чем отличается от предыдущей - различие только в настройках прерывания и выводов: кнопка под ключается к выводу РЕО (вывод 3 1 корпуса ATmega853 5) , на котором здесь нахо дится INT2, светодиод - к тому же выводу РВО (вывод 1 ATmega8535) . Здесь в нашем случае (только при использовании кнопки ! ) может возникнуть другая за сада- если вы задержите палец дольше секунды, то при отпускании, скорее всего, прерывание возникнет повторно из-за дребезга. И с этим бо р оться здесь непро сто - придется как-то отслеживать отпускание и только потом разрешать уходить в s leep. Еще интереснее возможность, которую предоставляет прерывание PCINT. Ни в од ной из «наших» моделей Mega оно не представлено - в этом семействе прерыва ние появилось, начиная с ATmega88 . Зато оно есть в ATtiny23 1 3 , на примере кото рого мы сейчас его и продемонстрируем . Преимущество прерывания PCINT, кроме его асинхронности, в том, что его можно поймать на любом из семи выводов (в на шем случае - порта В), недостаток- в том, что оно происходит по любому изме нению логического уровня на выбранном выводе (потому и называется Pin Change Interrupt). То есть определять, что это было: нажатие или отпускание, придется про граммным путем. Но мы ведь это уже умеем, правда? На рис . 1 4 . 1 показано подключение кнопки и светодиода к АTtiny23 1 3 для иллюст рации применения прерывания PCINT. Подключение кварца на схеме не показа но - хотя приведенная далее программа рассчитана на 4 МГц, но это несущест венно для обсуждаемого случая . Чтобы не пересчитывать настройку задержки, вы можете выбрать внутреннее тактирование с этой частотой, установив конфигура ционные ячейки скsЕLЗ : о в состояние 0 0 1 0 или 0 0 1 1 (и обязательно не забыв вы ключить ячейку скоrvв ). Кстати, в АTtiny23 l 3 различные варианты тактовой часто ты можно установить из программы, предварительно выключив только ячейку скоrvв (встроенный генератор начнет тактирование на частоте 8 МГц) и затем уста новив биты делителя тактовой частоты CLKPSЗ : о в регистре CLКPR ( CLKPSЗ : о = 0001 дает коэффициент деления 2) . Программа с использованием PCINT согласно схеме, показанной на рис . 1 4. 1 , при ведена в листинге 1 4 . 2 . Ее также можно найти в архиве по адресу, указанному во введении (файл Sleep_PCINT_test .asm ) .
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==