Прочитав статью "Поющая" новогодняя елка" ("Радио", 2001, № 10, с. 25. 26), я решил усовершенствовать ее программу заменить исполняемые "елкой" мелодии другими по своему вкусу и разнообразить световые эффекты, сделав изменение яркости светодиодов плавным и различным по скорости. Было решено также заменить устаревший микроконтроллер PIC16F84 на PIC16F628 с тем же числом и назначением выводов.
Схема
Таблица
Печатная плата
риведенная на рисунке схема "елки" отличается от прототипа отсутствием ранее подключенных к выв. 16 DD1 частотозадающих элементов (использован встроенный тактовый генератор микроконтроллера PIC16F628) увеличенным до восьми числом светодиодов и измененной схемой их подключения. Тип И цвет свечения каждого из светодиодов можно выбирать по собственному усмотрению. При этом номиналы то-коограничительных резисторов R4— R11 должны быть такими, чтобы яркость свечения разнотипных светодиодов казалась одинаковой. Рекомендую следующие значения: 510 Ом — для АЛ307ГМ (зеленого) или аналогичного импортного, 560 Ом — для импортного желтого. 680 Ом — для АЛ307БМ (красного), 1 KОM — для импортного красного, 10 кОм — для импортного синего повышенной яркости. Обратите внимание, звукоизлуча-тель BF1 подключен к выв. 17 и 18 микроконтроллера, а не к выв. 1 и 2, как е прототипе. Кнопка SB1 перенесена с выв. 17 на выв. 1. К входу установки микроконтроллера в исходное состояние подключена еще одна кнопка (SB2J Если в качестве BF1 применен пьезоэлектрический звукоизлучатель резистор R3 не нужен, замените его пера-мычкой В память микроконтроллера запишите с помощью программатора коды из файла picplay1 .hex.
Если уже имеется ёлка собранная по схеме, опубликованной в 2001 г., переделывать ее не нужно. Достаточно заменить установленный а ней микро контроллер PIC16F84 на P1C16F628 с программой из файла picplay2.hex
Оба варианта программы работают одинаково. Сразу после включения питания или после нажатия на кнопку SB2 "елка" демонстрирует по очереди 11 световых эффектов. После пятикратного повторения серии прозвучит первая из хранящихся а памяти микроконтроллера мелодий, сопровождаемая эффектом "бегущий огонь" в такт музыке. Следующие мелодии можно услышать через каждые десять циклов повторения световых эффектов.
Объем памяти микроконтроллера позволил запрограммировать семь мелодий: "Славься", "Лезгинка", "Король Лев", "Мурка", "Город золотой". "Потому что мы пилоты". "Три танкиста". ОHИ повторяются циклически
Нажатие на кнопку SB1 вo время зву чания мелодии обрывает ее. при новом нажатии прозвучит следую дия. Если нажать эту кнопку в паузе между мелодиями, вновь прозвучит последняя из воспроизведенных ранее, после чего будут продолжены световые эффекты.
Для тех, кто захочет разобраться в работе программ, изменить световые эффекты или заменить мелодии своими любимыми, в файлах plcplay1 .asm и plcplay2.asm приведены исходные тексты обеих вариантов программы на языке ассемблера. Они были разработаны и отлажены в среде MPLAB 5.70.40. Программы снабжены подробным комментарием, но не лишним будет разъяснить принятые в них принципы формирования световых эффектов и мелодий.
"Елка" способна воспроизвести любую мелодию, которая может быть записана нотами в интервале си первой октавы (условный номер тона 0) — си третьей октавы (условный номер тона 24). Для каждой мелодии написана отдельная подпрограмма, первая команда которой задает темп исполнения. За ней следует последовательность макрокоманд/
play B'xHHHHHDD".
В каждой из них заданы: DD — двоичный код длительности звучания или паузы (00 — 1/4,01 — 1/2.10— 1. 11—3/2) и ННННН — высота звука (двоичный условный номер тона). Если номер превышает 24, воспроизводится пауза. Старший разряд кода (х) не используется.
Каждому такту светового эффекта в программе соответствует набор из пяти байтов. Она копирует их в специально организованный буфер — 32 регистра оперативной памяти, которым даны имена BYTEOO—BYTE IF Код из первого байта заносится только в один регистр, из второго — в два, из третьего — в четыре, из четвертого — в восемь, из пятого — а 16 регистров В последнем регистре буфера (BYTEIF) код всегда нулевой. Пример заполнения буфера набором байтов 8А 80,9С DO, E0 (значения шестнадцатиричные) показан в таблице/
В течение всего такта данные из бу фара циклически байт за байтом .считывает и выводит в порт В микроконтроллера подпрограмма обработки прерываний от таймера TMR0 В результата на выводах RB0—RB7 микроконтроллера сформированы импульсные сигналы, коэффициенты заполнения которых, а следовательно, и яркость свечения подключенных к этим выводам светодиодов пропорциональны числу единиц в соответствующих разрядах буфера. Таким образом, яркость свечения каждого светодиода имеет 32 градации. Частота повторения импульсов выбрана достаточно высокой, чтобы мигания светодиодов не было заметно.
При переходе к новому такту буфер заполняется очередным набором байтов. Для экономии программной памяти предусмотрена подпрограмма Roll, дающая возможность поразрядно сдвигать данные загружаемые в буфер.
Файлы-прошивки лежат здесь.
Фото и печатка http://depositfiles.com/files/oxaqqvwf8 Файлы-прошивки лежат здесь.