• No se han encontrado resultados

Distribuidor MIDI para una orquesta digital

N/A
N/A
Protected

Academic year: 2017

Share "Distribuidor MIDI para una orquesta digital"

Copied!
83
0
0

Texto completo

(1)
(2)
(3)

.

RES ´UMEN

Uno de los problemas cuando se implementa una orquesta digital, con por lo menos 16 m´usicos electr´onicos, los cuales sustituyen a m´usicos de carne y hueso, es la distri-buci´on de datos MIDI(Musical Instrument Digital Interface)de una fuente a muchos receptores, lo que tiene como consecuencia la corrupci´on de datos en una conexi´on de red digital tipo estrella. Adem´as es necesario construir a la medida un distribui-dor hardware de datos, debido a que este tipo de dispositivos no est´an disponibles comercialmente, lo anterior es necesario para la implementaci´on de dicha orquesta electr´onica.

En este documento de tesis se presenta la descripci´on, dise˜no y construcci´on de un distribuidor hardware MIDI, denominado DHM, con el prop´osito de conectar por lo menos 16 instrumentos electr´onicos, los cuales conforman una orquesta digital. En este sistema, los instrumentos MIDI interconectados con el DHM, permite a un com-positor hacer un an´alisis interactivo de una composici´on musical. Adem´as se reducen costos debido a que el compositor no requiere que los m´usicos de carne y hueso est´en presentes.

(4)

´

Indice general

1. Introducci´on 6

1.1. Problem´atica de implementaci´on digital . . . 7

1.2. Implementaci´on de una orquesta digital . . . 8

1.3. Fabricaci´on . . . 9

2. Est´andar MIDI 10 2.1. Orquesta Digital . . . 12

3. Dise˜no 15 4. Monitor de canales con PIC18F452 26 4.1. C´omo funciona . . . 28

4.2. Adicionar nuevo comando . . . 28

4.2.1. Definir arreglos . . . 28

4.2.2. Identificar comando . . . 29

4.2.3. Escribir funci´on sem´antica . . . 30

5. Pruebas y resultados 32 Conclusiones 37 A. Especificaciones T´ecnicas 40 A.1. Diagrama detallado del prototipo . . . 40

A.1.1. Secci´on A . . . 41

(5)

A.1.3. Secci´on C . . . 43

A.1.4. Secci´on D . . . 44

A.1.5. Hojas de datos . . . 45

A.1.6. Optoacoplador 6N137 . . . 46

A.1.7. Buffer no inversor SN7407 . . . 57

A.1.8. Led T-1 . . . 62

(6)

´

Indice de figuras

2.1. Niveles L´ogicos MIDI . . . 11

2.2. Puertos MIDI . . . 11

2.3. Cableado MIDI . . . 12

2.4. Conexi´on b´asica MIDI . . . 12

2.5. Encadenamiento . . . 13

2.6. Distribuidor MIDI . . . 13

3.1. Diagrama interno . . . 16

3.2. Tabla l´ogica de entrada-salida 6N137 . . . 16

3.3. Prototipo 1: C1 = 100µf, R1−R11 = 220Ω . . . 16

3.4. IC SN7407 . . . 17

3.5. Prototipo 2: C1 = 100µf, R1−R33 = 220Ω . . . 18

3.6. Unidad de salida MIDI . . . 19

3.7. Etapa de entrada de la Unidad . . . 20

3.8. Etapa de salida de la Unidad . . . 21

3.9. Etapa de monitoreo . . . 21

3.10. Diagrama a bloques del sistema. . . 22

3.11. Lista de componentes . . . 22

3.12. Diagrama del Prototipo . . . 23

3.13. Rack 19”. . . 24

3.14. Distribuidor MIDI (Prototipo vista frontal) . . . 25

3.15. Distribuidor MIDI (Prototipo vista superior) . . . 25

(7)

4.1. Interfase Terminal-PIC18F452 . . . 28

4.2. Tarjeta de desarrollo basada en PIC . . . 31

5.1. Chip SAM2195 montado en placa 2195-EK . . . 32

5.2. Vista frontal y trasera del m´odulo sintetizador . . . 33

5.3. Diagrama a bloques de un instrumento digital . . . 33

5.4. Instrumento digital: m´odulo sintetizador y amplificador . . . 34

5.5. Red de distribuci´on de se˜nal MIDI . . . 35

5.6. Red de distribuci´on de se˜nal MIDI (prototipo) . . . 35

5.7. Conexi´on para monitoreo . . . 36

5.8. Monitoreo por software . . . 36

A.1. Prototipo Secci´on A . . . 41

A.2. Prototipo Secci´on B . . . 42

A.3. Prototipo Secci´on C . . . 43

(8)

Cap´ıtulo 1

Introducci´

on

Durante el proceso de composici´on y edici´on de piezas musicales llevado a cabo por compositores ya sea para una orquesta o una agrupaci´on musical de cualquier tama˜no el compositor se enfrenta con algunos inconvenientes, uno de los m´as importantes es que para evaluar el resultado de dicha composici´on se debe de escuchar la pieza musical siendo ejecutada por varios m´usicos al mismo tiempo, por lo que el compositor depende de la disponibilidad de un grupo numeroso de personas lo cual no siempre est´a bajo su control.

Con la aparici´on de sintetizadores digitales capaces de crear sonidos a partir de comandos sencillos se hizo posible sustituir en cierta medida instrumentos musicales reales con una serie de circuitos electr´onicos que generar´ıan un sonido lo m´as semejante posible al instrumento real, como resultado de la necesidad de una comunicaci´on en com´un entre dichos instrumentos electr´onicos se dio el nacimiento del protocolo de comunicaci´on MIDI (Musical Instrument Digital Interface). Este protocolo hace posible el intercambio de datos que representan el sonido y sus caracter´ısticas con base en el env´ıo de instrucciones formadas por valores num´ericos, estas instrucciones pueden representar eventos y mensajes de control y se env´ıan en lugar de enviar se˜nales de audio, el receptor interpreta dichas instrucciones y las convierte en sonido. Esto permite crear composiciones musicales y partituras digitales, representadas con mensajes MIDI.

(9)

dis-tribuci´on digital de se˜nales entre instrumentos musicales electr´onicos, basado en el est´andar MIDI que pueda ser utilizado como una red para interconectar una orques-ta digiorques-tal, substituyendo a m´usicos reales con instrumentos digitales, este sistema permitir´a interconectar una serie de sintetizadores (cada uno representando a un ins-trumento musical) con una fuente, dicha fuente podr´a generar o contener almacenada una secuencia de comandos (partitura digital) que representen una pieza musical la cual ser´a enviada a los instrumentos musicales electr´onicos para ser interpretada, esto con el prop´osito de ayudar a m´usicos y compositores en el proceso de composici´on, edici´on y grabaci´on de piezas musicales pudiendo disponer de una orquesta digital que ejecute sus composiciones cuando les sea necesario.

1.1.

Problem´

atica de implementaci´

on digital

El protocolo MIDI est´a pensado para comunicar un controlador o secuenciador que genera o contiene almacenada una secuencia de mensajes MIDI con uno o m´as sintetizadores. Cada uno de los sintetizadores puede generar el sonido de uno o varios instrumentos musicales interpretando los mensajes recibidos. En la comunicaci´on MI-DI todos los aparatos conectados a la cadena reciben todos los mensajes generados desde el controlador o secuenciador. Para diferenciar los mensajes que cada sinteti-zador debe interpretar, a cada instrumento se le asigna un canal l´ogico. GENERAL MIDI incluida en la especificaci´on MIDI 1.0, indica la lista de comandos que pueden representar hasta 128 instrumentos musicales.

(10)

Este tipo de conexi´on representa un problema de degradaci´on y p´erdida de sin-cron´ıa de la se˜nal original. El problema aumentara entre m´as dispositivos haya en la cadena. Una segunda alternativa es utilizar una configuraci´on tipo estrella. Las implementaciones de este tipo de distribuidores MIDI que se encuentran disponibles comercialmente, presentan la limitaci´on de canales de salida teniendo que encadenar distribuidores para aumentar el n´umero de salidas disponibles.

1.2.

Implementaci´

on de una orquesta digital

Este documento presenta el dise˜no de un DHM (distribuidor hardware MIDI) en base a las caracter´ısticas el´ectricas del protocolo de comunicaci´on MIDI. Se obser-var´an aspectos importantes como los requerimientos de voltaje, corriente, conectores, velocidad de transmisi´on y aislamiento. Este dispositivo permitir´a la comunicaci´on de un controlador o secuenciador con 16 sintetizadores, con la finalidad de implementar una orquesta digital.

El distribuidor tiene un opto acoplador que incorpora un emisor infrarrojo a la entrada acompa˜nado de un limitador de corriente. La salida del opto acoplador con-siste de un fotodiodo, un amplificador conectado a una compuerta l´ogica y una salida de transito de colector abierto. Este es un dispositivo lo suficientemente r´apido para el est´andar MIDI por lo que la se˜nal no presentara distorsi´on provocada por este dispositivo. Adem´as que cumple con los requerimientos de corriente y el aislamiento el´ectrico a la entrada del receptor.

(11)

1.3.

Fabricaci´

on

Se implement´o un prototipo utilizando un chasis con el est´andar rack de 19”(1u) establecido por la IEC (International Electrotechnical Commission) del cual se pre-senta un diagrama de construcci´on en cap´ıtulos posteriores. Se implement´o 1 entrada y 16 salidas utilizando conectores tipo Din 5, diodos led T-1 GaAsP para cada sa-lida en la parte frontal para un monitoreo visual y switches para la habilitaci´on e inhabilitaci´on individual por canal.

(12)

Cap´ıtulo 2

Est´

andar MIDI

MIDI (Musical Instrument Digital Interface) es un protocolo de interconexi´on pa-ra el intercambio de datos entre instrumentos musicales electr´onicos. Fue creado en 1983 con su primera especificaci´on, dise˜nado en sus inicios para sintetizadores y con-troladores su uso se extendi´o a otros equipos tales como secuenciadores, estaciones de trabajo de audio digital, video e iluminaci´on, etc.

Un mensaje MIDI no transmite se˜nales de audio, sino datos de eventos y mensa-jes de control que se interpretaran por el equipo receptor. El receptor realizar´a una determinada funci´on, como tocar una nota musical un determinado tiempo o controlar el volumen de alg´un canal de audio. La mayor´ıa de los dispositivos MIDI puede clasi-ficarse en 3 grandes grupos,CONTROLADORES: dispositivos que generan mensajes MIDI en tiempo real, originados por la interacci´on del usuario con controles f´ısicos en el aparato.SINTETIZADORES: dispositivos que reciben mensajes MIDI y que reali-zan acciones a partir de su interpretaci´on, ya sea generaci´on de sonidos o el control de configuraciones del propio dispositivo. SECUENCIADORES: dispositivos capaces de almacenar, editar y reproducir secuencias de mensajes MIDI que podr´an ser enviados a dispositivos externos. En la actualidad un dispositivo MIDI pude presentar m´as de una de estas funciones.

(13)
[image:13.612.84.467.132.268.2]

la comunicaci´on RS-232 define un nivel de corriente positivo como el ”0”l´ogico, y un nivel de corriente negativo como el ”1”l´ogico.

Figura 2.1: Niveles L´ogicos MIDI

Se fij´o en 31,250 baudios la velocidad de transmisi´on y recepci´on del protocolo, con una tolerancia de +/- 1 %, teniendo un tiempo de subida y tiempo de bajada m´aximos de 2 microsegundos. Requiere para su cableado conexiones tipo Din-5 con una longitud m´axima de cableado de 15m, y un aislamiento el´ectrico a la entrada del receptor.

En cuanto a conexiones MIDI cuenta con puertos de 3 tipos, MIDI IN: entrada receptora de datos MIDI en el dispositivo. MIDI OUT: salida para la se˜nal MIDI generada por el dispositivo. MIDI THRU: act´ua como repetidor de los datos recibidos en el puerto MIDI IN. Cabe notar que para interconectar m´as de un receptor se utilizara el puerto MIDI THRU que tendr´a una copia exacta de la se˜nal de entrada, ya que el puerto MIDI OUT no contiene la se˜nal de entrada, sino la se˜nal generada por el dispositivo al que pertenece el puerto.

[image:13.612.79.537.578.676.2]
(14)

Para implementar el cableado entre puertos MIDI, se utiliza el conector tipo Din-5, los pines 4 y 5 del conector se utilizan para el intercambio de datos y el pin 2 para el blindaje, los pines restantes no son utilizados.

Figura 2.3: Cableado MIDI

2.1.

Orquesta Digital

El protocolo MIDI implementa un ´unico canal f´ısico, el cual es dividido en 16 canales l´ogicos. Para identificarlo se incluye 4 bits que representan el canal en los mensajes transmitidos. La conexi´on b´asica de dispositivos MIDI consiste en conectar el contro-lador o secuenciador del puerto MIDI OUT al puerto MIDI IN del sintetizador.

Figura 2.4: Conexi´on b´asica MIDI

(15)

Figura 2.5: Encadenamiento

Este tipo de conexi´on presenta algunos inconvenientes siendo el m´as importante la degradaci´on de la se˜nal. Adem´as de la limitaci´on de un cableado total de m´axi-mo 15 metros que al ser rebasado provoca degradaci´on, el paso de la se˜nal por cada dispositivo presentara a su salida una degradaci´on adicional. Otro inconveniente de pasar la se˜nal en serie por cada dispositivo, es que presentara una desincronizaci´on que puede hacerse notoria en los tiempos de ejecuci´on indicados por la partitura. Estas limitaciones son lo que nos lleva a implementar un distribuidor a la medida de la orquesta.

Figura 2.6: Distribuidor MIDI

(16)
(17)

Cap´ıtulo 3

Dise˜

no

Para el dise˜no del dispositivo se utilizaron prototipos b´asicos basados en el est´andar de Hardware MIDI, aumentando su complejidad y funcionalidad una vez que el ob-jetivo b´asico de cada prototipo se hab´ıa cumplido.

En la primera etapa se implement´o un prototipo b´asico basado en el opto aco-plador 6N137 el cual consiste en un Led AlGaAS infrarrojo de 850nm, ´opticamente acoplado a un foto detector de alta velocidad, incluye un blindaje interno que provee de un alto ICM (common mode transient immunity) de 5 a 10Kv/uS que lo hace no susceptible a ruido generado por transitorios en la alimentaci´on, es capaz de operar hasta a 10Mbits/s lo que supera por mucho la velocidad de transmisi´on / recepci´on del protocolo MIDI, cuenta a la salida con un circuito en colector abierto que lo hace compatible con l´ogica TTL y CMOS, la corriente m´axima de entrada en el led infra-rrojo es de 15mA siendo ideal para utilizar con se˜nales MIDI, su tiempo de subida es de 50nS y 12nS en tiempo de bajada, y produce una distorsi´on t´ıpica de ancho de puso de 3nS lo cual es bajo en comparaci´on de la se˜nal MIDI

(18)
[image:18.612.205.364.90.155.2]

Figura 3.1: Diagrama interno

Entrada Pin de habilitaci´on Salida

1 1 0

0 1 1

1 0 1

0 0 1

1 Sin conectar 0

[image:18.612.184.395.238.342.2]

0 Sin conectar 1

Figura 3.2: Tabla l´ogica de entrada-salida 6N137

[image:18.612.79.500.411.668.2]
(19)

El prototipo numero 1 fue ´util hasta que se expandi´o a 10 salidas MIDI, con 10 salidas en muchas ocasiones la corriente no fue la suficiente para alimentar a todos los receptores perdiendo datos en el tr´ansito. En la siguiente etapa se decidi´o re implementar el circuito utilizando circuitos integrados SN7407 a la salida del opto acoplador para mantener la corriente en cada salida. El SN7407 es un buffer no inversor de 6 canales que cuenta con una salida de alto voltaje en colector abierto. Esto le permite ser compatible con l´ogica TTL y CMOS, su uso m´as popular consiste en excitar entradas TTL de etapas l´ogicas consecutivas. El SN7407 puede manejar voltajes de hasta 30v a la salida y su funci´on l´ogica es Y =A siendoY la salida y A la entrada. Tiene un tiempo de subida t´ıpico de 6nS y un tiempo de bajada de 20nS, que sumado al tiempo de subida y bajada del opto acoplador da un tiempo total de subida de 56nS y tiempo total de bajada de 32nS. El tiempo total de subida y bajada en comparaci´on con los 32µS de duraci´on de un pulso de se˜nal MIDI es muy bajo.

(20)
[image:20.612.69.451.67.618.2]

Figura 3.5: Prototipo 2: C1 = 100µf, R1−R33 = 220Ω

(21)
[image:21.612.116.438.143.576.2]

visual se decidi´o implementarlo independiente del circuito serie de cada salida MIDI y se construy´o el tercer prototipo. A continuaci´on se presenta el an´alisis electrico del circuito:

Figura 3.6: Unidad de salida MIDI

(22)

opto acoplador iopto. Al implementar 16 unidades de salida MIDI, necesitaremos de

[image:22.612.208.367.145.367.2]

32mAque pueden ser suministrados por el opto acoplador ya que tiene una corriente m´axima de salida imax = 50mA.

Figura 3.7: Etapa de entrada de la Unidad

En el circuito de salida MIDI OUT se utilizaron R1 y R2 con valor de 220Ω, con esto se limita la corriente de salida. Teniendo la corriente m´axima cuando la impedancia de entrada del dispositivo MIDI conectado a esta salida tienda a 0Ω lo que nos dar´ıa una corriente m´axima de salida v

(23)
[image:23.612.202.374.71.298.2]

Figura 3.8: Etapa de salida de la Unidad

Para obtener la resistencia en la fase de monitoreo debemos conocer el consumo de voltaje del Led GaAsP. De acuerdo a las hojas de especificaci´on su consumo t´ıpico es deVLed = 1,9V, para obtener una corrienteiLed = 10mApodemos calcular la

resisten-cia deRLed = (Vcc−VLed)/iLed, de este c´alculo obtenemosRLed = 310Ω. Seleccionando

el valor comercial RLed = 330Ω obtenemos una corriente iLed = 9,39mA.

Figura 3.9: Etapa de monitoreo

[image:23.612.220.353.474.648.2]
(24)
[image:24.612.80.424.125.323.2]

como la anteriormente analizada. A continuaci´on se presenta el diagrama completo (El diagrama detallado se incluye en el Anexo a).

Figura 3.10: Diagrama a bloques del sistema.

Componente N´umero de parte

IC1 6N137

IC2-IC7 SN7407

MIDIIN,OUT1-16 DIN-5

L1-L16 HLMP-130X

C1 100µA

S1-S16 S-116

R1-R36 220Ω

R34-R49 330Ω

[image:24.612.186.391.427.563.2]
(25)
[image:25.612.150.415.65.701.2]
(26)
[image:26.612.79.446.118.692.2]

El rack de aluminio se realiz´o conforme las medidas est´andar de rack de audio de 19”.

(27)

De acuerdo al dise˜no previamente analizado se construyo el prototipo.

[image:27.612.76.499.101.163.2]

Figura 3.14: Distribuidor MIDI (Prototipo vista frontal)

Figura 3.15: Distribuidor MIDI (Prototipo vista superior)

[image:27.612.80.498.231.370.2]
(28)

Cap´ıtulo 4

Monitor de canales con PIC18F452

En este cap´ıtulo se presenta el dise˜no y la escritura del c´odigo fuente de un progra-ma de entrada y salida de datos para supervizar el funcionamiento de los canales del distribuidor MIDI, con base en el microprocesador PIC-18F452. Se utiliza lenguaje C/C++, debido a que con este tipo lenguajes es posible manipular los componentes de hardware directamente como son: memoria RAM. ROM, puertos de entrada y salida, interrupciones, entre otros mecanismos que debe tener un dispositivo computacional. Cabe mencionara que cada canal del distribuidor MIDI se encuentra conectado a un bit de un puerto paralelo del microcontrolador.

Cuando se crea un nuevo microprocesador es necesario escribir rutinas de entrada y salida en lenguaje ensamblador. Este proceso es repetitivo para cada nuevo dise˜no de hardware. Las funciones escritas para los microprocesadores viejos se tienen que volver a reescribir con una nueva tabla de instrucciones. Es evidente que se pierde tiempo, dinero, y esfuerzo, “inventando el hilo negro”.

Cada vez que se hace un cambio en el dise˜no de un circuito integrado programable por muy sutil que ´este sea, crea un problema de compatibilidad con la programaci´on en lenguaje ensamblador, es decir, es necesario reescribir las rutinas para adaptarlas al nuevo dispositivo, ocacionando un problema a los desarrolladores de nuevos dispo-sitivos como es, por ejemplo, los instrumentos de medici´on utilizados en el laboratorio de ac´ustica.

(29)

con un lenguaje de alto nivel como C/C++; entonces el tiempo de dise˜no se reduce de una manera considerable. Esto es, porque la programaci´on de aplicaciones utilizan los mismos algoritmos y las mismas funciones, independientemente del hardware del nuevo sistema.

En otras palabras, escribimos un programa llamado “monitor”que permite inter-actuar con el microcontrolador PIC18F452. Monitor es un “microsistema operativo”, con el cual es posible explorar los componentes de hardware y software del distri-buidor MIDI, por ejemplo, los datos en memoria, direcciones de memoria, datos en puertos, vectores de interrupci´on, entre otras variables.

Monitor tiene cinco comandos b´asicos:wm, escribir un dato en memoria;rm, leer un dato de la memoria; rp, leer el dato de un puerto; wp, escribir un dato en un puerto. En la Tabla 4.1 se muestra la sintaxis de dichos comandos. La antrada y salida de estas ´ordenes se realizan a trav´es de una terminal de comandos conectada en serie con el hardware de desarrollo. En la Figura 4.1 se muestra la configuraci´on para desarrollar el trabajo.

Cuadro 4.1: Comandos del monitor

Sintaxis Descripci´on

wm 1000 55 Escribir 55H en la direcci´on 1000H

rm 2000 Leer contenido de memoria 2000H

wp 200 FF Escribir FFH en el puerto 200H

rp 400 Leer contenido del puerto 400H

dm 1000 200 Leer (dump) 200H datos a partir

de la direccion de momoria 1000H

(30)

HYPER TERMINAL

[image:30.612.179.397.70.128.2]

SERIAL RS−232 PICDEM 2 PLUS PIC18F452

Figura 4.1: Interfase Terminal-PIC18F452

4.1.

omo funciona

El coraz´on del monitor es la funci´on main(). Aqu´ı se inicializan variables, se abre el dispositivo de comunicaciones RS232, se muestra un mensaje de bienvenida en la terminal, y se muestra dos caracteres los caracteres “>>” esperando alg´un comando. Cada comando de entrada es terminado con una secuencia de retorno de carroCR. De esta forma el programa principal es un lazo infinito que espera una orden de entrada v´alida. Si el comando no est´a definido, el sistema mostrar´a un mensaje de error. Si s´olo se envian retornos de carro el sistema siempre mostrar´a los caracteres “>>”. Cuando el sistema acepta un comando, ´este se coloca como argumento en la funci´on

comand(), la cual decodificar´a la orden. Si el comando es v´alido se llama a su funci´on sem´antica para realizar la operaci´on requerida.

4.2.

Adicionar nuevo comando

Para crear un nuevo comando, por ejemplo, podemos seguir el procedimiento para el comando de leer la memoria rm. Esta orden tiene un argumento, la direcci´on que contiene el dato a leer.

4.2.1.

Definir arreglos

(31)

dorm[] = "[RM]\0";

rm[] = "rm\0";

man2[] = "rm <hexdir>

--read memory\n\r\0";

4.2.2.

Identificar comando

Para identificar un nuevo comando es necesario insertar el c´odigo correspondiente en le funci´on command() para seleccionar este nuevo comando:

if(strcmp(rm,str)==0) { mputstr(dorm); token2=strtok(’\0’,del); direc=htoi(token2); readmem(direc); return(0); }

La funci´oncomand(char∗str), decodifica los comandos. Tiene como argumento la

variablestrque apunta a la direcci´on donde se encuentran los caracteresrm. Esta ca-dena se compara con otra caca-dena definida por el apuntadorrmen la funci´onstrcmp(). Para indicar que el comando es aceptado se llama a la funci´on mputstr(dorm) para mostrar la cadena [RM] en la terminal. Debido a que rmrequiere de otro argumento (direccion de memoria), los caracteres de este argumento se extraen de la cadena de entradastring y se colocan en la variabletoken2. Estos caracteres ASCII se convier-ten a un valor entero con la funci´on htoi(token2) dejando un n´umero entero en la variable direc. Este valor se pasa a la funci´on sem´antica readmem(direc) para reali-zar la operaci´on de leer memoria. Cabe mencionar que si el comando que se adiciona tiene dos argumentos, el segundo par´ametro se ha de colocar en la variable apuntador

(32)

4.2.3.

Escribir funci´

on sem´

antica

La funci´on sem´antica readmem() realiza la operaci´on de lectura de memoria. Primero se coloca el prototipo de dicha funci´on en la secci´on de prototipos que se encuantra al principio del programa. Esto es para que readmem() se pueda llamar desde cualquier parte del programa.

Prototipo:

void readmem(unsigned int);

Funci´on sem´antica:

void readmem(unsigned int dir)

{

unsigned char data;

char str[40];

itoa(dir,str);

data=peek(dir);// leer memoria

itonha(data,2,str);

mputstr(str);

dir=0;

data=0;

}

(33)
[image:33.612.77.501.145.416.2]

or-questa normal con el prop´osito de desarrollar composiciones arm´onicas sin tener que contar con los m´usicos de carne y hueso. En el Anexo B se presenta el c´odigo fuente completo del programamonitor.

(34)

Cap´ıtulo 5

Pruebas y resultados

[image:34.612.199.376.426.645.2]

La implementaci´on de una orquesta digital puede ayudar a un compositor a com-probar y revisar una composici´on. Resolviendo el problema de tener que contar con un grupo de m´usicos de carne y hueso. Con el uso de sistemas de composici´on asis-tidos por computadora es posible implementar dicha orquesta utilizando el protocolo MIDI. En la implementaci´on de la orquesta digital se utiliz´o el circuito SAM2195 fabricado por la empresa DREAM S.A.S FRANCE, para sintetizar cada instrumento musical.

Figura 5.1: Chip SAM2195 montado en placa 2195-EK

(35)
[image:35.612.73.512.168.326.2]

MIDI totalmente independiente. Cuenta con una entrada MIDI y una salida de audio anal´ogico y esta montado en un circuito impreso de evaluaci´on 2195-EK, el cual sera controlado por el software MIDI. Cada instrumento musical requerido por la orquesta puede ser sintetizado por uno de estos m´odulos.

Figura 5.2: Vista frontal y trasera del m´odulo sintetizador

Cada instrumento digital a sintetizar se puede ver como un diagrama a bloques que consiste en: una se˜nal MIDI generada por un controlador, el m´odulo conformado por el chip SAM2195 montado en el circuito impreso 2195-EK, un amplificador de audio que recibir´a la se˜nal anal´ogica generada por el sintetizador y un altavoz que transformara la se˜nal el´ectrica en ondas mec´anicas. En la Figura 4.3 se muestra el flujo de la se˜nal MIDI previamente descrito.

Figura 5.3: Diagrama a bloques de un instrumento digital

[image:35.612.80.521.542.636.2]
(36)
[image:36.612.137.440.166.450.2]

conectarse a un altavoz que sea de un tama˜no semejante a la fuente que se desea sintetizar. Adem´as si se es posible colocar dichos altavoces en un ´area que simule el tama˜no de una orquesta real y acomodarlos en las posiciones que ocupar´ıan los m´usicos de carne y hueso.

Figura 5.4: Instrumento digital: m´odulo sintetizador y amplificador

(37)
[image:37.612.90.519.89.330.2]

Figura 5.5: Red de distribuci´on de se˜nal MIDI

[image:37.612.75.513.405.674.2]
(38)
[image:38.612.79.516.180.293.2]

Mediante el uso del software MIOS Studio en una PC fue posible monitorear los datos en la red, utilizando una interface MIDI-USB, se generaron datos MIDI alimentando el distribuidor en su puerto MIDI IN y se utiliz´o el ´ultimo puerto MIDI THRU para retroalimentar la PC en el puerto MIDI IN de la interface USB.

Figura 5.7: Conexi´on para monitoreo

[image:38.612.75.560.364.575.2]
(39)

Conclusiones

Esta tesis present´o los aspectos de dise˜no y an´alisis de un sistema de distribuci´on de se˜nal MIDI que nos permiti´o implementar una orquesta digital. Este tipo de sistemas facilitan a los m´usicos el proceso de composici´on y revisi´on de una pieza musical, abaratando los costos de tener que disponer de una orquesta real, esto al no depender de un gran n´umero de personas que ejecuten las composiciones.

El sistema dise˜nado permiti´o la interconexi´on de instrumentos digitales a la me-dida de las necesidades de la orquesta digital utilizada, esto no siendo posible con equipo comercial de disponibilidad y caracter´ısticas limitadas.

(40)

La evaluaci´on de resultados se llev´o a cabo utilizando software de monitoreo de se˜nal en una PC, una tarjeta de desarrollo programable basada en microcontrolado-res PIC, as´ı como realizando diversas pruebas con secuenciadomicrocontrolado-res, controladomicrocontrolado-res y sintetizadores.

El dise˜no fue ´util con un m´aximo de 16 instrumentos, lo cual puede ser un numero bajo para determinados tipos de orquestas que cuentan con un extenso n´umero de instrumentos. Adem´as que no fue probado con cableado mayor a 15 metros que es el l´ımite de longitud de cableado indicado por la especificaci´onGeneral MIDI, pero que en un escenario donde se presente una orquesta real puede haber distancias similares a esta longitud o incluso mayores.

(41)

Bibliograf´ıa

[1] MIDI Manufacturers Association,Complete MIDI 1.0 Detailed Specification, MIDI Manufacturers Association Incorporated, 1995, USA.

[2] Messick Paul, Maximum MIDI: Music Applications in C++, Manning Publica-tions Co., 1997, Canada.

[3] Huber David Miles, The MIDI Manual, SAMS, 1991, USA.

[4] Penforld R. A., MIDI, Proyectos pr´acticos de m´usica electr´onica, Paraninfo S.A., 1996, Madrid.

[5] Pe˜na G. M.. J.J. Negrete R., “Aplicaci´on del chip SAM2195 como un instrumento musical para simular una orquesta de Jazz”, IPN, 2012, M´exico.

(42)

Anexo A

Especificaciones T´

ecnicas

(43)
[image:43.612.71.479.127.575.2]
(44)
[image:44.612.70.478.76.731.2]
(45)
[image:45.612.69.478.80.721.2]
(46)

A.1.4.

Secci´

on D

[image:46.612.69.396.76.750.2]
(47)
(48)
(49)
(50)
(51)
(52)
(53)
(54)
(55)
(56)
(57)
(58)
(59)
(60)
(61)
(62)
(63)
(64)
(65)
(66)
(67)
(68)
(69)
(70)
(71)

Anexo B

odigo Fuente de MONITOR

1 //---2 // NAME

3 // main4.c -monitor para PIC18F452 4 // DATE

5 // MPG040511 6 // REM

7 // Uso de PICDEM 2 PLUS y de 8 // MPLAB ICD2, MCC18, MPLAB

9 //---10 // 11 #include<p18cxxx.h> 12 #include<usart.h> 13 #include<string.h> 14 #include<stdlib.h> 15 #include <ctype.h> 16

17 #pragma config WDT=OFF 18 #pragma idata bigdata

19 char pres1[]= " KLM: Acoustic Laboratory Monitor\n\r\0"; 20 char pres2[]= " For PIC18F452\n\r\0";

21 char pres3[]= " main4.c\n\r\0"; 22 char pres4[]= " ESIME-IPN\n\r\0"; 23 char pres5[]= " 01-05-011\n\r\0";

24 char pres6[]= " Dr. Maximino Pena Guerrero\n\r\0"; 25 char man0[]="\n\r help -this help\n\r\0";

(72)

27 char man2[]=" rm <hexdir> --read memory\n\r\0"; 28 char man3[]=" wp <hexdir> <hexdata> --write port\n\r\0"; 29 char man4[]=" rp <hexdir> --read port\n\r\0"; 30 char man5[]=" dm <hexdir> <ndata> --dump memory\n\r\0"; 31 #pragma idata

32

33 char sdir[] = "\n\r dir:\0"; 34 char sdat[] = "\n\r data\n\r\0"; 35 char sbin[] = " bin: \0"; 36 char shex[] = " hex: \0"; 37 char sint[] = " int: \0"; 38 char del[]={" "};

39 char help[] = "help\0"; 40 char wm[] = "wm\0"; 41 char rm[] = "rm\0"; 42 char wp[] = "wp\0"; 43 char rp[] = "rp\0"; 44 char dm[] = "dm\0";

45 char badcomand[] = "bad command\0"; 46

47 #pragma code

48 void crlf(void); 49 void prompt(void); 50 void openRS232(void); 51 void closeRS232(void); 52 void welcome(void); 53 void chkin(void); 54 void chkout(void); 55 char mputc(char); 56 char mgetc(void); 57 void mputstr(char *); 58 int mgetstr(char *); 59 int comand(char *);

60 void poke(unsigned int,char); 61 unsigned char peek(unsigned int); 62 unsigned int htoi (char *);

(73)

64 void itonbit(int, int, char *); 65 void readmem(unsigned int); 66 void readport(unsigned int); 67 void mihelp(void);

68 void dumpmem(unsigned int,unsigned int); 69

70 char *pstr1; 71 char *plims; 72 char *token; 73 char *token2; 74 char *token3; 75 char *ptoken; 76 char string[80]; 77

78 void main (void) 79 {

80 char c; 81 int index; 82 plims=del; 83 ptoken=token; 84 TRISB = 0; 85 openRS232(); 86 welcome(); 87 88 for(;;) 89 { 90 prompt(); 91 mgetstr(string); 92 token=strtok(string,plims); 93 if(token) 94 { 95 crlf(); 96 comand(token); 97 crlf(); 98 token=NULL;

99 }else crlf();

(74)

101 closeRS232(); 102 }

103 //---104 // command() -seleccionar comando. 105 //---106 int comand(char *str)

107 {

(75)

138 } 139 140 if(strcmp(wp,str)==0) 141 { 142 token2=strtok(’\0’,del); 143 token3=strtok(’\0’,del); 144 poke(htoi(token2),htoi(token3)); 145 return(0); 146 } 147 148 if(strcmp(rp,str)==0) 149 { 150 token2=strtok(’\0’,del); 151 direc=htoi(token2); 152 readport(direc); 153 return(0); 154 } 155 156 mputstr(badcomand); 157 return(1); 158 } 159 //---160 // crlf() -escribir return. 161 //---162 void crlf(void)

163 {

164 mputc(0x0A); 165 mputc(0x0D); 166 }

167 //---168 // prompt() -escribir prompt. 169 //---170 void prompt(void)

171 {

(76)

175 //---176 // mputstr() -escribir cadena. 177 //---178 void mputstr(char *pstr)

179 { 180 while(*pstr) 181 { 182 mputc(*pstr); 183 pstr++; 184 } 185 } 186 //---187 // mputc() -escribir caracter. 188 //---189 char mputc(char ch)

190 { 191 chkout(); 192 WriteUSART(ch); 193 return(ch); 194 } 195 //---196 // mgetc() -leer caracter. 197 //---198 char mgetc(void)

199 {

200 char ch; 201 202 chkin(); 203 ch=ReadUSART(); 204 return(ch); 205 } 206 207 //---208 // chkin() -¿puedo recibir?.

209 //---210 void chkin(void)

(77)

212 for(;;)if (DataRdyUSART()==1) break; 213 }

214 //---215 // chkout() -¿puedo transmitir?. 216 //---217 void chkout(void)

218 {

219 for(;;)if (BusyUSART()==0) break; 220 }

221 //---222 // openRS23() -inicializar USART. 223 //---224 void openRS232(void)

225 {

226 OpenUSART (USART_TX_INT_OFF & 227 USART_RX_INT_ON & 228 USART_ASYNCH_MODE & 229 USART_EIGHT_BIT &

230 USART_CONT_RX &

231 USART_BRGH_HIGH, 103); 232 }

233 //---234 // closeRS23() -cierra USART. 235 //---236 void closeRS232(void)

237 {

238 CloseUSART(); 239 }

240 //---241 // welcome() -mensaje de bienvenida. 242 //---243 void welcome(void)

244 {

245 crlf();

(78)

249 mputstr(pres4); 250 mputstr(pres5); 251 mputstr(pres6); 252 crlf(); 253 mputstr(man0); 254 mputstr(man1); 255 mputstr(man2); 256 mputstr(man3); 257 mputstr(man4); 258 mputstr(man5); 259 crlf(); 260 } 261 //---262 // itonbit() -convertir entero a n caracteres bit. 263 //---264 void itonbit(int x, int n, char *s)

265 {

266 int i; 267

268 for(i=0;i<n;i++)

269 {

270 if (x&1) s[n-1-i]=’1’;

271 else 272 s[n-1-i]=’0’; 273 x=x>>1; 274 s[n]=’\0’; 275 } 276 } 277 //---278 // itonha() -convertir entero a n caracteres hex. 279 //---280 void itonha(unsigned int x, int n, char *s)

281 {

282 int i;

283 unsigned int resto; 284 for (i=0; i<n;i++)

(79)

286 resto=x%16;

287 x=x/16;

288 if (resto<10) s[n-1-i]=resto+0x30; 289 else s[n-1-i]=resto+(0x41-10);

290 s[n]=’\0’;

291 }

292 }

293 //---294 // poke(adreess,byte) -escribir un byte en memoria. 295 //---296 void poke(unsigned int adreess, char dat)

297 {

298 far char *ptr; 299 ptr=0x0000;

300 *(ptr+adreess)=dat; 301 }

302 //---303 // peek(adreess) -leer un byte de memoria. 304 //---305 unsigned char peek(unsigned int adreess) 306 {

307 unsigned char ch; 308 far char *ptr; 309 ptr=0x0000;

310 ch=*(ptr+adreess); 311 return(ch);

312 }

313 //---314 // readmem() -semantica del comando "rm". 315 //---316 void readmem(unsigned int dir)

317 {

318 unsigned char data; 319 char str[40];

320 itoa(dir,str);

(80)

323 mputstr(str); 324 dir=0;

325 data=0; 326 }

327 //---328 // readport() -semantica del comando "rp". 329 //---330 void readport(unsigned int dir)

331 {

332 unsigned char data; 333 char str[40];

334 itoa(dir,str); 335

336 mputstr(sdir);mputstr(str); 337 data=peek(dir); // leer dato 338 mputstr(sdat); 339 itonbit(data,8,str); 340 mputstr(sbin);mputstr(str); 341 crlf(); 342 343 itonha(data,2,str); 344 mputstr(shex); 345 mputstr(str); 346 347 crlf(); 348 itoa(data,str); 349 mputstr(sint); 350 mputstr(str); 351 dir=0; 352 data=0; 353 } 354 //---355 // mihelp(adreess) -semantica del comando "help". 356 //---357 void mihelp(void)

358 {

(81)

360 mputstr(man1); 361 mputstr(man2); 362 mputstr(man3); 363 mputstr(man4); 364 mputstr(man5); 365 } 366 //---367 // dumpmem() -semantica del cpmando "dm". 368

//---369 void dumpmem(unsigned int adreess,unsigned int nbytes) 370 {

371 int i,j,n; 372 int data;

373 unsigned int dir; 374 char str[40]; 375

376 n=nbytes; 377

378 for(i=0; i<n/16;i++)

379 { 380 dir=(i*16)+adreess; 381 itonha(dir,4,str), 382 mputstr(str); 383 mputc(’:’); 384 385 for(j=0;j<16;j++) 386 { 387 data=peek(dir+j); 388 itonha(data,2,str); 389 if ((j+1)%2) mputc(’ ’);

390 if (j==8) {mputc(’-’);mputc(’ ’);}

391 mputstr(str);

392 }

393 mputc(’ ’);

394 for(j=0;j<16;j++)

395 {

(82)

397 if (isprint(data))mputc(data); 398 else mputc(’.’);

399 } 400 crlf(); 401 dir++; 402 } 403 } 404 //---405 // mgetstr(s) -leer una cadena de caracteres desde afuera. 406 // Salida: cadena de caracteres en s.

407 // Regresa: 0 si fin de linea. 408 //

409 // char s[80];

410 // mgetstr(s); ver readline(s) en Leo 411 // printf("%s",s); autobib.c

412 //---413 //

414 int mgetstr(char *s) 415 {

416 char c; 417 for(; ;)

418 {

419 c=mgetc(); 420 mputc(c);

421 PORTB=c;

422 *s++=c; *s=0;

423 if (c==0x0D) return(*--s=0);

424 }

425 return(0); 426 }

427 //---428 // htoi() -convertir caracteres hexa a int.

429 //---430 unsigned int htoi(char *s)

431 {

(83)

434 for (;;)

435 {

436 if (ch >= ’0’ && ch <= ’9’) x=(x*16)+(ch-’0’);

437 else if (ch >= ’A’ && ch <= ’F’) x=(x*16)+(ch-’A’+10); 438 else if (ch >= ’a’ && ch <= ’f’) x=(x*16)+(ch-’a’+10); 439 else return x;

440 ch = *(++s);

441 }

Figure

Figura 2.2: Puertos MIDI
Figura 3.2: Tabla l´ogica de entrada-salida 6N137
Figura 3.5: Prototipo 2: C1 = 100µf, R1 − R33 = 220Ω
Figura 3.6: Unidad de salida MIDI
+7

Referencias

Documento similar

Este perfil puede realizar una serie de acciones, como podemos observar en el diagrama de caso de uso de la figura 5.2, que incluyen el registro del niño/niña al campamento a través

Una vela para el diablo is unquestionably a representation of the Francoist female monster who needed to conform to their submissive role but transgressed the social and

En este sentido, puede defenderse que, si la Administración está habilitada normativamente para actuar en una determinada materia mediante actuaciones formales, ejerciendo

&#34;No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería

El 96% de los encuestados cree que las personas se comportan de forma distinta en las redes sociales y solo un 20% afirma que nunca utiliza las redes para decir cosas que no

Supervisión del portafolios digital de aprendizaje tanto para el desarrollo de las prácticas externas como del TFM 5.4 SISTEMAS DE EVALUACIÓN.. Participación activa en el desarrollo

El proyecto tuvo como finalidad el diseño de 4 actividades de aprendizaje dentro de la plataforma digital Google Classroom para las asignaturas de inglés 2 y 4 respectivamente en el

La última de las mesas, integrada por representantes del sector privado, abordará soluciones aplicadas a situaciones reales de Datos Abiertos para que sirvan de acicate a