Поющая елочка

Описываемое устройство является доработкой «Поющей” новогодней елки», приведенной в журналк «Радио” , 2001, № 10, стр. 25-26. Была усовершенствована ее программа: заменены исполняемые «елкой” мелодии другими; разноображены световые эффекты сделав изменение яркости светодиодов плавным и различным по скорости. Устаревший микроконтроллер PIC16F84 был заменен на PIC16F628 с тем же числом и назначением выводов.

Приведенная на рисунке схема «елки” отличается от прототипа отсутствием ранее подключенных к выв. 16 DD1 частотозадающих элементов (использован встроенный тактовый генератор микроконтроллера PIC16F628), увеличенным до восьми числом светодиодов и измененной схемой их подключения. Тип и цвет свечения каждого из светодиодов можно выбирать по собственному усмотрению. При этом номиналы токоограничительных резисторов R4—R11 должны быть такими, чтобы яркость свечения разнотипных светодиодов казалась одинаковой. Рекомендую следующие значения: 510 Ом — для АЛ307ГМ (зеленого) или аналогичного импортного, 560 Ом — для импортного желтого, 680 Ом — для АЛ307БМ (красного), 1 кОм — для импортного красного, 10 кОм — для импортного синего повышенной яркости.

Обратите внимание, звукоизлучатель BF1 подключен к выв. 17 и 18 микроконтроллера, а не к выв. 1 и 2, как в прототипе. Кнопка SB1 перенесена с выв. 17 на выв, 1. К входу установки микроконтроллера в исходное состояние подключена еще одна кнопка (SB2). Если в качестве BF1 применен пьезоэлектрический звукоизлучатель, резистор R3 не нужен, замените его перемычкой. В память микроконтроллера запишите с помощью программатора коды из файла picplayl .hex.

Если уже имеется «елка», собранная по схеме, опубликованной в 2001 г., переделывать ее не нужно. Достаточно заменить установленный в ней микроконтроллер PIC16F84 на PIC16F628 с программой из файла picplay2.hex.

Оба варианта программы работают одинаково. Сразу после включения питания или после нажатия на кнопку SB2 «елка” демонстрирует по очереди 11 световых эффектов. После пятикратного повторения серии прозвучит первая из хранящихся в памяти микроконтроллера мелодий, сопровождаемая эффектом «бегущий огонь” в такт музыке Следующие мелодии можно услышать через каждые десять циклов повторения световых эффектов.

Объем памяти микроконтроллера позволил запрограммировать семь мелодий: «Славься”, «Лезгинка», “Король Лев», «Мурка», «Город золотой», «Потому что мы пилоты», «Три танкиста». Они повторяются циклически.

Нажатие на кнопку SB1 во время звучания мелодии обрывает ее, при новом нажатии прозвучит следующая мелодия. Если нажать эту кнопку в паузе между мелодиями, вновь прозвучит последняя из воспроизведенных ранее, после чего будут продолжены световые эффекты.

Для тех, кто захочет разобраться в работе программ, изменить световые эффекты или заменить мелодии своими любимыми, в файлах picplayl .asm и picplay2.asm приведены исходные тексты обеих вариантов программы на языке ассемблера. Они были разработаны и отлажены в среде MPLAB 5.70.40. Программы снабжены подробным комментарием, но не лишним будет разъяснить принятые в них принципы формирования световых эффектов и мелодий.

«Елка” способна воспроизвести любую мелодию, которая может быть записана нотами в интервале си первой
октавы (условный номер тона 0) — си третьей октавы (условный номер тона 24). Для каждой мелодии написана отдельная подпрограмма, первая команда которой задает темп исполнения. За ней следует последовательность макрокоманд
play B’xHHHHHDD’.

В каждой из них заданы: DD — двоичный код длительности звучания или паузы (00 — 1/4, 01 — 1/2, 10 — 1, 11 -3 /2) и ННННН — высота звука (двоичный условный номер тона). Если номер превышает 24. воспроизводится пауза. Старший разряд кода (х) не используется.

Каждому такту светового эффекта в программе соответствует набор из пяти байтов. Она копирует их в специально организованный буфер — 32 регистра оперативной памяти, которым даны имена ВУТЕ00—BYTE1F. Код из первого байта заносится только в один регистр, из второго — в два, из третьего — в четыре, из четвертого — в восемь, из пятого — в 16 регистров. В последнем регистре буфера (BYTE1F) код всегда нулевой. Пример заполнения буфера набором байтов 8А, 80, 9С, D0, Е0 (значения шестнадцатиричные) показан в таблице.

В течение всего такта данные из буфера циклически байт за байтом считывает и выводит в порт В микроконтроллера подпрограмма обработки прерываний от таймера TMR0. В результате на выводах RB0—RB7 микроконтроллера сформированы импульсные сигналы, коэффициенты заполнения которых, а следовательно, и яркость свечения подключенных к этим выводам светодиодов пропорциональны числу единиц в соответствующих разрядах буфера. Таким образом, яркость свечения каждого светодиода имеет 32 градации. Частота повторения импульсов выбрана достаточно высокой, чтобы мигания светодиодов не было заметно.

При переходе к новому такту буфер заполняется очередным набором байтов. Для экономии программной памяти предусмотрена подпрограмма Roll, дающая возможность поразрядно сдвигать данные, загружаемые в буфер.

Собрано устройство на двух печатных платах — плата управления и плата со светодиодами выполненная в форме елочки.

Файлы (печатные платы, прошивка)

 

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *