Случилось так, что дверной звонок в моей квартире приказал долго жить. Верой и правдой он прослужил туеву хучу лет (даже и не помню сколько). Жил, по-моему, он еще с советских времен. И был он не музыкальным, а обычным зуммером. Издавал он противный дребезжащий звук, чем уже порядком надоел и раздражал. Руки сменить его на что-либо более современное все никак не доходили.
В связи кончиной звонка и пришла в голову идея собрать музыкальный звонок самому. И мелодии использовать те, которые нравятся мне. И сделать его таким, чтоб мне нравился. Тем более руки чешутся чего-нибудь попрограммировать и попаять.Прежде чем делать плату звонка и паять детальки, нужно смоделировать его на беспаечной макетной плате и посмотреть как он будет работать. Сказано — сделано.
Схема у звонка простейшая. К одной ноге прицеплена кнопка, к другой — динамик через транзистор. Кнопка замыкается на землю, соответственно, при нажатой кнопке активный уровень — логический ноль. Для подавления помех кнопка притянута через резистор 4.7 КОм к питанию. Вот в общем-то и вся схема.
Собираем схему на макетке
подключаем к ней питание и программатор
и начинаем программировать.
Что бы послушать, как будет звучать такой одноголосный музыкальный звонок, написал простую программу на WinAVR C. Программа простая, я ее хорошо прокомментировал. Разберется даже новичек. Никаких прерываний и т.д. Обычный бесконечный цикл с опросом кнопки и проигрыванием мелодии.
Я не владею музыкальной грамотой, поэтому погуглил на эту тему. Оказывается, что в музыке есть не 7 нот, а 12 (представляете, я и не знал). Каждая нота характеризуется частотой звука и длительностью звучания. После раздумий решил каждую ноту кодировать одним байтом. Естественно, мелодия будет храниться в программной памяти. Поэтому я пришел к следующей схеме, как кодировать мелодию.
В итоге, по такой схеме мы можем закодировать 32 ноты и 8 длительностей. Коду ноты с номером 1 соответствует нота «до» 1-й октавы, с кодом 2 — «до#» 1-й октавы, с кодом 3 — «ре» 1-й октавы и так далее. Всего 32 ноты. Это чуть дольше 2.5 октав. Для звонка, я думаю, более чем достаточно.
Но помимо нот, у нас есть паузы между нотами. Примем, что пауза будет кодироваться нулем, и соответствующей ей длительностью. Пауза в нашем устройстве — это просто момент, в который не воспроизводится звук в течении заданной длительности.
Если же и код ноты и код длительности, а соответственно и весь байт, будет равен нулю, то это будет означать конец мелодии.
Итак, открываем AvrStudio, открываем в ней программу, компилируем и заливаем ее в АТМегу8 (не принципиально, просто у меня их просто несколько штук без дела валяется).
После этого жмем кнопарик и наслаждаемся звуком…
Как все это выглядит и звучит я решил показать на видео (получилось через одно место, много раз оговорился, ну да ладно…).
Ну и как вам звучание? Мне не очень. Ну, конечно, можно его использовать его в качестве звонка, звучит это лучше, чем звучал мой умерший советский звонок. Но… я ожидал большего.
Теперь думаю, нужно делать по-другому. Первое что пришло в голову, это поставить простейший ЦАП R-2R и воспроизводить wav-файл, который хранить на карте памяти. Пошел переделывать….