Предлагаемый звонок выполнен на микроконтроллере, в котором в значительной мере устранены упомянутые недостатки путем возможности перепрограммирования мелодий, применения комбинированного питания всего устройства и безопасность при эксплуатации.
Музыкальный звонок может быть применен не только в качестве дверного звонка, но и в качестве музыкальной шкатулки или игрушки, где нет необходимости повторять одну и ту же мелодию при каждом нажатии пусковой кнопки, а проигрывать разные мелодии поочередно или случайным образом. Для совместимости режимов работы в звонке предусмотрена возможность фиксации проигрывания выбранной мелодии и дополнительной световой индикации вызова, которую можно использовать для визуального оповещения в вечернее или ночное время, когда громкий звук не желателен.
Главной особенностью предлагаемого звонка является универсальность его питания (от сети и батареек), возможность задания режима проигрывания мелодии (поочередный перебор или фиксация), возможность перепрограммирования мелодий и переход в режим микропотребления после проигрывания мелодии, а также наличие регулировки начальной громкости.
Основные характеристики музыкального звонка:
Частотный диапазон | 5 октав |
Нижний предел диапазона | нота «До» большой октавы (65,4 Гц) |
Верхний предел диапазона | нота «До» 4-й октавы (2093 Гц) |
Темп проигрывания, такт/мин | от 45 до 240 |
Поддержка переменного темпа | да |
Поддержка типов нот | легато, нон легато, стаккато и пауза |
Проигрывание ноттриолей | да |
Поддержка полутонов | да |
Длительность ноты | от 1/1 до 1/32 |
Длительность нот с точкой | от 1/2 до 1/32 |
Длина массива мелодии | произвольная |
Число мелодий в массиве | ограничено емкостью ЭСПЗУ |
Регулировка громкости | да |
Ток потребления в режиме: проигрывания / пауза / микропотребление |
до 250 мА / 6,5 — 7,5мА / 30 мкА |
Питание | от сети и батареек (3 шт. по 1,5 В) |
Описание схемы музыкального звонка
В основе любого музыкального звонка лежит генератор образцовой частоты, программно-управляемый делитель частоты, генератор временного интервала времени и вспомогательные элементы старт/стоп (рис.1). По этой концепции выполнен музыкальный звонок в [1]. Другим вариантом воплощения звонка является применение микропроцессора Z80 со стандартной обвязкой и простейшим ЦАП для формирования звука [2], который рассчитан для проигрывания WAV файлов длительностью около 3 с, что делает не столь эффективным использование ПЗУ объемом 64 КБ.
Рис. 1
Самым близким к оптимальному решению является звонок в [3], где был применен МК ATtiny2313, в котором в той или иной мере реализована структура из рис.1 на программном уровне, и послужил в качестве прототипа для данного музыкального звонка. Упомянутый МК имеет объем ЭСПЗУ для программ 2 Кбайта, и его недостаточно для массива нот мелодии, так как любая команда управляющей программы состоит из 2-х байт, которые и «съедают» определенный объем из адресного пространства для массива нот. Ввиду этих особенностей в авторском варианте в [3] число мелодий составляет всего лишь 4. В предлагаемом звонке используется более «древний» МК типа AT89C2051 с тем же объемом ЭСПЗУ 2 КБ. Наличие в его системе большинства однобайтных команд позволяет выиграть дополнительное пространство ЭСПЗУ для массива нот, а саму программу написать на языке Ассемблер для получения более компактного исполняемого кода. С точки зрения интерфейса ввода/вывода эти МК совместимы, у них также совпадают по расположению и функциональному назначению выводы.
Рис. 2. Схема музыкального звонка
Схема музыкального звонка (рис.2) изначально предполагает универсальное питание: как от батареек, так и от сети 220 В / 50 Гц, при желании можно оставить только один тип питания. Учитывая специфику режима микропотребления МК, его запуск выполняется через вспомогательную цепь SA1R2C1VD1, которая дополняет стандартную цепь начального сброса. Цепь R2C1 служит для формирования сигнала лог. «0» и принудительного его удержания на время инициализации при первом включении питания, в дальнейшем она влияния на работу звонка не оказывает.
Рис. 3. Включение лампы
Цепь SA2R3C3 служит для фиксации повторения мелодии. SA2 надо замкнуть до окончания проигрывания мелодии, иначе будет проигрываться первая мелодия из массива, адрес которой задается при первом включении питания. Индикатор HL1, управляемый ключом на VT1, предназначен для световой сигнализации проигрывания мелодии и может быть применен для подсветки дверной кнопки или корпуса звонка. При необходимости последовательно с HL1 можно включить светодиод оптрона, который через симистор включает лампу (рис.3). Такая ситуация очень часто возникает, когда в квартире находятся люди с ослабленным слухом или спят маленькие дети, и громкий звук нежелателен, особенно в ночное время. Номинал резистора R6 (рис.2) в этом случае следует уменьшить до 75 Ом.
Сетевой источник питания содержит: понижающий трансформатор, выпрямительный мост, сглаживающий фильтр и стабилизатор напряжения. Коммутация питание сеть/батарейки выполнена на диодах VD3, VD4 (автоматически определяется наличие напряжения в сети и батареек). Конденсатор C9 предназначен для сглаживания бросков напряжения при коммутации и подавления импульсных помех при работе МК.
Программа управления
Для управления всей схемной части в память программ МК записывается программа, которая и определяет режим работы всего музыкального звонка. Ввиду малого объема памяти программ МК, управляющая программа написана на языке Assembler-51. По структуре программа условно поделена на следующие части:
• основная программа;
• подпрограмма обслуживания прерываний по таймеру T/C0;
• подпрограмма обслуживания прерываний по таймеру T/C1;
• подпрограмма обслуживания прерываний по входу INT0;
• таблица размерности и типа ноты;
• таблица темпа мелодии;
• таблица частоты ноты;
• массив нот мелодий.
Основная программа выполняет следующие операции: инициализация, загрузка нот, отслеживание конца мелодии и конца массива нот. При инициализации предусмотрена проверка первого включения, которая сводится к проверке состояния порта P3.2. Если на нем уровень лог. «0», то программа воспринимает его как первое включение (время удержания лог. «0» определяется параметрами цепи R1C2 к выводу 6 DD1), если лог. «1», то это повторный запуск по выводу сброса, и этот сигнал формируется дифференцирующей цепью R2C1 и защитным диодом VD1. После инициализации следует загрузка кода ноты, состоящего из 2 байт, которые проверяются на наличие конца мелодии, его признаком является установка в лог. «1» младшей тетрады второго байта. Если это условие выполнено, то следует проверка конца массива нот, если нет, то следует переход на загрузку параметров ноты, активацию флажков и проигрывание ноты. При контроле конца мелодии и массива нот в программе предусмотрен перевод МК в режим микропотребления, выполняется путем записи лог. «1» в биты 0 и 1 регистра PCON, выход из этого режима происходит путем подачи положительного импульса длительностью не менее 24 тактов кварцевого генератора на вывод 1 DD1. По окончанию проигрывания ноты выполняется переход на загрузку очередной пары байтов очередной ноты.
В качестве признака конца массива нот необходимо, чтобы последующая пара байтов имела значение 0FFh. При соблюдении данного условия в пользовательский указатель массива перезаписывается начальный адрес массива.
Каждая нота состоит из пары байтов, поэтому массив нот для любой мелодии должен содержать четное число байт. Распределение и назначение битов в байтах кода ноты приведены в табл.1.
Табл. 1
Первый байт | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
t3 | t2 | t1 | t0 | d3 | d2 | d1 | d0 |
Темп мелодии, тактов/мин. | Длительность ноты | ||||||
Второй байт | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
N1 | N0 | f5 | f4 | f3 | f2 | f1 | f0 |
Тип ноты | Код частоты ноты |
Далее операция загрузки нот условно разделена на процедуру загрузки темпа мелодии, длительности и типа ноты, загрузка частоты ноты, установка флажков пользователя и запуск проигрывания. Во время проигрывания программа выполняет опрос флажков и выполняет предписанные для них действия с последующим их сбросом, установка флажков происходит по событиям возникновения прерывания.
Табл. 2
Биты 4…7 первого байта | Темп мелодии, тактов в минуту |
Кдел (шестн.) |
|||
t3 | t2 | t1 | t0 | ||
0 | 0 | 0 | 0 | 45 | 5DAEh |
0 | 0 | 0 | 1 | 60 | 85F6h |
0 | 0 | 1 | 0 | 75 | 9E60h |
0 | 0 | 1 | 1 | 80 | A47Bh |
0 | 1 | 0 | 0 | 90 | AE3Fh |
0 | 1 | 0 | 1 | 105 | BA74h |
0 | 1 | 1 | 0 | 120 | C1C7h |
0 | 1 | 1 | 1 | 135 | CA52h |
1 | 0 | 0 | 0 | 140 | CBB7h |
1 | 0 | 0 | 1 | 150 | CF34h |
1 | 0 | 1 | 0 | 165 | D399h |
1 | 0 | 1 | 1 | 180 | D762h |
1 | 1 | 0 | 0 | 195 | DA78h |
1 | 1 | 0 | 1 | 210 | DD28h |
1 | 1 | 1 | 0 | 225 | DF7Ah |
1 | 1 | 1 | 1 | 240 | E184h |
Загрузка темпа мелодии выполняется последовательным извлечением из табл.2 «х» байт коэффициента деления по указателю DPTR. При этом адрес формируется следующим образом: биты t0…t1 заносятся в младшую тетраду аккумулятора и сдвигаются влево на один бит, в счетчик-указатель DPTR заносится начальный адрес 0220h и извлекается младший байт командой MOVC A,@A+DPTR, перед выполнением надо позаботиться сделать копию аккумулятора в стеке или в одной из ячеек ОЗУ МК.
Далее восстанавливают содержимое аккумулятора, инкрементируют его и извлекают из таблицы старший байт аналогичным образом. Извлеченные байты запоминаются в ячейках ОЗУ, которые в дальнейшем служат в качестве константы-источника для перезагрузки регистров TL1 и TH1 таймера-счетчика C/T1 при прерывании по переполнению. Значения темпа и коэффициентов деления для таймера-счетчика T/C1 приведены в табл.2 для кварцевого резонатора на 12 МГц.
Последующая загрузка длительности и типа ноты выполняется аналогично, где из таблицы ЭСПЗУ МК тоже извлекаются два байта по указателю DPTR по команде MOVC A,@A+DPTR, где первый отвечает за длительность звучания ноты, второй – за молчание (паузу) ноты. Начальный адрес таблицы заносится в счетчикуказатель DPTR и равен 1A0h, а смещение состоит из битов N0, N1, d0…d3 первого и второго байтов ноты (табл.3).
Табл.3
Биты в аккумуляторе | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | N1 | N0 | d3 | d2 | d1 | d0 | 0/1 |
В зависимости от типа ноты (легато, нон легато, стаккато и пауза) соотношение значений байтов, отвечающих за звучание и молчание ноты, приведены в табл.4.
Табл.4
Биты второго байта | Тип
ноты |
Длительность звучания |
Длительность молчания |
|
7(N1) | 6(N0) | |||
0 | 0 | Пауза | 0 | 4/4 |
0 | 1 | Легато | 4/4 | 0 |
1 | 0 | Нон легато | 7/8 | 1/8 |
1 | 1 | Стаккато | 3/4 | 1/4 |
Длительность ноты с учетом ее типа тоже задана табличным способом, где сумма длительности звучания и молчания ноты с указанными соотношениями в табл.4 является постоянным и соответствует длительностям целой ноты, 1/2, 1/4 и т.д., где весь набор значений приведен в табл.5 с учетом длительностей триолей.
Табл.5
Биты первого байта | Длительность ноты |
Сумма длительности звучания и молчания |
|||
3(d3) | 2(d2) | 1(d1) | 0(d0) | ||
0 | 0 | 0 | 0 | 1/1 | 80h |
0 | 0 | 0 | 1 | 1/2* | 60h |
0 | 0 | 1 | 0 | 1/2 | 40h |
0 | 0 | 1 | 1 | 1/4* | 30h |
0 | 1 | 0 | 0 | 1/3 | 28h |
0 | 1 | 0 | 1 | 1/4 | 20h |
0 | 1 | 1 | 0 | 1/8* | 18h |
0 | 1 | 1 | 1 | 1/6 | 15h |
1 | 0 | 0 | 0 | 1/8 | 10h |
1 | 0 | 0 | 1 | 1/16* | 0Ch |
1 | 0 | 1 | 0 | 1/12 | 0Ah |
1 | 0 | 1 | 1 | 1/16 | 08h |
1 | 1 | 0 | 0 | 1/32 | 06h |
1 | 1 | 0 | 1 | 1/24 | 05h |
1 | 1 | 1 | 0 | 1/32 | 04h |
1 | 1 | 1 | 1 | Признак конца мелодии |
02h |
Извлекаемые из табл.5 байты звучания и молчания (в тексте программы они имеют условные обозначения Nt_D и Nt_P) запоминаются в ячейках ОЗУ, которые при последующем проигрывании вычитаются при каждом переполнении таймера-счетчика T/C1. Загружаемая константа для T/C1 выбрана таким образом, что одна целая нота от считывает 80h (128 десятичное) переполнений T/C1. Например, для ноты нон легато с длительностью 1/2 значение Nt_D=38h (56 десятичное) и Nt_P=8h и их сумма составит 40h (64 десятичное), что для темпа мелодии 120 тактов в минуту длительность звучания будет 0,875 с и молчание 0,125 с, всего длительность ноты 1/2 составит 1 с. Если та же нота является стаккато, то при упомянутом темпе мелодии звучание 0,75 с и молчание 0,25 с, при ноте легато звучание 1 с и молчание 0 с, при паузе звучание 0 с и молчание (пауза) 1 с.
Табл. 6
Биты в аккумуляторе | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | f5 | f4 | f3 | f2 | f1 | f0 | 0/1 |
Далее следует загрузка частоты ноты, где смещение в таблице определяется битами f0…f5 второго байта ноты, которые размещаются в аккумуляторе со смещением в один бит влево (табл.6) и загрузкой начального адреса 240h в счетчик-указатель DPTR аналогично алгоритму, упомянутого выше.
Извлеченные байты также запоминаются в ячейках ОЗУ и служат константой-источником для перезагрузки регистров TL0 и TH0 при каждом прерывании по переполнению таймера-счетчика C/T0. Величина константы выбрана для получения частоты вдвое большей, чем необходимо, с целью получения сигнала «меандр» для генерации звука путем инверсии бита P1.7 при каждом прерывании C/T0, которая автоматически делит частоту на 2.
После загрузки параметров ноты следует процедура активации флажков пользователя, запуск счетчиков-таймеров C/T0 и C/T1 с последующей проверкой конца проигрывания, его критерием служит переход с 00h в 0FFh ячеек ОЗУ с именами Nt_D и Nt_P (см. текст программы на языке Ассемблер).
Сам массив нот для мелодий размещен с адреса 2BAh, который занимает всю оставшиеся ЭСПЗУ МК, где число мелодий и их длина произвольная. В авторском варианте уместился 21 фрагмент мелодий со средней длительностью звучания 4…8 с, при желании можно применить AT89C4051 с объемом 4КБ ЭСПЗУ, в которой можно разместить до 60 мелодий, при этом схема и печатная плата остаются неизменными. Исходный текст программы можно скачать внизу статьи.
Конструкция и детали
Большинство деталей музыкального звонка собраны на односторонней печатной плате размерами 47х45 мм (рис.4). При монтаже печатной платы желательно предусмотреть установку микроконтроллера на панельку, что необходимо для удобства ремонта и смены прошивки МК в процессе эксплуатации.
ИМС КР142ЕН5А можно заменить LM7805.
Выпрямительный мост RС207 можно заменить аналогичным по параметрам или 4-мя выпрямительными диодами, например, типа 1N4007.
Светодиод можно взять типа АЛ307 или аналогичный отечественного или зарубежного производства с рабочим прямым током 10…15 мА, красного цвета свечения.
Громкоговоритель любой малогабаритный мощностью 0,5…1 Вт, подойдет даже громкоговоритель от системного блока компьютера.
Рис. 4. Печатная плата звонка
Понижающий трансформатор можно использовать любой, вторичная обмотка которого обеспечивает выходное напряжение 7…9 В и ток 200…250 мА. Постоянные резисторы типа МЛТ, ОМЛТ, С2-33 или аналогичные с мощностью рассеивания 0,125 или 0,25 Вт, подстроечный резистор R7 следует выбрать многооборотный типа СП5-2ВБ или импортный. Электролитические конденсаторы типа К50-35, К50-45 или аналогичные импортного производства. Керамические конденсаторы можно взять любого типа отечественного или зарубежного производства. Если невозможно найти керамические конденсаторы номиналом 2,2 и 10 мкФ (C1, C2 и C9), то допустимо применить электролитические.
Настройка электронной части
При соблюдении номиналов деталей и сборке платы без ошибок, она должна заработать сразу. До установки МК в панельку, следует проверить напряжение на выходе стабилизатора напряжения +5 В ±0,4 В, проверить работу динамика BA1 и светодиода HL1 путем замыкания на «землю» выводов 19 и 18, при этом из динамика должен раздаться щелчок и светодиод загореться. Далее подключают кассету с батарейками и проверяют напряжение питания на выводе 20, при включенном сетевом питании, оно должно быть 5 В, при отключении от сети 4,5 В (суммарное напряжение батареек). Убедившись, что все в порядке, отключают устройство от сети и извлекают батарейки из кассеты, после этого устанавливают МК в панельку, подключают остальные внешние элементы схемы и подают питание от сети. При этом проигрывается первая мелодия из массива нот, которая служит своеобразным контролем правильности работы звонка. Далее размыкают контакты выключателя SA2 и нажатием кнопки SA1 прослушивают перебираемые мелодии, по одной при каждом нажатии. Для фиксации повторения мелодии необходимо замкнуть контакты SA2 до окончания проигрывания мелодии, последующие нажатия SA1 будут проигрывать выбранную мелодию. С помощью резистора R7 устанавливают требуемую громкость звонка. Режим фиксации мелодии предпочтительно применять для сетевого питания, иначе батарейки разрядятся за 2…3 недели (для батарейного варианта питания).
После сборки и наладки электронную часть следует разместить в подходящий корпус, очень удачно подходят корпуса от абонентских громкоговорителей, которые уже содержат громкоговоритель и переменный резистор.
В заключение стоит отметить, что данную схему можно перевести на другой тип микроконтроллера, например Tiny2313, который по выводам полностью совпадает с AT89C2051. В этом случае вносить изменения в печатную плату БУ не нужно. Изменения в основном затронут только программу управления, только следует учесть меньший объем ЭСПЗУ для массива мелодий и архитектурные различия между Tiny2313 и AT89C2051. В дальнейшем в музыкальном звонке можно реализовать многоголосный вариант (полифонию) и даже синтез речи, но для этого понадобится более совершенный МК, например, из семейства ATmega или MSP430.
Файлы:
[hidepost] Скачать прошивку, исходники, плату (lay) [/hidepost]
Литература
1. Симутин А. Программируемый электромузыкальный звонок «К25-унисон» // Радиолюбитель. – 1991. – №7. – С.13–16.
2. Сторчак К. Музыкальный звонок, который умеет все // Радиохобби. – 1998. – №1. – С.44–45.
3. Дверной звонок «Патриот» http://radiokot.ru/lab/controller/02/
Автор: Сергей Тинкован, г. Кишинев, Молдова Радиоаматор, №6-8 2012г