Страница 1 из 3

Музыкальный дверной звонок

Добавлено: Ср мар 19, 2014 21:11:00
kostya13
Обсуждение статьи
http://radiokot.ru/circuit/digital/home/197

Re: Музыкальный дверной звонок

Добавлено: Чт мар 20, 2014 13:47:44
aon
А хорошо бы еще модернизировать или увеличить функциональность звонка. 1.- в случае отсутствия хозяев, звонок информировал (мелодией) что кто-то приходил (звонил). 2. - определение кнопкой звонка, свой или чужой.

Re: Музыкальный дверной звонок

Добавлено: Чт мар 20, 2014 14:10:23
kostya13
Немного о методе генерации звука.

Здесь перевод статьи, об оригинальной музыкальной шкатулке:
http://www.microcontrollerov.net/microc ... a-ATtiny45
Так же в этой статье есть реализация звонка, но ни прошивки, ни файлов схем нет.

Здесь есть схема похожего устройства, но на Attiny13:
http://aterlux.ru/index.php?page=articl ... y_musicbox
Метод геренации звука точно такой же. Т.к. там написано на Си, то алгоритм разобрать проще.

В общем случае для генерации звука заданной частоты используется DDS: прямой цифровой синтез частоты.
О самом методе можно почитать здесь:
http://ra3ggi.qrz.ru/UZLY/dds.htm

Здесь есть небольшой пример реализаци DDS с комментариями:
http://chipenable.ru/index.php/forum/2- ... -shim.html
По этой статье можно разобраться откуда берутся те или иные коэффициенты.

В общем случае у нас есть подготовленная таблица синуса. Указатель (φ) проходит по этой таблице и после умножения на коэффициенты громкости копирует это значение таблицы в регистр таймера, который управляет скважностью ШИМ и, как результат, значением напряжения на выходе.
От величины смещения указателя зависит генерируемая частота.

В asm-Файле, полученном из midi файла находятся частоты (ω). Т.е. по сути величина на которую надо увелчивать (φ) и задержки сколько надо эту частоту играть.
Т.к. в прошивке реализована полифония, то таких частот в прошивке может быть до 6 штук.
Последовательно перебирая длительности и частоты получается мелодия.

Общий метод генерации синусоиды с помощью ШИМ:
http://avr-start.ru/?p=749

Re: Музыкальный дверной звонок

Добавлено: Чт мар 20, 2014 14:28:57
kostya13
aon писал(а):А хорошо бы еще модернизировать или увеличить функциональность звонка.

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

Re: Музыкальный дверной звонок

Добавлено: Чт мар 20, 2014 19:54:44
Dmitry Dubrovenko
kostya13 писал(а):Обсуждение статьи
Если свяжетесь со мной по почте, то, наверное, можно будет доделать Continy45, что б она и для Вашего варианта генерила прямо готовый хекс.

Re: Музыкальный дверной звонок

Добавлено: Чт мар 20, 2014 21:15:50
FreshMan
читал но так и не понял алгоритм воспроизведения мелодии
в силах ли кто-либо изложить его крестьянским языком ?

Re: Музыкальный дверной звонок

Добавлено: Пт мар 21, 2014 08:35:13
kostya13
Начнем с самого начала. Будем рассматривать один канал т.к. сути это не меняет.
Немного упростим задачу, будем считать, что нам надо создать простую синусоиду определенной частоты.
В данной прошивке используется еще некоторые усложнения, чтобы придать более естественное звучание ноте, но эти нюансы сути не меняют.

Если будут понятны основы, то можно рассмотреть и дополнения.

Итак.

Используем ШИМ как ЦАП.
Напряжение на выходе зависит от скважности (http://ru.wikipedia.org/wiki/%D1%EA%E2% ... E%F1%F2%FC) сигнала.
Чем она меньше, тем выше напряжение.

Частота аналогового сигнала генерируемого с помощью ШИМ-сигнала можно рассчитать по формуле.
Fs = Fckl/(256 * N * M)
где Fclk - тактовая частота микроконтроллера, N - коэффициент деления предделителя, M - число отсчетов сигнала.

Основной минус этого способа, что для задания разных частот надо иметь таблицы синуса с разным количеством M.
Чтобы обойти этот недостаток используют DDS, но про него позже.

Еще раз повторю ссылку:
http://avr-start.ru/?p=749
В ней приведены рассчеты для синусоиды определенной частоты. Даже есть исходник простенького примерчика.
Можешь его посмотреть и сказать, что конкретно в исходном файле не понятно.

Если понятно как создать простую синусоиду заданной частоты, можно двигаться дальше.
Если есть вопросы, надо с ними сначала разобраться.

Re: Музыкальный дверной звонок

Добавлено: Пт мар 21, 2014 11:31:44
FreshMan
kostya13 писал(а):Еще раз повторю ссылку:
http://avr-start.ru/?p=749

Так как скважность изменяется от 0 до 0xFF(255), значит у нас будет 255 уровней постоянного напряжения.

почему 255 ?

Re: Музыкальный дверной звонок

Добавлено: Пт мар 21, 2014 11:41:33
kostya13
FreshMan писал(а):почему 255 ?


Потомучто используют 8ми битный таймер. Но уровней, конено 256 будет: от 0 до 255.

Re: Музыкальный дверной звонок

Добавлено: Пт мар 21, 2014 12:06:43
FreshMan
пока понятно
давайте дальше :))

Re: Музыкальный дверной звонок

Добавлено: Пт мар 21, 2014 20:08:37
Dmitry Dubrovenko
kostya13 писал(а):уровней, конено 256 будет: от 0 до 255.
Уровней, в нашем случае, как-раз будет именно 255, поскольку сигнал должен быть симметричным.

Re: Музыкальный дверной звонок

Добавлено: Пн мар 24, 2014 11:19:49
FreshMan
kostya13, разяснения больше не будет ? :wink:

Re: Музыкальный дверной звонок

Добавлено: Пн мар 24, 2014 11:53:03
kostya13
Будет :)

Итак, у нас есть таблица, допустим из 256 значений синусоиды.
Если индекс = 1 ( т.е. приращение указателя, который берет значения из таблицы) это позволяет генерировать звук частотой F = (T0CLK/510/256).
256 - количество данных в таблице, максимальное 510 количество значений счетчика.
Этот то, что было в прошлом примере.

Если мы будем увеличивать индекс на 2, то весь массив будет пройден вдвое быстрее, т.е. получим частоту F*2 , если будем увеличивать индекс на 3, то получим частоту F*3.

Полностью здесь автор "САБ" даже с расчетами объясненяет как зависит частота от шага выборки:
http://chipenable.ru/index.php/forum/2- ... -shim.html
Надо понять как этот пример работает.

Т.е. имея всего лишь одну таблицу можно по ней генерировать звук в большом диапазоне частот.

Вопросы?

Re: Музыкальный дверной звонок

Добавлено: Пн мар 24, 2014 15:02:05
FreshMan
kostya13 писал(а):Если мы будем увеличивать индекс на 2, то весь массив будет пройден вдвое быстрее, т.е. получим частоту F*2 , если будем увеличивать индекс на 3, то получим частоту F*3.

при увеличении индекса наша синусоида будет получатся более ломанной, менее гладкой ?
я так понимаю ?

Re: Музыкальный дверной звонок

Добавлено: Пн мар 24, 2014 15:58:36
kostya13
FreshMan писал(а):при увеличении индекса наша синусоида будет получатся более ломанной, менее гладкой ?
я так понимаю ?


Нет. При увеличении приращении индекса частота синусоиды повышается.
Вот смотри.

Берем таблицу и строим по ней синусоиду. Заметь за 20 отсчетов прошел всего один полупериод синусоиды:
Изображение

Теперь значение из таблицы берем через одно:
Изображение


За те же 20 отсчетов уже прошла полная синусоида, т.е. частота этой синусоиды в 2 раза выше, чем предыдущей.

Аналогично, если будем менять шаг выборки, соответственно будет меняться и частота.
Вот так все работает.

Re: Музыкальный дверной звонок

Добавлено: Пн мар 24, 2014 19:23:52
FreshMan
kostya13 писал(а):если будем менять шаг выборки,

тоесть время за которое будет считываться массив значеий для синусоиды ?

Re: Музыкальный дверной звонок

Добавлено: Вт мар 25, 2014 08:40:35
kostya13
FreshMan писал(а):тоесть время за которое будет считываться массив значеий для синусоиды ?


Шаг - это не время. Это безразмерная величина.

Время - это, например те 20 отсчетов.
Можешь считать, что 1 отсчет 1 секунда.
Т.е. каждую секунду напряжение на выходе меняется.
Значение напряжения на ножке контроллера - это значение из таблицы умноженный на некий постоянный коэффициент.
Каждую секунды берется значение из таблицы и преобразуется в аналоговый сигнал с помощью ШИМ.

Таким образом в первом случае за 20 секунд на динамик попадет лишь пол волны сигнала, во втором случаеза те же 20 секунд на динамике будет уже полная волна, т.е. во втором случае мы услышим звук в два раза выше по частоте.
Это происходит потому, что в первом случае за 20 секунд мы считали лишь половину таблицы, а во втором скакали через одно значение и допрыгали до конца за то же время, а вся таблица - это один период синусоиды.

(конечно если отсчет 1 секунда, никого звука мы не услишим, это лишь образное выражение).

И еще такая особенность. Если данных в таблице будет 256, а счетчик у тебя 8ми битный, т.е. в него тоже максимум можно записать 255. То при достижении максимума указатель автоматически сбросится из-за переполнения и отсчет пойдет от начала таблицы. Таким образом переполнение здесь даже помогает зациклить считывание синусоиды.

В принципе это можно наглядно проверить. Можно пример указанный выше переделать, чтобы выходная частота была в районе герц. И подключить светодиод. Будет видно как меняется частота мерцания от изменения шага выборки.

Re: Музыкальный дверной звонок

Добавлено: Вт мар 25, 2014 10:51:21
FreshMan
спасибо, усек :)
давайте дальше :write:

Re: Музыкальный дверной звонок

Добавлено: Вт мар 25, 2014 11:01:46
kostya13
FreshMan писал(а):давайте дальше :write:


дальше все попроще.
В asm файле хранится как раз длительность звучания (количество отсчетов) и этот самый шаг, определяющий частоту звучания.

Программа последовательно берет значения из массива мелодии, устанавливает шаг для указателя (по сути нота) и контролирует время звучания этой ноты.
Одновременно таких нот может проигрываться до 6 штук.

Затем все 6 нот складыавются, умножаются на коэффициент громкости и уже результирующее значение отправляется в шим.

Чтобы звучало немного естественней в начале звучания данные берутся из специальной таблицы (а не из таблицы синусоиды) и добавляется огибающая: зависимость громкости от времени.
В конце звучания тоже добавляетс огибающая, чтобы звучание ноты плавно затухало.

Вот, собственно и все.
Можешь еще раз перечитать перевод статьи, надеюсь на этот раз будет более понятно.

Вот еще одна хорошая статья про генерацию звука:
http://www.deep-shadows.com/hax/wordpress/?page_id=1111

Re: Музыкальный дверной звонок

Добавлено: Пн ноя 21, 2016 23:06:08
FoxS_1
Добрый вечер.
Понравилась схемка (http://radiokot.ru/circuit/digital/home/197/) данного дверного звонка своей простотой и возможностью залить в любое время мелодию которая понравится, но как всегда есть пару вопросов.
1) Я так понимаю когда XS2 пуск, по схеме, замыкается на массу тогда запускается воспроизведение мелодии?
2) От длительности нажатия не зависит проигрыш мелодии (в смысле нажал раз – мелодия запустилась, сразу же нажал еще, но пока полностью мелодия не отыграла на кнопку реакции нет)?
3)Если хочу сделать музыкальный усилитель мощнее, то просто сигнал с 6 ножки PB1 подавать на вход нового усилителя а R1,R2,R5 просто выкинуть со схемы? (И подскажите пожалуйста схемку какого-то усилителя немного мощнее, но не намного сложнее ;-))
4)Есть проблема такого рода : звонок планируется использовать в частном доме, то есть кнопка должна быть выносной, и расстояние от кнопки до звонка метров 20, как это скажется на работе или будут проблемы с такой протяженностью провода? К тому же хочу параллельно кнопке звонка установить геркон, типа кто-то пришел, но калитка на замок не заперта, человек не позвонил но открыл калитку что-бы зайти, и магнитик на калитке замкнул геркон и звонок зазвонил по любому.
5)Так как писал ранее дом частный, и хода два. Хочу сделать два звонка но с разными мелодиями на разную калитку, вопрос такого рода можно ли как-то подключить два звонка на один динамик (для минимизации конструкции)? Вариант одномоментного нажатия двух кнопок крайне низка, но присутствует.
6) Переключатель SA1 - полной блокировки звонка не лучше ли использовать выключатель на линии питания, дабы обесточить полностью схему ?
Благодарю за ответ и извините за изобилие текста.