Midi-контроллеры клавиатурного типа

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Содержание

Введение

Техническое задание

1. Выбор микроконтроллера

2. Принцип действия устройства

2.1 Описание структурной схемы

2.2 Описание принципиальной схемы

2.3 Выбор элементной базы

3. Разработка программного обеспечения МПС

3.1 Описание алгоритма работы устройства

3.1.1 Описание основных частей программы

3.1.2 Описание алгоритма основной программы

3. 2 Листинг программы

Заключение

Список используемой литературы

Введение

MIDI — цифровой интерфейс музыкальных инструментов — был разработан в 1982 году по инициативе нескольких ведущих производителей музыкальных инструментов — Yamaha, Roland, E-mu, Korg и др. Необходимость такого интерфейса была вызвана прежде всего тем, что выпускалось все больше автоматических устройств — ритм-машин и секвенсоров; первые по заданной программе выдавали ритмическое сопровождение с нужным рисунком, вторые использовались для запоминания сыгранных партий с целью последующего автоматического воспроизведения. Кроме этого, большой интерес представляло создание «электронного оркестра», когда один исполнитель мог бы заставить одновременно звучать несколько инструментов, используя только одну или две клавиатуры. Поскольку универсального способа соединения разнородных устройств тогда не было, каждый производитель сам разрабатывал способ соединения (интерфейс) и обеспечивал совместимость только внутри определенной серии своих инструментов. Необходим был единый интерфейс, который позволил бы соединять друг с другом инструменты различных производителей и моделей, с единым способом управления процессом извлечением звука и его параметрами. В результате был создан и принят в качестве общемирового стандарта интерфейс MIDI, устанавливающий как способ соединения инструментов — разъемы, кабели, электрические сигналы (аппаратная часть) так и способ их общения между собой (информационная часть).

Основная идея MIDI состоит в том, что это — событийно-ориентированный интерфейс, по которому передаются сообщения, информирующие о наступлении различных событий в реальном времени. Когда исполнитель ударяет по клавише или, наоборот, отпускает ее, усиливает или ослабляет давление на нажатую клавишу, переключает тумблеры или поворачивает регулятор на панели управления, давит на педаль — инструмент преобразует каждое из этих действий в соответствующее сообщение, которое в закодированном виде отправляется по интерфейсу. Сообщения генерируются и отправляются достаточно быстро, поэтому они весьма точно описывают не только сами действия исполнителя, но и его индивидуальную манеру игры. Другие инструменты, подключенные к этому же интерфейсу, могут воспринимать эти сообщения и отрабатывать их так же, как будто исполнитель воздействует на их собственные органы управления — именно так и реализуется упомянутый «электронный оркестр». По MIDI можно соединить практически любое количество инструментов, и все они могут обмениваться сообщениями друг с другом.

Благодаря MIDI создалась возможность не только объединения нескольких «полных» — то есть содержащих и клавиатуру, и блок синтеза звука — инструментов, но и разделения их на функционально независимые части — устройства ввода (контроллеры), обработки (процессоры) и синтеза звука (тонгенераторы). В настоящее время роль процессора и тонгенератора всё чаще берёт на себя персональный компьютер. MIDI-контроллеры существуют в виде клавиатур, педалей, дыхательных датчиков, и даже гитар, скрипок или флейт, причем последние три вида — не какие-нибудь электронно-кнопочные, а самые обычные инструменты, игра на которых при помощи датчиков и анализаторов преобразуется в поток MIDI-сообщений, по которому специальные синтезаторы могут весьма натурально воспроизвести исполнительские нюансы.

Разрабатываемое в рамках данной курсовой работы устройство относится к простейшим MIDI-контроллерам клавиатурного типа.

Техническое задание

В качестве задачи на разработку мне был предложен контроллер для MIDI-клавиатуры. По требованию преподавателя он должен выполнять следующие функции:

· считывать номер нажатой клавиши;

· снимать напряжение с регулируемого резистора, формирующего искусственную силу нажатия на клавишу;

· позволять задавать сдвиг октавы для расширения диапазона вводимых нот;

· отображать на индикаторе величину сдвига октавы;

· посылать по последовательному MIDI порту номер октавы, номер ноты и силу нажатия в соответствии со стандартом MIDI.

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

1. Выбор микроконтроллера

Для использования в данном устройстве мной был выбран микропроцессор Aduc 812. Так как Он обладает высокими техническими характеристиками, имеет встроенный АЦП и ЦАП, что позволяет существенно упростить схему. Другой весьма важный довод, что данный контроллер мне наиболее хорошо знаком по курсу лабораторных работ и допускает написание программ на языке высокого уровня PLM. Вкратце приведу его технические характеристики:

АНАЛОГОВЫЙ ВВОД/ВЫВОД

8-канальный прецизионный 12-разрядный АЦП

Встроенный 20ppm/°C ИОН

Высокая скорость выборок 200 кSPS

Контроллер канала ПДП к внешней памяти данных

Два 12-разрядных ЦАП с вольтовым выходом

Внутренний температурный сенсор

ПАМЯТЬ

8 Кбайт FLASH памяти программ

640 байт FLASH памяти данных

Внутренний генератор подкачки заряда

256 байт внутренней памяти данных

16 Мбайт пространства внешней памяти данных

64 Кбайт пространства внешней памяти программ

8051 — СОВМЕСТИМОЕ ЯДРО

12МГц номинальная частота [16МГц — макс. ]

Три 16-разрядных счетчика/таймера

32 программируемые линии ввода/вывода

Порт с высоким током — Порт3

9 источников прерываний, 2 уровня приоритета

ПИТАНИЕ

Специфицирован для работы от 3 В до 5В

Режимы: нормальный, холостой и дежурный

Последовательный порт UART

2-Проводной (I°C) и/или SPI порт

Сторожевой таймер (WDT)

Монитор источника питания

Описание имеющихся портов.

Цоколевка отдельных выводов имеет вид:

DVDD Положительное номинальное цифровое питание +3 В или +5 В.

XTAL2 Инвертирующий выход генераторного усилителя.

XTAL1 Вход усилителя и вход доступа к внутренним цепям генератора.

DGND Цифровая земля. Общая точка цифровых цепей.

Р0 двунаправленный Порт 0 с открытым истоком. Контакты порта с записанными в них «1» являются плавающими и могут быть высокоимпедансными входами. При обращении к внешней памяти программ или данных порт 0 мультиплексирован магистралями младшего байта адреса и данных. При такой операции порт подтянут внутренним образом при наличии в нем «1».

Р1 по умолчанию настраивается на ввод аналоговых сигналов, для конфигурирования контактов на цифровой ввод следует записать 0 соответствующий бит порта. Порт1 — многофункционален.

Р2 двунаправленный порт с внутренними, подтягивающими к питанию резисторами. Контакты Порта 2, с записанными в них единицами подтянуты вверх и могут использоваться как входы. При таком использовании следует иметь в виду, что они дают ток во внешнюю цепь. При выборке памяти программ Порт 2 содержит старший байт адреса, при обращении к памяти данных порт выдает средний и старший байты 24-разрядного адресного пространства.

Р3 Двунаправленный Порт 3 с внутренними, подтягивающими к питанию резисторами.

Контакты Порта 3, с записанными в них «1» подтянуты вверх и могут использоваться как входы. При таком использовании, следует иметь в виду, что они дают ток во внешнюю цепь. Контакты Порта 3 — мультиплексны.

DAC0 Выходное напряжение с ЦАП 0.

Цифро-аналоговый преобразователь.

ADuC812 на кристалле содержит два 12-разрядных Ц/А преобразователя. Один SFR управления и четыре SFR данных осуществляют управление работой ЦАП:

DAC0L/DAC1L — содержат 8 младших разрядов данных ЦАП

DAC0H/DAC1H — содержат 4 старших разрядов данных ЦАП

DACCON — содержат биты управления ЦАП общего назначения

При нормальной работе каждый ЦАП модифицируется только тогда, когда записывается младшая часть разряда SFR (DACxL). Можно модифицировать оба ЦАП одновременно, используя бит SYNC в регистре SFR DACCON. При 8-разрядной работе байт, записанный в регистры DACxL, автоматически направляется в верхнюю часть 12-разрядного регистра данных ЦАП.

Аналого-цифровой преобразователь.

Блок АЦП включает в себя восьмиканальный пяти микросекундный А/Ц преобразователь с однополярным питанием. Пользователю предоставлены многоканальный мультиплексор, устройство выборки — хранения, встроенный ИОН, система калибровок и собственно АЦП. Все компоненты блока легко управляется через три интерфейсных регистра специального назначения. А/Ц преобразователь состоит из стандартного конвертера последовательного приближения и емкостного ЦАП. Конвертер получает аналоговые входные сигналы в диапазоне 0 — Vref. На кристалле расположен ИОН — прецизионный блок с низким дрейфом, откалиброванный изготовителем до 2. 5 В.

На контакте Vref внутренний ИОН может быть подавлен внешним. Внешний ИОН может быть в диапазоне от 2. 3 В до Vref.

Однократный или повторяющийся режимы преобразования могут выполняться программно или подачей внешнего сигнала запуска преобразования на контакт 25 (CONVST/). Также для инициирования повторяющегося процесса преобразования можно использовать сигналы Таймера2. АЦП можно установить в режим передачи данных по каналу прямого доступа к памяти — ПДП (DMA), когда блок повторяет циклы преобразования и посылает выборки во внешнюю память данных (RAM), минуя процессор. Этот процесс может охватывать весь объем внешней памяти 16МБ. ADuC812 поставляется с заводскими калибровочными коэффициентами, которые загружаются автоматически по включению питания, обеспечивая тем самым оптимальную работу устройства. Ядро АЦП содержит внутренние регистры калибровок Смещения и Усиления, причем, обеспечено, чтобы программная процедура калибровки пользователя подавляла заводские установки, давая тем самым минимум ошибок в конечной системе. Если необходимо, то через АЦП можно так же преобразовать сигнал внутреннего температурного сенсора.

2. Принцип действия устройства

2.1 Описание структурной схемы

Cхема электрическая структурная представлена на чертеже в приложении КП04. 2201. 111. 00. Э1, она состоит из следующих блоков:

· Микроконтроллер

· Клавиатура

· Индикатор

· Интерфейс последовательного MIDI-порта

Клавиатура предназначена для ввода нот и для управления величиной сдвига октавы. Она представляет собой матрицу ключей 6*8. Код строки матрицы выдается в шести старших битах порта P0, а код столбца в восьми битах порта Р2. Нажатая клавиша обрабатывается микроконтроллером, который выполняет необходимые действия. Клавиатура состоит из 48 кнопок. 47 из них предназначены для ввода нот, а последняя кнопка отвечает за смещения октавы. При ее нажатии включается режим программирования. В этом режиме нажатие на одну из первых четырех клавиш задает соответствующее смещение октав.

Индикатор — это семисегментная светодиодная матрица, предназначенная для отображения текущего значения величины смещения октавы.

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

микропроцессор электрический интерфейс программа

2.2 Описание принципиальной схемы

Схема электрическая принципиальная представлена на чертеже в приложении КП04. 2201. 111. 00. Э3.

Устройство состоит из следующих функциональных блоков:

· Блок микроконтроллера. Осуществляет функционирование микроконтроллера. Состоит из следующих элементов:

o С1, С2, BQ1 — схема тактового генератора. Осуществляет выработку внешнего сигнала тактирования микроконтроллера частотой 12МГц.

o С3, R1, R2 — схема первоначального сброса микроконтроллера. Обеспечивает корректный запуск.

o ADuC812 — сам микроконтроллер ADuC812 фирмы Analog Devices.

· Регулируемый резистор СП3 сопротивлением 10к. С его помощью возможно изменять величину силы нажатия на клавиши. Значение напряжения на этот резисторе считывается при помощи АЦП в микроконтроллере, преобразуется и посылается через MIDI-порт в персональный компьютер;

· Индикатор. На схеме обозначен как HG1 В качестве которого используется АЛС232А (светодиодная семисегментная матрица). Представляет собой семисегментный индикатор, подключенный через специализированный дешифратор К514ИД1, для того чтобы не выполнять преобразование программно.

· Блок клавиатуры. Осуществляет подключение матрицы из 48 кнопок к 14 выводам микроконтроллера. Код строки матрицы выдается в младших шести битах порта P0, а код столбца в порте P2. Линии портов установлены в состояние логической единицы. При нажатии клавиши в соответствующие биты порта подается нулевой сигнал.

· Блок последовательной связи ориентирован на подключение к MIDI- порту звуковой карты и передает сигнал 0−5 В. Включает в себя два резистора R4, R5 и специализированный разъем для MIDI-порта. Подключен к выводу TxD микроконтроллера, через который ведется передача на MIDI-порт. Предназначен для передачи информации о нажатой клавише на персональный компьютер.

2.3 Выбор элементной базы

При разработке устройства были использованы следующие электронные компоненты:

§ Микроконтроллер ADUC 812 фирмы Analog Devices. Он обладает высокими техническими характеристиками, имеет встроенный АЦП и ЦАП, что позволяет существенно упростить схему. Другой весьма важный довод, что данный контроллер мне наиболее хорошо знаком по курсу лабораторных работ и допускает написание программ на языке высокого уровня PLM.

§ Дешифратор К514ИД1.

§ Индикатор. Для отображения информации был использован семисегментный светодиодный индикатор, потому, что его возможностей в рамках данного курсового проекта вполне достаточно (необходимо отображать только однозначное число величины сдвига октавы), и он довольно хорошо изучен на лабораторных работах.

§ Блок клавиатуры. Для ввода нот и управления сдвигом октав была использована матрица ключей 6*8.

3. Разработка программного обеспечения МПС

3.1 Описание алгоритма работы устройства

3.1.1 Описание основных частей программе

В программе можно выделить следующие блоки:

· Блок объявления переменных. В этом блоке описываются основные переменные и флаги.

· Блок инициализации программы. В этом блоке осуществляется первоначальная настройка микроконтроллера. Установка битов управления и направления передачи данных в портах ввода-вывода, инициализация АЦП и последовательного канала.

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

· Обработчик прерывания таймера. Осуществляет сканирование клавиатуры. При нажатии и отжатии клавиш выставляет и сбрасывает соответствующие флаги.

· Обработчик прерывания АЦП. Считывает значения преобразования АЦП. Переводит их из диапазона 0. 4096 в диапазон 0. 100.

3.1.2 Описание алгоритма работы основной программы

При включении питания начинает выполнение основной программы. В начале нее вызывается процедура инициализации контроллера. Установка битов управления и направления передачи данных в портах ввода-вывода, инициализация АЦП и последовательного порта на скорости 2400 бит в секунду, размером кадра 9 бит (8 бит данных + один стоп-бит), что соответствует стандарту MIDI-связи.

Далее начинается исполнительный блок программы. Происходит зацикливание с помощью бесконечного цикла do while 1. В начале этого цикла происходит проверка на нажатие клавиши программирования сдвига октавы. Если она нажата, то, в соответствии с выбранной первыми четырьмя клавишами музыкальной клавиатуры устанавливается сдвиг. Выбранная величина сдвига отображается на индикаторе. Затем происходит однократный запуск АЦП для считывания значения устанавливаемой пользователем силы нажатия на клавишу. На следующем этапе проверяется состояние флага klo, который отвечает за отпущенные клавиши. Если этот флаг не равен нулю, то есть имеется необработанная отпущенная клавиша, номер этой клавиши с установленным седьмым битом (в соответствии со стандартом MIDI) посылается через последовательный порт в персональный компьютер. На последнем этапе цикла происходит проверка нажатия новой клавиши. Если такое событие имеет место, то в последовательный порт посылается номер октавы и номер ноты, соответствующие нажатой клавише.

3.2 Листинг программы

ts: do;/*программа управления MIDI клавиатурой*/

$include (reg812. dcl)

declare

not (8) STRUCTURE (n (12) byte, nk (12) byte),

baz byte; /*Базовая октава*/

flag byte, /*флаг отработки АЦП*/

(kl, klp, klo) byte,/*номера клавиш*/

(adc_l, adc_h) byte,/*промежуточные данные с АЦП*/

power byte, /*Сила нажатия*/

st byte; /*значение столбца матрицы*/

adc_in: procedure interrupt 6; /*обработчик прерывания АЦП*/

adccon2=0;

adc_h=ADCDATAH; /*помещаем значения преобразования*/

adc_l=ADCDATAL; /*в переменные adc_l и adc_h*/

power=(adc_h*255+adc_l)*100/4096; /*рассчитываем силу нажатия*/

flag=1; /*устанавливаем флаг признака отработки АЦП*/

end adc_in;

time_int: procedure interrupt 1; /*Обработка прерывания таймера 1*/

st=st+1; if st=8 then do; st=0; kl=0;

if kl=0 then do; klo=klp; klp=0; end; /*клавиша отпущена*/

end;

/*Определение номера нажатой клавиши*/

If st=0 then p2=1 111 1110b; /*пускаем ноль по порту P2*/

If st=1 then p2=1 111 1101b;

If st=2 then p2=1 111 1011b;

If st=3 then p2=1 111 0111b;

If st=4 then p2=1 110 1111b;

If st=5 then p2=1 101 1111b;

If st=6 then p2=1 011 1111b;

If st=7 then p2=111 1111b;

if p0. 2=0 then kl=st*6+1;

if p0. 3=0 then kl=st*6+2;

if p0. 4=0 then kl=st*6+3;

if p0. 5=0 then kl=st*6+4;

if p0. 6=0 then kl=st*6+5;

if p0. 7=0 then kl=st*6+6;

if p0. 7=0 then kl=st*6+6;

if kl< >klp then do; klo=klp;klp=kl;end;/* нажата другая клавиша */

end time_int;

/***************основная программа ****************/

/*Инициализация*/

stolbec=1 111 1110b; /*назначаем 1 столбец для сканирования*/

P2=stolbec;

P1=1 111 1100b; /*направление ввода для линий клавиатуры*/

Baz=0; power=36; /*базовое смещение октав 0 сила нажат 36*/

flag=0; dpp=2;

ADCCON1=60h; ADCCON2=0;

/*инициализация таймеров и последовательного канала*/

et0=1;

tr0=1; tr1=1;tr2=1;/*включаем все три таймера*/

tf0=0; tf1=0;tf2=0;

Cnt2=0; Cap2=0;/*работа как таймер с перезагрузкой делителя*/

Tclk=1; /*использ Т1 для синхронизации послед порта*/

Th0=0; Th1=0f4h; Tl0=0; Tl1=0f4h;

Rcap2h=0ffh; rcap2l=70h; /*установ. пределитель для перезагрузки Т2*/

tmod=10 0001b; /*T0 14 разрядный T1 8 разрядов с перезагрузкой*/

scon=100 0000h; /*синхронизировать послед порт по T1*/

do while 1; /*бесконечный цикл сканирования клавиш*/

if (kl=48)and (klp< >kl) then do; /*цикл установки смещения октавы*/

do while kl< >0;end; /*ждём, когда отпустят клавишу 48*/

do while kl=0; end; /*ждём, когда нажмут клавишу*/

if kl< =4 then baz=kl /*если нажата одна из четырех первых клавиш, */

/*устанавливаем смещение октавы*/

else baz=0;

klp=kl;

p0=baz; /*выводим сдвиг октавы на индикатор*/

end;

sconv=1; flag=0; /*запускаем АЦП*/

do while flag=0; /*и ждем пока он отработает*/

end;

if klo>0 then do; /*если есть отпущенная клавиша*/

sbuf=klo/12+baz; call time (50); /*передаем номер октавы отпущ. клавиши*/

sbuf=(klo mod 12) or 80h; call time (50); /*передаем номер отпущен. клавиши*/

klo=0; end; /*с установленным седьмым битом*/

if (kl> 0) and (klp<>kl) then do; /*если нажата новая клавиша*/

sbuf=klp/12+baz; call time (50); /*передаем номер октавы*/

sbuf=klp mod 12; call time (50); /*передаем номер ноты*/

sbuf=power; call time (50); /*передаем силу нажатия*/

klp=kl; end;

end ts;

Заключение

При выполнении данного курсового проекта была изучена архитектура микроконтроллера ADUC 812 фирмы Analog Devices и построен на его основе контроллер MIDI-клавиатуры. Приобретены навыки программирования микропроцессорных систем и построения на их основе устройств сбора и обработки информации.

ПоказатьСвернуть
Заполнить форму текущей работой