Проекты : Игрушки


Тимофей Носов     25 мая 2014 г.

Звонок-проигрыватель рингтонов

Звонок собирается на микроконтроллере PIC12F675 и проигрывает заранее определенные (прошитые) мелодии. Цель статьи – научить подготавливать текст мелодии для последующей компиляции прошивки. Предполагается, что читатель имеет навыки работы в среде программирования MPLAB для PIC микроконтроллеров.

 

 

В схеме светодиод «активность» включается в момент проигрывания мелодии; для упрощения конструкции светодиод и резистор в его цепи можно не использовать. В момент воспроизведения ток потребления не более 40 мА. Схема работает до напряжения 1,6В. Кнопкой «выбор» перебираем и прослушиваем мелодии. Кнопками «пуск» и «стоп» запускаем и останавливаем последнюю выбранную мелодию.

 

Звонок проигрывает монофонические мелодии. Количество мелодий зависит от суммарного числа нот в мелодиях. Например, в приложенном исходнике (прошивке) получилось примерно 240 нот на 6 мелодий в памяти программы и 120 нот на 1 мелодию в ПЗУ (EEPROM). Таким образом,  имеется следующий репертуар из 7 мелодий:

– Огней как много золотых;

– Подмосковные вечера;

– На сопках Маньчжурии;

– Бородин - Князь Игорь;

– Лезгинка;

– Мурка;

– Крылатые качели (в EEPROM).

 

Вы можете сделать свой набор мелодий. Источником мелодий являются midi файлы. Скачаем для примера полонез Огинского – «Прощание с Родиной» здесь http://www.rusmidi.com/getmidi.php?id=2162&l=rus . Переименуем файл в «Полонез.mid».

 

Задача – отредактировать полифоническую (многоголосую) мелодию в монофоническую (одноголосую) без аккордов, т.к. наш звонок в один момент времени может играть только одну ноту в пределах трёх октав. Не пугайтесь, это не сложно, ломать – не строить. Для этого скачиваем и устанавливаем редактор midi файлов – «Able MIDI Editor». Запускаем Able MIDI Editor и открываем в этом редакторе файл «Полонез.mid».

 

 

В верхней части программы наблюдаем интуитивно понятные кнопки воспроизведения и редактирования, в правой части программы – кнопки управления треками инструментов, в нижней части - вся дорожка с проигрываемыми нотами, по центру – фрагмент дорожки.

 

Итак, отключаем ненужное, оставляем один инструмент – в данном midi файле это 2й трек. Нажмите кнопки как на рисунке ниже.

 

 

После этого на дорожке остаются ноты с основной мелодией. Нам нужен небольшой фрагмент; выделяем мышью ноты с 0 по 21 секунду. Копируем выделенное (правой кнопкой мыши Copy). Создаем новый лист мелодии через меню FileNew. Вставляем наш фрагмент EditPaste. Смотрим точнее длину мелодии – 20,6 сек. Изменяем настройку длины мелодии OperationsSet Piece Length на 20,6 сек.

 

Снова выделяем весь трек и перетягиваем мышью на одну октаву вниз, чтобы звуки были в пределах первой, второй и третьей октав, подробнее смотри http://ru.wikipedia.org/wiki/Равномерно_темперированный_строй

 

 

Положение и длина полоски означает момент начала и конца проигрывания соответствующей ноты. Пробелы между полосками – паузы. Несколько полосок в один и тот же момент времени (полоски друг над другом) это условно аккорд.

 

Сохраняем полученный результат FileSave as… ; в диалоговом окне сохранения выбираем тип файла «*.mid» указываем новое имя, например «Полонез-21.mid». Ликбез редактирования midi файлов закончен.

 

Далее преобразуем монофонический файл мелодии в последовательность символов, кодирующих ноту и её длительность. Для этого используем программу Ringtone Editor v2.2. Из программы Ringtone Editor открываем полученный файл «Полонез-21.mid». Должны наблюдать следующее окно.

 

Получаем последовательность символов, в которой указаны ноты (и длительности в скобках). Кому интересны подробности – читаем справку к Ringtone Editor в файле Editor.HLP.

 

E2(1/2) Dis2(1/16.) E2(1/16.) F2(1/8.) E2(1/8.) C2(1/16.) P(1/16) P(1/32) C2(1/16.) B1(1/16.) A1(1/2) C2(1/8.) E2(1/8.) E2(1/8.) A2(1/2) E2(1/8.) G2(1/4) Fis2(1/16.) F2(1/2) D2(1/8.) B2(1/4) A2(1/16.) Gis2(1/4) F2(1/16.) E2(1/4) D2(1/16.) E2(1/16.) P(1/16) P(1/32) E2(1/16.) D2(1/16.) C2(1/2) A1(1/8.) B1(1/16.) C2(1/16.) B1(1/16.) A1(1/16.) B1(1/16.) D2(1/16.) F2(1/16.) E2(1/16.) D2(1/16.) C2(1/16.) B1(1/16.) C2(1/16.) A1(1/16.) C2(1/16.) E2(1/16.) A2(1/16.) C3(1/2) A2(1/8.) B2(1/16.) C3(1/16.) B2(1/16.) A2(1/16.) B2(1/16.) D3(1/16.) F3(1/16.) E3(1/16.) D3(1/16.) C3(1/16.) B2(1/16.) A2(1/16.) Gis2(1/16.) A2(1/16.) B2(1/16.) Gis2(1/16.) B2(1/4.) A2(1/4)

 

Эту последовательность копируем в текстовый редактор и путём нехитрых автозамен и руками приводим к виду массива.

 

{E2,2}, {Dis2,16}, {E2,16}, {F2,8}, {E2,8}, {C2,16}, {P,16}, {P,32}, {C2,16}, {B1,16}, {A1,2}, {C2,8}, {E2,8}, {E2,8}, {A2,2}, {E2,8}, {G2,4}, {Fis2,16}, {F2,2}, {D2,8}, {B2,4}, {A2,16}, {Gis2,4}, {F2,16}, {E2,4}, {D2,16}, {E2,16}, {P,16}, {P,32}, {E2,16}, {D2,16}, {C2,2}, {A1,8}, {B1,16}, {C2,16}, {B1,16}, {A1,16}, {B1,16}, {D2,16}, {F2,16}, {E2,16}, {D2,16}, {C2,16}, {B1,16}, {C2,16}, {A1,16}, {C2,16}, {E2,16}, {A2,16}, {C3,2}, {A2,8}, {B2,16}, {C3,16}, {B2,16}, {A2,16}, {B2,16}, {D3,16}, {F3,16}, {E3,16}, {D3,16}, {C3,16}, {B2,16}, {A2,16}, {Gis2,16}, {A2,16}, {B2,16}, {Gis2,16}, {B2,4}, {A2,4}, {P,0}

 

В самом конце добавляем паузу нулевой длительности  {P,0} – признак конца мелодии.

 

Проект с программой для микроконтроллера состоит из нескольких файлов. Управление воспроизведением мелодий находится в файле main.c в функции select(x). Массивы мелодий находятся в файле ringtones.c.

 

Добавляем массив с мелодией в ringtones.c ; оформление массива можно сделать по образцу имеющихся мелодий

 

const unsigned char ringtone7[][2] =

{// Огинский – Прощание с Родиной

{E2,2}, {Dis2,16}, {E2,16}, {F2,8}, {E2,8}, {C2,16}, {P,16}, {P,32}, {C2,16}, {B1,16}, {A1,2}, {C2,8}, {E2,8}, {E2,8}, {A2,2}, {E2,8}, {G2,4}, {Fis2,16}, {F2,2}, {D2,8}, {B2,4}, {A2,16}, {Gis2,4}, {F2,16}, {E2,4}, {D2,16}, {E2,16}, {P,16}, {P,32}, {E2,16}, {D2,16}, {C2,2}, {A1,8}, {B1,16}, {C2,16}, {B1,16}, {A1,16}, {B1,16}, {D2,16}, {F2,16}, {E2,16}, {D2,16}, {C2,16}, {B1,16}, {C2,16}, {A1,16}, {C2,16}, {E2,16}, {A2,16}, {C3,2}, {A2,8}, {B2,16}, {C3,16}, {B2,16}, {A2,16}, {B2,16}, {D3,16}, {F3,16}, {E3,16}, {D3,16}, {C3,16}, {B2,16}, {A2,16}, {Gis2,16}, {A2,16}, {B2,16}, {Gis2,16}, {B2,4}, {A2,4}, {P,0}

};

 

Корректируем функцию:

void select (unsigned char x)

{

            switch (x)

            {

            case 1: play (ringtone1); break;

            case 2: play (ringtone2); break;

            case 3: play (ringtone3); break;

            case 4: play (ringtone4); break;

            case 5: play (ringtone7); break;

            case 6: play_eeprom(); break;

            }

}

 

и корректируем строчку по числу мелодий

            num_melodi++; if (num_melodi>6) num_melodi=1;

 

Компилируем (HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.71a).  Будем считать, что у вас успешно откомпилировалось. Предварительно прошивку можно послушать в Протеусе с выводом реального звука из ПК на колонки (наушники). Модель звонка-проигрывателя прилагается.

 

 

Пример реализации на печатной плате

 

  

 

Пищит вполне громко, но лучше использовать электромагнитные динамики от игрушек.

 

 

 

Файлы (прошивки с разными наборами мелодий):

Прошивка 1 (для PIC12F675)

Прошивка 2 (для PIC12F675)

Прошивка 3 (для PIC12F675)

Прошивка 4 (для PIC12F675)

Проект MPLAB

Проект Proteus

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

Able MIDI Editor

Ringtone Editor v2.2

Статья

 

 

Полезные ссылки:
Попробуй сделать печатную плату на кухне
Собери себе подходящий программатор
Узнай как прошить микроконтроллер прошивкой
Научись программировать и делать прошивки
Задай вопрос или найди ответ в форуме

 

 


Назад

Просмотров: 44586

 








 
 
 

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