РадиоКот >Схемы >Цифровые устройства >Игрушки >

Теги статьи: Дверной звонок

Музыкальный звонок на microSD

Автор: Riniy
Опубликовано 03.09.2012
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2012!"

 

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

Электронный звонок проигрывает музыкальные фрагменты с флеш-карты в произвольном порядке по нажатию звонковой кнопки, либо при отсутствии SD-карты воспроизводится звук из EEPROM памяти.

Для начала, небольшие технические характеристики:

 

Общие:

 

Входное напряжение питания

7…15 В

Потребляемый ток в режиме ожидания

70 мкА

Потребляемый ток без SD карты

9,5 мА   (без УНЧ)

Потребляемый ток SD картой

22,3 мА (без УНЧ)

Тип датчика двери

Геркон

   

Тип карты памяти 

microSD

Максимальный объем карты 

2 Гб

Формат файловой системы

FAT16

   

Формат файлов:

 

Максимальное количество файлов

200

Формат звуковых файлов

Wave (Windows PCM)

Количество каналов звука

1 (Моно)

Качество звука

8 Бит

Частота дискретизации (фиксированная)

8, 16, 32, 44.1, 48 КГц

   

 

 

 

 

 

 

 

 

 

 

 

 

 


 

При включении звонка в сеть резистор R1 держит транзистор VT1 закрытым, вся схема обесточена. Через цепь R1, R3, R9 течет слабый ток порядка 70 мкА, которого вполне достаточно для подсвечивания сверх яркого светодиода HL1, он с резистором собран внутри звонковой кнопки, для подсвечивания ее в темноте. При нажатии на звонковую кнопку S1 шунтируется цепь R3, HL1 и транзистор VT1 открывается, подавая питающее напряжение на УНЧ и стабилизатор 3,3 вольта. Контроллер при инициализации (нога PD0) открывает транзистор VT2, в свою очередь, последний удерживает ключ VT1 в открытом состоянии после отпускании кнопки. Одновременно с нажатием звонковой кнопки S1 на стабилитроне VD1 появляется лог1, пропадающая после отжимания кнопки. Данный сигнал поступает на вход PD1 МК и участвует в случайном выборе воспроизводимого файла с SD-карты. МК ожидает отпускание звонковой кнопки, в это время запущен 8-битный таймер, в регистре счетчика потом мы заберем случайное число, полученное длительностью удержания кнопки.

Теперь принимаемся за инициализацию SD-карты. Нам надо найти в главной загрузочной записи (MBR) адрес загрузочной записи раздела (PBR).

В первых 446 байтах содержится boot sector, в следующих 5 описание раздела, нам нужны адреса 0x1C6:0x1C9. Эти первые важные 4 байта, нам расскажут, куда нам надо прыгнуть, чтобы попасть в PBR =(0x1C6:0x1C9*512)

Но на флешках чаще встречается, что вместо MBR сразу находится загрузочная запись раздела (PBR).

 

Из рисунка видно, что по адресу 0x0 стоит значение 0xEB, это означает, что в данном месте у нас PBR. Далее нам необходимо убедиться, что мы работаем с таблицей FAT16 (адрес 0x39:0x3A). В адресах 0xB:0xC у нас количество байт в секторе (это число всегда равно 512 байтам), напоминаю, что данные пишутся в перевернутом виде (сначала пишется младший байт, потом старший), например, у нас 00 (0xB) и 02 (0xC), если их сложить и перевернуть, то получим число 0x02 00 (512).

Теперь мы из адресов 0xF и 0xE возьмем 2 байта, они укажут нам, по какому адресу находится 1-я копия таблицы FAT, вычисляем ее по формуле: 
adrFAT =(0xF:0xE*512+адресPBR)

Следующий 2 важных байта находятся по адресу 0x16:0x17, с помощью них определяем адрес корневого каталога: adrRoot =(0x17:0x16*2*512+адресFAT)

Из полученных двух адресов вычисляем третий адрес – область данных раздела =(adrFAT*16+adrRoot).

Используя найденные адреса, мы переходим к поиску и составления списка файлов.

Прыгаем мы сразу в корневой каталог (adrRootBase). Имена файлов могут быть в формате DOS 8.3 или Long FileName (LFN). В LFN-записи ничего страшного нет, кому интересно можете почитать.

Каждый LFN сектор занимает 32 байта (если значение смещения 0х0B равно 0x0F – это LFN) первый байт LFN определяет кол-во LFN-записей. LFN запись можно особо не проверять, т.к. нас интересует только файлы с расширением WAV, то запись LFN будет игнорироваться автоматически.

 

Убеждаемся, что данная запись не удалена, при этом вместо первого символа имени файла будет стоять 0xE5. Если это был последний файл и файлов больше нет, то получим пустой байт. Далее, что у файла расширение WAV (смещение 0x08), если это не так, то просто пропускаем эту запись и переходим к следующей.

Нам нужно только сохранить начальный адрес каждого найденного файла WAV (0x1A:0x1B)

С помощью случайного числа и количества найденных файлов, вычисляем, какой файл будем воспроизводить. Прыгаем по сохраненному адресу (не забываем прибавить к нему адрес области данных) и попадаем в заголовок WAV-файла.

 

В структуре WAV проверяем формат звука и количество каналов. Загружаем частоту дискретизации (0x18:0x1B) и сразу после значения «DATA» размер аудиоданных (0x28:0x2B), после идут аудиоданные, которые загружаются непосредственно в ШИМ.

При открывании двери, размыкается геркон SF1, музыка играет еще 2 секунды и воспроизведение прекращается. После принятия последнего байта аудио, МК сбрасывает ногу PD0 и обесточивает схему.

Если по каким-либо причинам не удается воспроизвести файл с SD-карты, то контроллер начинает воспроизводить звук (мелодичный звон колокола), записанный во внешнюю память AT24C512 (64 Кбайт), микросхема должна поддерживать рабочее напряжение 3,3 вольта.


Имеется поддержка обновления прошивки с SD-карты. Для этого файл прошивки «BELL_WAV.bin» (именно в .bin формате, т.к. в .hex много служебной информации с контрольными суммами) должен быть на SD-карте. Здесь уже имя файла должно точно соответствовать указанному. Далее, при открытой двери (датчик SF1 разомкнут) нажимаем и удерживаем кнопку на 5 секунд, пока не прозвучит гудок. Далее идет поиск файла на флешке, проверка версии прошивки и при соответствии обновляется прошивка, в случае успешного обновления прозвучит двойной гудок.

Ошибки

Ошибки могут возникнуть при обновлении версии ПО с SD-карты.
Возможные звуковые сигналы ошибок и способы их устранения.

Количество гудков

Описание ошибки

Причина и устранение ошибки

3

Уже обновлен

Обновление данной версией прошивки уже выполнено. Замените файл прошивки на более раннюю версию ПО.

4

Файл не найден

На SD-карте не найден файл с прошивкой. Проверьте наличие файла на карте. Файл должен быть формата: “BELL_WAV.BIN”

5

Другой файл

Файл не для данного устройства. Убедитесь наличие верного файла с прошивкой

6

Ошибка записи

При верификации прошивки обнаружено несовпадение данных. Повторите попытку обновления ПО.

7

Не верный том

SD-карта отформатирована не в FAT16. Используя компьютер, отформатируйте SD-карту в формат FAT16

8

SD-карта не отвечает

Проверьте наличие SD-карты в разъеме и ее исправность


Почему ни слова не сказано про таблицу FAT?, спросите вы. Тут есть небольшой нюанс. Для полноценной работы с таблицей FAT и одновременного воспроизведения звука с частотой выборки 48кГц, частоты кварца в 16МГц не хватает, в динамике появятся щелчки, трески. Тем более что МК питается 3,3 вольтами, частота на таком напряжении завышена, тем не менее, устройство исправно работает уже 3-й год (всего собрано 5 таких звонков). В связи с этим, есть небольшие условия при копировании (изменении) файлов на флешке: ни один из файлов не должен быть фрагментирован! В противном случае возможна резкая смена песни с предыдущими значениями частоты и размером файла.



Ну и фотографии печатки (одна чуть больше, другая чуть меньше размером) и готового устройства.


Звонок собран внутри корпуса активной компьютерной колонки (там уже есть УНЧ и БП), остается только замкнуть 1 канал на минус и переключить питание УНЧ от полевика.

 

 

Прошивка:

Программа написана на ассемблере и занимает 1,5 Кб, что с легкостью может разместиться в Tiny2313, но к сожалению, тинька не поддерживает команду MUL и бутлоадер.


Что и как шьем:

EEPROM надо запрограммировать файлом «BellDoor(64K).bin»

По желанию, можно заменить звук колокола на любой другой (мяуканье кошечки), для этого, из wav файла (незабываем про 8бит, моно) в любом HEX-редакторе (WinHex, PonyProg…) следует удалить всю служебную информацию, оставив только дискретизацию, размер аудио данных, ну и сами аудиоданные естественно.



Сначала в МК программатором заливается Loader файлом «BootLD.hex»

Fuse:

Bootrst           = 1 (progr)

CKSEL            = 1111 (progr)

BootLd size     = 1024, 0x0C00 (progr)

SUT              = 11

WDTon          = 2.7 V

BrwnDtct       = 1 (progr)

 

Затем с помощью SD карты заливаем прошивку «BELL_WAV.bin» вышеописанным методом.

Вот и все! Гостеприимной и приятной вам музыки уважаемые коты!

 


Файлы:
Прошивки, исходники, плата LAY, схема
Звук колокола
пример трека на SD-карту


Все вопросы в Форум.




Эти статьи вам тоже могут пригодиться:

Дверной звонок на ОУ.

Новая жизнь советского дверного звонка

Говорящий звонок.

Дверной звонок "Патриот"

Дверной звонок на Attiny2313.

Звонок с 64 мелодиями v3

Музыкальный звонок с 64 мелодиями на МК

Звонок с MMC/SD картой памяти.

Многтональный звонок.