martes, 23 de julio de 2013

Crea tu propio Controlador MIDI desde 0 (Parte 2)

Continuando con el tema, lo que explicaré a continuación es de programación, trataré de explicar con detalle lo mejor que pueda, si hay algunas cosas que se me pasan discúlpenme, déjenme un comentario y tratare de dar respuesta.

Como les decía en la entrada anterior el programa que se utiliza es el MPLAB y el CCS Compiler.


CCS ofrece su propia interfaz de usuario que es el PICC, yo prefiero usar el CCS dentro de MPLAB pero eso ya es cuestión de gustos.

En este vídeo pueden ver como poner CCS dentro de MPLAB

Más adelante les explicare el código, pero primero entendamos que tiene nuestro microcontrolador
Aquí esta una ilustración de los pines del PIC, los que ves con el nombre de RA, RB, RC, RD Y RE son los puertos I/O, aunque algunos se pueden configurar para cumplir otras funciones, para el Controlador MIDI utilice 2 puertos de 8 entradas cada uno, use el PORTB y el PORTD, lo que me da un total de 16 entradas para poner en cada una de ellas un botón, solo que pues 16 botones eran demasiados para mi, por lo tanto lo deje en 10 botones aunque el código puede funcionar con 16.

Ahora los pines que ves con los nombres RX Y TX, que son el receptor y transmisor respectivamente, esto es una opción del micro que se llama USART, que es la que nos permite establecer la comunicación serial.


Aquí puedes aprender acerca del USART.

Los pines con los nombres VDD Y VSS, son alimentación y tierra respectivamente, y el pin con nombre MCLR, es el reset, este lo conectó con una resistencia de 10k a la alimentación que es de 5V.

Los pìnes OSC1 Y OSC2 son donde se coloca el cristal de 20MHz.

Algoritmo del código

Básicamente lo que hace el código es revisar cada pin tanto del PORTB como del PORTD, esto lo hace en cuestión de microsegundos así que es una tarea de la cual ni te darás cuenta, entonces al revisar cada pin checa si se está o no está apretando un botón, si fuera el caso de que si se esta apretando un botón manda por el TX un mensaje MIDI de que se activo una nota, cuando se desoprime el botón el micro lo verifica y entonces manda por el TX el mismo mensaje solo que con una intensidad de nota de 0, es decir una nota que acaba de dejar de ser tocada.

A continuación pongo los números que representan las notas en MIDI


Es decir que si yo mando por el TX el número 60, estaré enviando una nota C4 (Do 4).

El mensaje MIDI completo que se mandaría por el TX sería así por ejemplo.

10010000 (Se activo una nota)
00111100 (Esto equivale al número 60 decimal pero en sistema binario, osea que la nota es C4)
01111111 (Con un velocity (intensidad) de 127 (valor máximo en el protocolo MIDI)).

Como ven el número 127 es el número mágico del MIDI, es el número máximo hasta el cual pueden mandar de valor los data bytes, cualquier valor superior a 127 que se mande por el TX no podrá ser interpretado.

Esto es el algoritmo en cuanto a la función de los botones, en pocas palabras, al apretar un botón, envió una nota MIDI.

Después de un tiempo de andar viendo otros controladores MIDI del mercado, me tope con este
Behringer FCB 1010

Al ver este controlador, lo primero que me llamo la atención fueron sus pedales, así que me di a la tarea de buscar como es que el MIDI maneja los mensajes del pedal y bueno esta fue la respuesta 

Aquí en este link: Tabla de mensajes midi, podemos ver que aparte de las notas musicales, hay otros parámetros que controla el MIDI a estos les llama Control Changes, estos parámetros pueden ser como el volumen, el pitch o paneo. Entonces me vino a la mente utilizar el ADC (Convertidor Analógico-Digital) para que leyera el valor de voltaje en un potenciometro y dependiendo de este enviara un numero que podría ir desde 0 a 127.


Para que entiendan acerca del ADC les recomiendo este vídeo.




Crea tu propio Controlador MIDI desde 0 (Parte 1)

Introducción
Bueno amigos primero quiero decirles que el objetivo de esto es explicar sin que se tengan muchos conocimientos previos de electrónica, los pasos para crear un controlador MIDI que en mi caso yo lo utilizo para controlar un software de guitarra llamado Guitar Rig.
Primeramente tenemos que conocer lo que es el MIDI, Musical Instrument Digital Interface por su siglas en inglés o Interfaz Digital de Instrumentos Musicales, según la wikipedia tenemos esta definición para MIDI es:

Se trata de un protocolo de comunicación serial estándar que permite a los computadores, sintetizadores, secuenciadores, controladores y otros dispositivos musicales electrónicos comunicarse y compartir información para la generación de sonidos.

Ojo con lo de comunicación serial, este tema lo trataré más adelante.

En pocas palabras el MIDI no es sonido, son solo datos enviados entre dispositivos que estos saben interpretar. La cuestión aquí es saber ¿Como demonios funciona el MIDI?, pero para explicar esto primero quiero que sepan que es un bit y un byte.

Las computadoras y toda la electrónica digital se fundamenta en el sistema numérico binario, binario simplemente significa tener 2 números que son: 1 y 0. Entonces un bit es dígito que puede valer ya sea 1 o 0 y un byte es un conjunto de 8 bits
Esta sería un representación 
El byte MIDI
El MIDI como lo explique anteriormente son datos, estos datos son en si un conjunto de 3 bytes mandados uno tras otro. Existen dos tipos de bytes: De estado -status byte- y de información -data byte-. Se diferencian por el primer bit: si es un 1, tenemos un byte de estado, y si es un 0, es un byte de datos. Al generar un mensaje MIDI, por norma general, siempre enviamos un byte de estado, que va seguido de 2 bytes de datos.

Un ejemplo de mensaje MIDI seria:
10010000 (Se activa la nota) Byte de estado
00111100 (La nota es un DO 3) Byte de dato
01111111 (La intensidad de la nota) Byte de dato

Como ven son 3 bytes que indican que se apretó una nota, cual es la nota y que tan fuerte se tocó esa nota.

Ahora la pregunta es ¿De que manera envió estos datos al PC?

Pues esto puede ser a través de un cable USB, cable serial (que ya casi no se usa), una interfaz de audio con entrada MIDI o un adaptador MIDI a USB.

En mi caso yo utilice una interfaz de audio que ya poseía que es una Fast Track Pro de M-Audio que tiene una entrada MIDI.

Iniciando el proyecto
Cuando empece con esta idea de crearme un controlador para poder manipular los efectos del Guitar Rig, había visto videos en YouTube donde desarmaban joysticks y soldaban botones, al final ponían todo en una carcasa y listo ya tenían su controlador, pero vamos, como estudiante de ingeniería esto para mi era una vía fácil y sin saber lo que realmente estaba pasando, por eso mi objetivo siempre fue diseñarlo desde 0 como buen ingeniero.
A esto me refiero con vía fácil.

Mi primera opción fue hacerlo por USB, sin embargo no he logrado aún comprender bien el protocolo USB,pero entonces como del cielo llegó a mi la información de la comunicación serial y enseguida relacione la definición del MIDI con esto, y pues claro! el MIDI es un protocolo serial es decir que teniendo un dispositivo que me manejara este tipo de comunicación, yo sería capaz de diseñar un aparato que me permitiera enviar datos MIDI, entonces en la escuela conocí a lo que sería el corazón y alma de este proyecto El Microcontrolador.

Conociendo el Micro
Pues en términos muy generales un microcontrolador es lo mismo que una computadora, posee memoria RAM y ROM, tiene un CPU y puertos de Entrada y Salida (abreviados I/O), solo que el "micro" se basa en una arquitectura Harvard, que la puedes investigar si quieres saber más a fondo de esto, para casos del proyecto omitiré su explicación.

Así como con las computadoras hay diferentes gamas, igual pasa con los micros, hay unos con más cosas, otros con menos, unos más grandes, otros más pequeños, unos más rápidos, otros más lentos, etc. Pero lo importante para esto era saber cuál escoger para la aplicación del controlador MIDI. El elegido fue un microcontrolador de la marca Microchip que produce los famosos PIC's (escogí esa marca por que fue la que usamos en clases) , el escogido fue el PIC 16F877A que tiene prestaciones buenas para este tipo de proyecto y anda  al rededor de unos 110 pesos.
Resulta que este micro posee comunicación serial, es por ello que resulto ser el idóneo para el proyecto. Estos chips se deben programar, existen distintos lenguajes de programación para los micros, yo solo he manejado 2 Lenguaje Ensamblador (que es algo tedioso pero si lo comprendes es muy bueno) y el lenguaje C, para el proyecto use lenguaje C ya que es más sencillo y muy rápido de diseñar el código.

Este código se escribe en un programa, en mi caso usé MPLAB de la empresa Microchip, y use el compilador (programa que te transforma el código a lenguaje máquina) CCS Compiler. Lo que te entrega este programa al final es un archivo .hex que es el que se "quema" o escribe en la memoria del micro, para quemarlo se utiliza un programador de PIC's, yo use el Master Prog que lo venden por MercadoLibre.
Realmente lo importante para el proyecto es el código que va en este micro, por ello les decía que esto es el corazón del controlador, lo demás son complementos.

Componentes a utilizar
Aparte del microcontrolador, lo único que se necesita son estos componentes:
  • Resistencias 220 ohms,10 Kohms y 1Kohm
  • 10 Terminales de bloque
  • 10 Botones
  • 1 Conector DIN 5 hembra
  • 2 LED's
  • 2 Capacitores de 22pF (componentes para el micro, por lo gral. lo venden con este)
  • Un cristal de 20 MHz (componente para el micro, por lo gral. lo venden con este)  
Los Botones

Los botones pueden ser los que gustes, pero yo recomiendo que se compren unos que tengan una buena área para pisarlos y que sobresalgan bastante de la superficie donde se van a colocar, yo compre estos botones en Steren, me salieron en 19 pesos cada uno.

Conector DIN 5 Hembra
En este componente se conectara el cable MIDI que ira del controlador a la interfaz de audio.
Este es del tipo chasis.
En mi caso no logre encontrar en mi ciudad este tipo de conector para chasis, que es el ideal pero en Steren venden un adaptador que corte a la mitad y solo me quede con el conector DIN 5
Los otros componentes
Los demás componentes los puedes pedir en una tienda de electrónica así tal cual puse su nombre, no son difíciles de conseguir ya que son comúnmente usados.
Leds



Block Terminals
Resistencia

En la parte 2, explicare a detalle el código que se uso en el microcontrolador, si de plano esto no te interesa mucho y solo quieres armarlo directo puedes saltar esa parte del tutorial.