- •Завдання для студентів заочного відділення
- •Р лабораторная работа №1. Азработка микропроцессорного устройства формирования звука
- •Постановка задачи
- •Предварительные сведения Физические основы музыкального ряда
- •Алгоритм работы программы
- •Выполнение работы.
- •Описание работы программы (листинг 1)
- •Формат кодируемых мелодий
- •Лабораторная работа №2. Разработка микропроцессорного синтезатора мелодий
- •Предварительные сведения
- •Алгоритм работы музыкального синтезатора выполнение работы.
- •Описание работы программы (листинг 2)
- •Iнститут «Комп’ютерних систем та iнформацiйних технолгiй»
Предварительные сведения Физические основы музыкального ряда
Известно, что весь музыкальный ряд делится на октавы. В современном музыкальном ряду каждая октава делится на 12 нот. Семь основных нот (белые клавиши) и пять дополнительных (черные клавиши).
Деление
на основные и дополнительные ноты
сложилось исторически. В настоящее
время используется музыкальный строй,
в котором все 12 нот одной октавы
равнозначны. Частоты любых двух соседних
нот отличаются друг от друга в одинаковое
количество раз (в
).
При этом частоты одноименных нот в двух
соседних октавах отличаются ровно в
два раза. В табл. 1 представлены частоты
звучания нот 9-ти октав.
Таблица 1. Частоты звучания нот 9-ти октав |
|
Для нас важно то, что коды всем этим нотам мы должны присваивать в порядке возрастания частоты. Начнем с ноты «До» первой октавы. Для музыкального синтезатора более низкие ноты не нужны. В табл. 2 показаны коды для всей первой октавы. Следующая, вторая октава продолжает первую и по кодировке, и по набору частот. Так нота «До» второй октавы будет иметь код 13, а частоту f13=f0*2. А нота «Ре» второй октавы будет иметь код 15 и частоту f15=f2*2. И так далее.
Таблица 2. Кодировка нот первой октавы
Код |
Нота |
Частота |
Код |
Нота |
Частота |
1 |
До |
f0 |
7 |
Фа# |
f6=f5*K |
2 |
До# |
f1=f0*K |
8 |
Соль |
f7=f6*K |
3 |
Ре |
f2=f1*K |
9 |
Соль# |
f8=f7*K |
4 |
Ре# |
f3=f2*K |
10 |
Ля |
f9=f8*K |
5 |
Ми |
f4=f3*K |
11 |
Ля# |
f10= f9*K |
6 |
Фа |
f5=f4*K |
12 |
Си |
f11=f10*K |
где
К =
Музыкальная длительность тоже легко кодируется. В музыке применяют не произвольную длительность, а длительность, выраженную долями от целой (см. табл. 3). В зависимости от темпа реальная длительность целой ноты меняется. Для сохранения мелодии необходимо соблюдать лишь соотношения между длительностями. Поэтому нам необходимо закодировать лишь семь вариантов длительности. Присвоим им коды от 0 до 6. Например так, как это показано в графе «Код» табл. 3.
Таблица 3. Кодирование музыкальных длительностей
Код |
Длительность |
Коэффициент деления |
0 |
1 (целая) |
64 |
1 |
1/2 (половинная) |
128 |
2 |
1/4 (четверть) |
256 |
3 |
1/8 (восьмая) |
512 |
4 |
1/16 (шестнадцатая) |
1024 |
5 |
1/32 (тридцать вторая) |
2048 |
6 |
1/64 (шестьдесят четвертая) |
4096 |
К
роме
нот, любая мелодия обязательно содержит
музыкальные
паузы.
В связи с этим удобно представить паузу как еще одну ноту. Ноту без звука. Такой ноте логично присвоить нулевой код.
Схема
Поставленная выше задача прекрасно решается при помощи микроконтроллера Atiny2313. Микроконтроллер имеет два встроенных таймера/счетчика. Какой же из таймеров использовать нам? Для формирования звука лучше подходит шестнадцатиразрядный таймер. Чем больше разрядов, тем с большей точностью можно выбирать его коэффициент деления.
Это очень важно для создания нотного стана. Поэтому для формирования звука выберем шестнадцатиразрядный таймер Т1. Определим режим работы нашего таймера. Для генерации звука удобнее всего использовать режим СТС (сброс по совпадению). Нужно выбрать такой коэффициент деления, чтобы на выходе таймера получить колебания в звуковом диапазоне частот.
Прежде всего, нужно отказаться от предварительного деления. Если частота кварцевого генератора и код, помещаемый в регистр совпадения, останутся такими же, как в предыдущей работе (в программе «Бегущие огни»), то в новом варианте частота повысится более чем в тысячу раз и как раз попадет в нужный диапазон.
Теперь определимся с тем, как сигнал будет попадать на внешний вывод микроконтроллера. Конечно, это можно сделать программно, при помощи процедуры обработки соответствующего прерывания. Но микроконтроллер предусматривает прямой вывод сигнала на один из своих выходов. Причем предусмотрены отдельные выходы для каждого из каналов совпадения. Для канала А подобный выход называется ОС1А. Он совмещен с третьим разрядом порта РВ и является альтернативной функцией данного контакта.
Подключение и отключение сигнала совпадения к внешнему выводу ОС1А производится программным путем. Это позволяет программе в нужный момент включать или выключать звук. Так как для вывода звука мы будем использовать один из разрядов порта РВ, то для подключения датчиков воспользуемся другим портом. А именно портом PD. Вариант принципиальной схемы описанного выше устройства показан на рис. 1.
|
Рис. 1. Схема сигнализатора «Семь нот» на ATtiny2313 |
Упрощённая схема на ATtiny2313.
Как видно из рисунка, нами снова применен внешний кварцевый резонатор (Q1) с цепями согласования (C1, С2). При подключении датчиков используется та же схема, что использовалась до сих пор для подключения контактов переключателя. Датчики подключаются ко всем разрядам порта PD. При этом для правильной работы датчиков для каждого разряда порта PD должны быть активизированы встроенные резисторы нагрузки.
Для подключения звукоизлучателя (динамика) применяется ключевой каскад на транзисторе VT1. Это самый простой способ получить звук достаточной громкости, учитывая, что наш сигнал — это прямоугольные импульсы с амплитудой, почти равной напряжению питания. Транзисторный каскад нужен лишь для повышения нагрузочной способности.
Однако подобная схема имеет и свой недостаток. В отсутствии звукового сигнала на выходе 15 микроконтроллера (рис.1) обязательно нужно установить низкий логический уровень. Высокий логический уровень приведет к тому, что транзистор VT1 будет постоянно открыт. Это вызовет недопустимо большой ток через динамик VF1. Постоянно протекающий ток через обмотку динамика вызовет излишнюю потерю мощности и может даже вызвать выход из строя как транзистора, так и динамика. При составлении программы мы должны учесть этот момент.
Вариант принципиальной схемы, выполненной в PROTEUS 7.5 для ATMEGA8 показан на рис. 2. Печатная плата изображена на рис. 3.
|
Рис. 2. Схема звукового сигнализатора в Proteus на ATMega8 |
|
Рис. 3. Печатная плата |
