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

428 Часть 111. Практическое программирование микроконтроллеров А VR можно перемножать гораздо быстрее с помощью команды rnul , но тогда в АTtiny23 1 3 программа работать не будет. Приведенную в листинге 1 6 . 1 процедуру вставим в прерывание переполнения ТimerO, с помощью которого будем формировать частоту 50 Гц. Тестовую про­ грамму, в которой величина угла задается из компьютера через UART непосредст­ венно в градусах, вы найдете в архиве по адресу, указанному во введении (файл Servo_test.asm). По умолчанию сервомотор установится на нулевой угол. Здесь мы переключаем вывод PD6, но никто не мешает одновременно переключать сколько угодно других выводов, причем каждый по своему заданному значению угла. Удобно то, что для этого требуется всего одно прерывание на все подключенные выводы. Большая часть серводвигателей имеет диапазон углов поворота в пределах от О до 1 80° . Есть серводвигатели, которые могут вращаться на полный круг 360°, но это не то же самое, что обычные, с фиксированными положениями. У них отсутст­ вует ограничитель, потому тот же принцип управления приводит к иным последст­ виям: длительностью импульса задаются скорость и направление вращения . Ней­ тральное положение (остановка вращения) обычно соответствует положению 90° . С помощью таких сервомоторов можно, например, управлять вращением колес са­ модвижущегося робота, задавая повороты и кручение на месте . Но, конечно, обыч­ ные серводвигатели с заданием положения имеют больше потенциальных приме­ нений - например, на них можно построить вполне серьезную охранную систему с видеокамерами, автоматически следящими за движущимися объектами. Однако обсуждение таких тем увело бы нас далеко за пределы поставленной зада­ чи - освоить программирование АVR-контроллеров на самом низком уровне с помощью ассемблера и самых простых программных инструментов. Будем счи­ тать, что с этой задачей в первом приближении мы справились, а все остальное зависит от целей и желаний читателей.

RkJQdWJsaXNoZXIy MTExODQxMg==