Музыкальные тона
Если робот оснащен динамиком, то он может воспроизводить музыку, или, по крайней мере, генерировать тоновый сигнал заданной частоты и длительности. Таким образом он может общаться с вами.
Подпрограмма tonesound включает и выключая динамик на заданной частоте указанное число раз.
Перед вызовом этой подпрограммы в регистрах должны быть сохранены следующие три значения:
datal и dataf inal устанавливают частоту тона. Datal — это переменная внешнего цикла для двух вложенных циклов.
Переменная внутреннего цикла устанавливается на OFh. За этими циклами следует заключительный цикл, который служит для точной подстройки частоты. В качестве переменной в нем используется datafinal. , lendata устанавливает длительность тона.
Это — переменная внутреннего из двух вложенных циклов, используемых в подпрограмме half.
Счетчик внешнего цикла устанавливается на 05h.
Приняв, что частота осциллятора PIC составляет 4 МГц, вычисляем половину периода в микросекундах:
half = 500 ООО/частота.
Методом проб и ошибок находим пару значений для datal и data-final, для которых:
(50 х datal) + (3 х dataf inal) + 15 = half.
Для тона подходящей длительности вычисляем:
lendata = частота * 0,1.
Изменяя значение переменной lendata, можно варьировать длительность тона, однако представленное выше уравнение дает хорошую отправную точку.
В качестве примера рассмотрим вычисления для тона частотой 1 кГц:
half = 500 000 / 1 000 = 500 мкс. Несколько попыток дают: (50х9) + (3 х 12)+15 = 501.
Это близко к желаемому значению, поэтому принимаем datal = 9, a datafinal = 12. Подходящее значение для lendata равно 1 000 * х 0,1 = 100.
Эти данные используются для формирования тона с частотой 1 кГц.
Работа программы начинается с установки вывода 0 порта С в качестве выхода. Схема для управления динамиком.
Листинг может быть оформлен как подпрограмма более сложной подпрограммы, которая помещает набор значений в регистры данных и вызывает подпрограмму playit. Таким образом, можно заставить робота воспроизводить мелодии. Значения для получения некоторых музыкальных нот. Программируя последовательности таких тонов, вы сможете изобрести тоновый «язык», который Робот будет использовать для выражения своих «чувств». Более длинная последовательность тонов становится песней.
Блок-схемы двух подпрограмм. Они показывают различные циклы, используемые при получении тона заданной частоты и длительности.
Для того чтобы воспроизвести последовательно из более, чем, скажем, четырех тонов, самое лучшее — это сохранить значения в форме таблицы соответствия. Практический пример подпрограммы, воспроизводящей тоновые сигналы, дан в описании робота «Андроид».
Источник: qwedr.com