Visita mi otro blog

Sitios que te pagan por hacer click y ver publicidades www.clickporplata.com.ar

miércoles, 15 de diciembre de 2010

Diagrama esquemático del prototipo y tutorial MIDI

Este es el diagrama esquemático del prototipo version 0.1

Aqui en version .pdf

http://rapidshare.com/files/436917031/Mi_primer_bateria_sch_ver_0.1.pdf

Los conectores  J3, J4 y J5 son las entradas analogicas para los piezo, J8 es para el LCD de 16x2, J1 es la salida MIDI, J9 la salida serial RS-232. J6, J7 y J10 los usaria luego para agregar los botones.

El proyecto está basado en diferentes sitios de internet de donde fue juntando información. Algunos sobre microcontroladores pic y otros con otros micros como los Atmel. Asi fue que llegué a este sitio basado en un Arduino.

http://todbot.com/blog/2006/10/29/spooky-arduino-projects-4-and-musical-arduino/

Aqui se ve que conectan directamente el piezo en paralelo con una resistencia de 1M a la entrada analogica. El zener de 5,1 V tiene la función de limitar el voltaje generado por el golpe sobre el piezo, pero los pic ya tienen internamente en cada pata un par de diodos de protección. Esta figura está sacada de la hoja de datos del PIC16F877


Asi que con esto en mente probé lo mismo sobre el PIC y funcionó. Realicé algunas pruebas con el convertidor AD y enviaba el valor por el puerto serial a la PC. Ahora lo que faltaba era hacer que suene por MIDI.


MIDI desde 0...

Esta sección explica paso a paso como son los mensajes midi para saber que es lo que el PIC debe enviar a la PC, si ya conocen el protocolo MIDI se la pueden saltear.

El protocolo MIDI tiene dos partes, una parte lógica que involucra que un instrumento musical envia mensajes para indicarle a la PC que se presionó o se soltó una nota, y otra parte física o hardware donde se definen como seria la comunicación serial de forma óptica para recibir estos mensajes, primero vamos a ver la parte de los mensajes.

Para saber como funciona el protocolo midi, normalmente se conecta un instrumento  musical con salida MIDI, como un teclado o un organo, a la pc usando una interfase MIDI-USB.

Algunos teclados o controladores MIDI nuevos ya vienen con puerto USB, por ejemplo tengo un controlador M-Audio Keystation 49es.


En esta foto se ve que tiene los dos conectores, el tipo DIN 5 MIDI OUT y además un conector USB tipo B similar al de las impresoras.



Luego se presiona una tecla en el instrumento, digamos un do de la primer octava (C1) y se monitorea la información que recibe la PC.

Sin embargo, si no tienen ningun instrumento MIDI, ni tampoco ninguna interfase MIDI-USB, y todavia quieren saber como funciona el protocolo MIDI se puede realizar haciendo lo siguiente, primero se instala un puerto midi virtual. Para esto utilizo el "MIDI YOKE" que lo pueden bajar de aquí

http://www.midiox.com/zip/MidiYokeSetup.msi

Una vez instalado tambien se crea un nuevo icono en el panel de control


Por defecto instala 8 puertos midi virtuales llamados "MIDI Yoke:1" al "MIDI Yoke:8"


Ahora hay que instalar un programa que permite enviar notas MIDI usando el teclado de la pc, existen varios, pero el que uso se llama "Bome's Mouse Keyboard", lo pueden bajar de acá

http://www.bome.com/bome/downloads/MouseKeyboard200.exe

Es una versión shareware o postcardware, por lo que al iniciar aparece una nag screen tipo recordatorio de compra con una demora de 20 segundos, pero si lo registran desaparece, fuera de eso es completamente funcional. Ahora deberian configurarlo para usar como salida MIDI OUT del programa el primer puerto midi virtual "MIDI Yoke: 1". Esto lo hacemos para poder escuchar y ver los datos al mismo tiempo.



Para poder escuchar algun sonido deberiamos conectar la salida del puerto "MIDI Yoke: 1" al MIDI mapper del windows, para esto vamos a usar otra utilidad llamada Hubi's loopback que sirve para conectar puertos MIDIs por software. Lo bajan de aca

http://rapidshare.com/files/436935719/Hubbis_LoopBack.rar

No tiene ningun instalador, solo hay que ejecutar el archivo "HWMDCABL.EXE" y veran que en la barra de tareas les sale una nueva aplicación "Hubi's MIDI cable" que no despliega ninguna ventana, pero si hacen click derecho sobre la misma aparecen las opciones


Aqui deberian seleccionar como salida en la tercer columna donde dice "0-No Output" el Mapeador Microsoft MIDI, al seleccionar algo se cierra la ventana, por lo que deberian hacer click derecho nuevamente y en la segunda columna donde dice "0-No Input" deberian seleccionar "MIDI Yoke:1", con esto deberia quedar asi


Resumiendo, lo que hicimos fue conectar el puerto "MIDI YOKE: 1" al Mapeador Windows MIDI para poder escuchar las notas, este usa por defecto el sintetizador FM de la placa de audio que tiene un pésimo sonido, en mi caso si se fijan la ultima opción en la columna de salida dice "Sintetizador por Software de tabla de ondas XG", este es una mejora sobre el midi mapper. Sin embargo luego aprenderemos como mejorarlo cuando veamos los instrumentos VSTi de Steinberg. Por el momento seguiremos con esos soniditos.



Aqui vamos a hacer una aclaración, nunca elijan el mismo puerto virtual como entrada y como salida, porque se produce una situación de retroalimentación de datos que causa una insuficiencia de buffer y el MIDI Yoke deshabilita el puerto con el siguiente cartel de advertencia (Por ejemplo le puse de entrada "MIDI Yoke: 1" y de salida el mismo puerto)



Volvemos al "Bome's Mouse Keyboard" y si está todo bien al presionar las teclas "Z X C V B N M" deberian sonar las teclas blancas de la primer octava, las negras serian "A S D F G H", las blancas de la siguiente octava serian "Q W E R T Y" y sus negras "1 2 3 4 5 6 7", con F3 y F4 se suben o bajan las octavas. Por defecto deberia sonar el primer patch o instrumento que seria un piano, ahora bien, en MIDI existen 16 canales, en teoria se usa un canal por instrumento. El canal 10 siempre se lo reserva para las percusiones, para cambiar de canal lo eligen donde dice channel.


Si ahora presionan "Z X C V" deberia sonar un KICK, un SNARE y todos los otros instrumentos de una bateria. Por supuesto que no suena muy lindo, pero la idea por el momento es ver que mensajes midi se envian para hacer sonar un KICK o un SNARE. Luego veremos como mejorar el sonido cuando lleguemos al Addictive Drums en la seccion sobre los VSTi. Ahora solo falta ver que mensajes midi se estan enviando.


Monitor de mensajes MIDI: MIDI-OX

Para poder monitorizar los datos que llegan por un puerto Midi utilizo el Midi-OX, lo pueden bajar de aquí

http://www.midiox.com/zip/midioxse.exe

Luego de instalarlo lo ejecutan y deben configurar el puerto MIDI de entrada, en "Options" -> "MIDI Devices..."


Aqui se abre otra ventana donde se puede seleccionar los puertos midi de entrada y salida (se puede por ejemplo recibir notas por un puerto procesarlas de alguna manera y enviarlas por otro).


Aqui solo seleccionaremos como MIDI input el puerto "MIDI YOKE: 1", para ver las notas que enviamos con el Bome's desde el teclado de la pc, por lo que deberia quedar asi


Ahora deberiamos volver a la ventana del "Bome's Mouse Keyboard" y para poder enviar las notas y ver el resultado habilitamos en "Options" -> "Stay on Top", esto hace que siempre esté arriba de todas las ventanas.


Ahora ubicamos en el MIDI-OX la ventana que dice "Monitor Input" si esta todo bien en el "Bome's Mouse Keyboard" si presionan la tecla Z y la mantienen presionada deberia enviar un mensaje "Note ON" indicando que se presiono una tecla y que está formado por tres bytes: 0x99 0x24 y 0x64. Este es el sonido del bombo (kick).


Ahora al soltar la tecla se envia otro mensaje midi que seria un "Note OFF", indicando que se soltó una tecla, formado por otros tres bytes: 0x99 0x24 0x64


De esta manera saben exactamente que bytes debe enviar el PIC para que la PC lo reconozca como mensajes MIDIs. Prueben hacer los mismo con otras teclas, por ejemplo la X deberia ser un redoblante (snare), la G un charles cerrado (closed hihat), la J un charles abierto (open hihat) y la L un platillo (cymbal). Esto se define en el mapeo del los instrumentos General MIDI.

En realidad cada byte del mensaje midi tiene su nombre y función:

1-STATUS (indica el canal en el byte MSB
2-DATA1
3-DATA2

De esto lo mas importante es saber que el canal va en byte de STATUS, el byte DATA1 nos indica la nota presionada 0x24 para Bombo, 0x26 para Redoblante, etc. Y el ultimo byte DATA2 nos indica el volumen o fuerza con que se presionó la nota (Velocity), va de 0x00 a 0x7F (0 a 100%). En el "Bome's Mouse Keyboard" pueden variarlo con el potenciómetro "Volume".



Para mayores detalles recomiendo la pagina de la Wikipedia sobre MIDI http://es.wikipedia.org/wiki/MIDI


Hardware MIDI


Hasta aqui vimos como son los mensajes, ahora bien el hardware normal usa unos conectores DIN-5, como estos:

Si se fijan en este circuito se muestra como usar un puerto de juegos o gameport para sacar los conectores midi.


Incluso actualmente muchos motherboards todavia tienen internamente los pines, solo le falta el conector afuera del chasis, de hecho a mi PC de escritorio le hice eso, y me ahorré de comprar una interface MIDI-USB. Tengo un mother ASUS P4P800-X y en esta figura se ve el conector GAME abajo.


En este acercamiento se puede observar mejor el conector GAME



Ahora bien para que el PIC envie los datos por midi, se puede usar la USART normal (Si se fijan en el diagrama esquematico la misma pata TX envia MIDI y tambien sale al puerto serial), pero hay que configurarla a una velocidad de 31.250 bps, en cambio si se usa como salida serial normal se configura a 38.400 bps. Pero esto se puede hacer facilmente en el codigo en C.

Una vez armado el circuito con el pic lo ideal es probarlo con un interface midii. Si la pc no tiene interface MIDI, por ejemplo mi notebook DELL D630 ATG no tiene, se puede usar el puerto serial RS-232 para recibir mensajes midi, instalando el driver CBX. De esta manera se ahorran la interface MIDI-USB, de nuevo... ja ja.


Interface MIDI por RS-232

Existe un driver midi de Yamaha llamado CBX, usado en algunos modelos de samplers y workstations, que permite recibir los datos midi desde un puerto serial RS-232. Lo pueden bajar de acá

http://rapidshare.com/files/428504800/Yamaha_CBX_MidiDriver.rar

Una vez instalado se crea en el panel de control un nuevo icono


Al hacer doble click se abre la ventana de configuración. Aqui se selecciona el puerto serial, en mi caso lo recibo por el COM1 y se debe habilitar marcando la opcion "Driver Enable", luego de esto se debe reiniciar el windows.


Con este driver instalado todo lo que se reciba por el puerto serial a 38400 bits por segundo se puede enviar a cualquier DAW (Digital Audio Workstation) o software secuenciador (Nuendo, Cubase, Pro Tools, Fruty Loops, etc) como si viniera de un puerto MIDI real. Solo resta probarlo con el PIC para ver si al enviar tres bytes 0x99 0x24 0x7F (mensaje midi NOTE ON) la pc lo recibe como un golpe en el bombo.

Bueno hasta aqui este post, luego seguimos con mas detalles del codigo del PIC, el Firmware.

Saludos a todos

Para que sea mas fácil enterarse cuando postee algo nuevo por favor si tienen Gmail, Twitter o Yahoo se pueden agregar como seguidores haciendo click arriba al costado derecho.


Tambien estoy en Facebook.







10 comentarios:

  1. Que tal Claudio, me parece muy interesante tu proyecto yo tambien ando queriendo hacer lo mismo y hasta ahora no habia encontrado informacion tan buena como la que tu has ido publicando, soy tecnico en electronica pero no tengo experiencia con pics, pero supongo debe ser como programar una memoria eeprom, insertas el pic en el grabador y teniendo el programa lo grabas y listo, eso supongo, bueno espero con ansias el programa para poder grabarlo, un saludo.

    ResponderEliminar
  2. QUE BUENO!!!
    che quisiera hacer una bata así, ahora, vos me podrías enviar los componentes, (el diagrama esta aca mismo), pero el listado de componentes?

    Esto mismo, pero con interfaz USB, se podrá llegar a hacer???

    la verdad. felicitaciones!!! un post increible!!!!!!!

    ResponderEliminar
  3. cinnic dijo... "Esto mismo, pero con interfaz USB, se podrá llegar a hacer???..."

    Actualmente estoy trabajando en una version con un pic 18F4450 con USB y ya logré que el windows 7 x64 lo detecte como una placa de audio + un puerto midi. Ademas ya puedo enviar notas hacia la pc.

    Claudio J. Pérez

    ResponderEliminar
  4. Excelente y felicitaciones es el mejor tutorial que he visto para hacer una batería electrónica, muchos agradecimientos por tus enseñanzas y seguimos esperando mas detalles.

    buena energía

    ResponderEliminar
  5. Hola, como estás? En algunos post he leído sobre la imposibilidad de utilizar el 16f877A en lugar de el 16f877-20 pero veo que tu lo hiciste. Supongo que es el proyecto de edrums? modificaste el archivo hex para adaptarlo al pic?
    M gusto mucho tu explicación, un abrazo.

    ResponderEliminar
    Respuestas
    1. Hola que tal, en realidad está basado en ese proyecto, pero por alguna razón no me funcionaba, por lo que decidí hacer mi propio proyecto desde cero con un PIC mas nuevo, el PIC16F877A, además si te fijas en el circuito esquemático estoy usando el lcd a 4 bits, por lo que solo uso 7 lineas.

      Eliminar
  6. Colegas,

    quiero aportarles un enlace en el que mostré mi proyecto terminado basado en otro circuito.

    http://www.logeek.net/blogs/entry/Mi-E-DRUM-proyecto-terminado

    Gracias por el espacio!

    ResponderEliminar
  7. Hola Claudio,
    Ante todo decirte que me parece fantástico tu trabajo, y quería saber si el proyecto sigue adelante y si tal como dijiste se van a poder adquirir los módulos.
    Un saludo
    Sergio

    ResponderEliminar
  8. Hola Claudio , un placer . Soy Eduardo . Tengo un teclado CASIO CT-655 con salida Midi. esta interfase USB me sirve para este modelo ? Aca en Montevideo donde puedo comprarla interfase MIDI-USB.Gracias

    ResponderEliminar
  9. Hola, estoy leyendo este tema y me interesa mucho saber cómo lo terminaste...!

    ResponderEliminar