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
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
Para que entiendan acerca del ADC les recomiendo este vídeo.
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.
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.