Вы здесь

Дверной звонок на ATtiny45

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

Введение

Ремонт в квартире неумолимо приближается к финальной стадии. Замаячила необходимость покупки дверного звонка. Только вот зачем покупать это чудо инженерной мысли, если можно сваять что нибудь такое из подручного хлама (справедливости ради скажу, что микроконтроллер и разъемы купить все таки пришлось). Поиски подходящей схемы в инете дали мало результатов. Хотелось какую нибудь красивую мелодию. Можно конечно поставить контроллер с интерфейсом SPI и примастрячить к нему SD карточку. Только это потянет за собой еще и ЦАП (пусть даже на резисторах, тоже неслабо), а так же усилитель звуковой частоты. В общем, из пушки по воробьям.

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

Табличный синтезатор звука (перевод)

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

  1. Нет необходимости хранить таблицу для каждого тона. Любой тон можно синтезировать путем изменения скорости воспроизведения.
  2. Нет необходимости хранить всю таблицу целиком. Воспроизведение монотонных участков можно заменить циклом.
  3. Угасающий сигнал можно синтезировать с помощью генератора огибающей амплитуды.

Как работает табличный синтезатор звука (перевод)

Так как звук, генерируемый устройством, относительно простой, его просто сгенерировать с помощью микроконтроллера. Синтез звука по таблице разделен на две части — нарастание и выдерживание. Нарастающая часть — это момент, в течении которого радикально изменяется форма сигнала. Выдерживающая часть — это монотон с медленным угасанием. Завершающая часть не нужна. Выдерживающая часть считывает в цикле данные из заранее подготовленной области памяти.

Этапы синтеза звука по таблице

Рисунок 1. Этапы синтеза звука по таблице

Когда нота начинает проигрываться, инициализируются регистр тона (ω), указатель считывания (φ) и генератор огибающей амплитуды. При каждой выборке указатель считывания увеличивается на содержимое регистра тона для того, чтобы можно было определить генерируемый тон по значению регистра тона. Это основной принцип DDS. Генератор огибающей амплитуды создает угасающий звук путем медленного изменения амплитуды звука.

Табличный синтезатор звука

Рисунок 2. Табличный синтезатор звука

Реализация табличного синтезатора звука (перевод)

Для формирования звука устройство генерирует среднезаданный тон. Для этого необходимо реализовать несколько каналов синтезатора звука. Количество каналов звука влияет на загрузку процессора, увеличение количества каналов снижает частоту дискретизации, от чего снижается четкость звука. По этой причине эти параметры должны быть сбалансированы. Я определил, что необходимо 6 каналов по 32 кбит/с.

Основной поток исполнения программы считывает значение и запускает ноту с помощью всех синтезаторов один за другим. Каналы синтезатора управляются фоновым потоком (по прерыванию таймера с частотой 32 КГц), результаты работы которых смешиваются, обрезаются и скармливаются модулятору ШИМ. Так как количество каналов (и, соответственно, количество одновременно проигрываемых нот) невелико, старые ноты переписываются новыми. Особенно заметно прерывание негромких, медленно угасающих нот.

Диаграмма обработки данных

Рисунок 3. Диаграмма обработки данных

Я успешно реализовал все эти процессы на микроконтроллере ATtiny45. Микроконтроллер ATtiny45 имеет в своем составе тактовый генератор на 16 МГц, 4 Кб флэш памяти и таймер с режимом быстрой ШИМ (250 Кгц). Уровень загрузки микроконтроллера превышает 80 процентов. Если использовать микроконтроллер серии ATmega, в состав которого входит аппаратный блок умножения, можно с легкостью увеличить количество каналов синтезатора или точность синтезирования.

Оригинальная схема музыкальной шкатулки показана на рисунке 4.

Схема музыкальной шкатулки

Рисунок 4. Схема музыкальной шкатулки

Делаем звонок из музыкальной шкатулки

Чтобы сделать из музыкальной шкатулки дверной звонок, следует решить несколько проблем. Во первых, дверной звонок штука сугубо стационарная, и есть прямой смысл запитать его от 220 В. Во вторых, громкость дверного звонка должна быть намного больше, чем у музыкальной шкатулки, да еще желательно иметь возможность ее регулировать. Вообще для меня загадка, какой динамик цеплял автор к своему устройству. Подключение низкоомной нагрузки (4 — 8 Ом) чревато выгоранием портов. Даже при использовании 32-х омного динамика при питании 3,3 В в пике ток может достигнуть 100 мА, что для одной линии порта очень много. В третьих, не плохо было бы иметь тихий режим работы звонка, то есть когда подается только световой сигнал. Решение этих проблем представлено ниже, в разделе «Схема звонка» и «Схема блока питания».

Однако кроме схемы придется так же подправить и прошивку микроконтроллера. Прошивка была исправлена для реализации следующего алгоритма:

  • При включении звонка следует «удерживать кнопку звонка нажатой» до тех пор, пока мелодия не отыграет целиком или не откроют входную дверь. Это необходимо для защиты схемы (и ваших нервов) от нервных личностей, тыркающих кнопку по 25 раз. Для этого следует установить высокий логический уровень на линии 3 порта B микроконтроллера. Пока микроконтроллер не оттарабанит свою мелодию или хозяин не откроит дверь, все последующие нажатия на кнопку не будут иметь никакого эффекта, так как с точки зрения схемы она уже нажата.

  • При достижении конца проигрывания мелодии следует установить низкий логический уровень на линии 3 порта B микроконтроллера. Это приведет к обесточиванию схемы. Не играть же звонку одну и ту же мелодию бесконечно.

  • Нужно отключать звонок, когда дверь была открыта. Предполагается, что к линии 2 порта B (через разъем J5) подключена контактная группа. В моем случае это геркон, который замкнут при закрытой двери. Открытие двери приводит к изменению логического уровня на линии 2 порта B, а в микроконтроллере генерируется прерывание. В обработчике этого прерывания и следует обесточивать схему так же, как и в предыдущем случае.

  • И последнее, к линии 0 порта B (через разъем J5) можно подключить светодиод. Сделано это на всякий случай, так сказать «чтобы было». На данный момент он используется как индикатор нажатия кнопки дверного звонка, то есть во время проигрывания мелодии светодиод моргает. Удобно, когда звук убавлен на минимум. Я вывел его наружу, рядом с датчиком открытия двери

Логически (а в моем случае и физически) схема разделена на две части — звонок и блок питания. Перейдем к подробному рассмотрению этих схем.

Схема звонка

Принципиальная схема звонка представлена на рисунке 5. В архиве к этой статье прилагается файл «Звонок (Схема).dch» - эта схема в программе DipTrace 2.

Схема дверного звонка

Рисунок 5. Схема дверного звонка

Немного комментариев к схеме. Цепь R1 C1 — стандартная схема подключения сигнала RESET. Цепь R2 VO1 R3 Q1 – схема управления реле фиксации подачи напряжения питания. Само реле находится на схеме блока питания. Оптопара VO1 нужна для гальванической развязки блока питания и микроконтроллера. Цепь R4 Q2 – усилитель звука. Фактически это ключ, коммутирующий напряжение 12 В и коммутируемый напряжением 5 В. Применение такого простого усилителя стало возможным благодаря тому, что звук формируется с помощью ШИМ, а так же благодаря наличию напряжения питания 12 В. Цепь U2 C2 C3 – стабилизатор напряжения на 5 вольт, которые необходимы для питания микроконтроллера. Резистор R6 – подтягивающий резистор для датчика открытия двери. Резистор R5 – ограничитель тока для светодиода. К разъему J4 следует подключить переменный резистор сопротивлением от 470 Ом. Он предназначен для регулирования громкости звонка и у меня вынесен наружу. Перемычка J1 предназначена для коммутации канала. Дело в том, что звуковой сигнал генерируется одновременно на двух ножках микроконтроллера. Этой перемычкой можно указать, с какого контакта брать сигнал. Вообще это технологическая перемычка, ее можно не ставить, а сигнал брать с любого вывода. Если же она стоит, следует замкнуть перемычкой контакты 1-2 или 2-3. Вот вроде и все. Ах да, разъем J2 предназначен для подключения программатора.

Схема блока питания

Принципиальная схема блока питания представлена на рисунке 6. В архиве к этой статье прилагается файл «Звонок. Блок питания (Схема).dch» - эта схема в программе DipTrace 2. Работает она следующим образом. При замыкании кнопки звонка (контакты U8.1 и U8.2) пониженное, выпрямленное и отфильтрованное напряжение поступает через разъем U10 на плату звонка. При старте микроконтроллер подает напряжение на реле K1, тем самым как бы удерживая кнопку звонка нажатой. После завершения мелодии или срабатывания датчика открытия двери (смотря какое событие наступит раньше) микроконтроллер обесточивает реле K1, что приведет к прекращению подачи напряжения питания схемы.

Схема блока питания звонка

Рисунок 6. Схема блока питания звонка

Контакты U7.1 и U7.2 подключаем к 220 В. К контактам U8.1 и U8.2 подключаем кнопку звонка. Трансформатор T1 выбирается с выходным напряжением 10 — 14 вольт. Цепь L3 С2 — фильтр по питанию. Индуктивность дросселя L3 указана примерно, чем больше, тем лучше. Подойдет любой дроссель, например ДМ0,4-125. Конденсатор C2 выбирается по тому же принципу. Реле K1 выбирается с учетом того, что на его контактах будет коммутироваться переменное напряжение 220 В, а рабочее напряжение должно быть около 12 вольт. Возможно применение реле с рабочим напряжением 5 В, но для этого придется контакт 1 реле K1 подключить к шине +5 В. Диод D1 предназначен для защиты схемы от ЭДС самоиндукции, появляющейся в процессе коммутации обмотки реле. Подойдет любой.

Печатные платы

Схема звонка собрана на двух платах. Блок питания вынесен на отдельную плату из соображений безопасности, чтобы случайно не ухватится за элементы, находящиеся под высоким напряжением. В архиве находятся два файла для программы DipTrace 2: «Звонок (Плата).dip» и «Звонок. Блок питания (Плата).dip». Рассчитаны они на изготовление способом ЛУТ. Плата под блок питания разведена без ошибок и здесь я ее приводить не буду. А вот плата звонка имеет два косяка. Во первых, стабилизатор напряжения на 5 вольт расположен зеркально. То есть если плату не переделывать, стабилизатор следует паять к верху ногами, то есть маркировкой к плате, соответственно подогнув выводы. Сверьтесь с даташитом на ваш регулятор, сразу все поймете. Вторая ошибка связана с разъемом для подключения программатора. На плате (не на схеме), указана не та часть разъема, розетка вместо вилки. По посадочному месту они совместимы, а вот расположение выводов зеркальное. Сделал я это специально, так как у меня программатор какой то не русский. Так что учитывайте зеркальную распайку разъема, а лучше переделайте плату. Кроме неверной распайки разъема есть еще одна проблема. Дело в том, что вилка имеет несколько больший размер, чем розетка. Плата разводилась именно под розетку. Если установить вилку, что собственно и нужно сделать, вилка будет немного перекрывать левое нижнее крепежное отверстие. Если Вы планируете крепить плату с помощью этих отверстий, учтите это. На рисунке 7 приведена плата звонка. Красным выделены проблемные элементы.

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

Рисунок печатной платы звонка

Рисунок 7. Рисунок печатной платы звонка (красным выделены косяки)

Прошивка

Прошивка микроконтроллера написана на языке «Ассемблер». Проект для среды AVR Studio 4. Основной код находится в файле mg.asm. Файлы mg.inc и AVR.INC содержат вспомогательные макросы и определения. В файле melody.asm находится сама мелодия.

Файл melody.asm формируется автоматически с помощью сценариев mel2asm.pl и wav2asm.pl (второй мною не тестировался), расположенных в директории «utils». Для запуска этих сценариев в операционной системе Windows придется установить интерпретатор, например Cygwin. На вход сценарию mel2asm.pl скармливается текстовый файл с описанием мелодии и имя файла, в который следует поместить результат. Пример вызова сценария:

mel2asm.pl  melody.asm

Угловые скобки нужны обязательно. Далее заменяем файл melody.asm в проекте на результат работы сценария. В папке melodies есть три файла с описанием мелодий. В формате этих файлов я особо не разбирался. Если кто нибудь это сделает и напишет краткое руководство, будет здорово. Расширим этот документ.

По умолчанию в проект включена первая мелодия. Можно просто его скомпилировать и не заморачиваться с мелодиями. А можно и не компилировать. В архиве есть файл «DoorBell.hex» - уже скомпилированная прошивка.

Кроме прошивки микроконтроллера так же необходимо корректно установить некоторые фьюзы. На рисунке 8 представлен снимок окна установки фьюзов в CVAVR. Если используется другая программа, следует иметь ввиду, что отмеченные галочками биты ЗАПРОГРАММИРОВАНЫ, то есть РАВНЫ НУЛЮ.

Состояние фьюзов микроконтроллера

Рисунок 8. Состояние фьюзов микроконтроллера

Заключение

Правильно собранное и запрограммированное устройство работает сразу и в настройках не нуждается. Возникшие вопросы задавайте в комментариях к этой статье или на форуме.