Controlador de estilo MIDI MPC casero (1 / 6 paso)

Paso 1: Funcionamiento del programa.

3.0 programa operación
La siguiente sección analizará cómo funciona el programa.  3.1 sección irá sobre la parte de inicialización del código que sucede antes del bucle principal. Una vez que el programa entra en el bucle principal es hacia fuera a 4 funciones diferentes: potread, keypress, bankchange y RGB. Las secciones 3.2, 3.3, 3.4 y 3.5 discutirá estas funciones por separado.  Consulte el código en el paso 6.

3.1 inicialización de
Cualquier microcontrolador debe configurarse en primer lugar antes de entrar en un bucle del programa principal.  Esto incluye la creación de la dirección de los pines, poniendo los valores correctos en cualquiera de los registros de control y definir el reloj principal que el microcontrolador se va a utilizar.  El primer paso de mi programa era establecer los registros de configuración.   Estos registros suelen controlan cosas como el temporizador de vigilante, cualquier master reset claro pins, marrón a detectan y configuraciones de oscilador. En este ejemplo particular lo configuro para que un cristal de 20Mhz oscilador externo se utiliza como el reloj principal para el PIC.  El PIC tiene osciladores internos y puede ejecutar hasta 8Mhz, pero debido a la velocidad de los datos midi, necesitaba ejecutar el microcontrolador en una velocidad más alta para evitar cualquier error de datos.  Tenga en cuenta la ubicación del oscilador en el diseño de placa PCB principal en la sección 7.1. Había soldado el cristal directamente debajo de la placa por lo que no es visible en la figura 2.0.
El siguiente registro que configuré fue el registro RCSTA y TXSTA. Estos registros son responsables de controlar comandos serie de hardware. La razón que utilizan comandos serie de hardware, software serial para enviar los comandos midi, es porque estoy enviando los datos a la Junta de convertidor de midi a 31250 baudios.  He intentado enviar datos primer uso comandos de software solamente y yo estaba saliendo y el equipo estaba recibiendo datos que tenía falta de bits y piezas perdidas de información.  El puerto serial del hardware tiene un búfer interno que se utiliza para dirigir el flujo de datos y por lo tanto es más confiable.  La única limitación del uso de los comandos serie de hardware es que se limita a usar sólo ciertos pines en el microcontrolador donde como si envía comandos de software, puede usar cualquier pin disponible que desea.   La pantalla LCD utiliza sólo requiere los datos a ser enviados a 9600 baudios, cualquier comando que enviado a la LCD estaba comandos serie software.
Luego configurar los pines que se iban a utilizar para controlar las fichas de LTC2309.  Estos chips son controlados utilizando pernos de comandos tan sólo dos son necesarias para el control de los dos chips I2C.
Después de esto define todas las variables globales utilizadas en el programa. Luego he configurado la dirección de los pines pero cargando los bytes correctos en los registros TRISA, TRISB y TRISC en el PIC.  Cargando un cero define el pin de este puerto para una salida. Cargar uno, lo define como una entrada. Por ejemplo: Si carga el valor 00000001 en el registro TRISB, Pin cero en PORTB sería una entrada mientras pins uno a través de siete se definen como salidas.
Como el PIC también tiene a bordo ADCs necesitaba desactivar aquellos por lo que es lo que hice.  La pantalla entonces se enciende y aparece una pantalla de introducción.  El comando serial software es una función incorporada en Picbasic Pro que es el compilador que usa.   Cada vez que quiero ejecutar un comando serial software, necesito que me especifique el pin que quiero enviar el comando, la velocidad en baudios y los datos que quiero enviar.  He encontrado la manera de controlar el LCD a través de su hoja de datos.
Los botones luego recorrer los diferentes colores.  El propósito de esto es para asegurarse de que todo está conectado correctamente.  Si se muestran todos los colores sé que RGB LED estén conectado correctamente. El programa entonces entra en el bucle principal.

3.2 Potread
Puesto que hay 8 canales en cada LTC2309, configurar el programa para los 8 canales de IC2 se leen en un bucle for, y los 8 canales de IC4 se leen en otro bucle for.  Ya que estos chips son controlados mediante comandos I2C se utilizan sólo dos pines.  Uno es un pin de reloj, que funciona a 100Khz, y el otro pin es un pin bidireccional, que se utiliza para enviar y recibir datos.

Para leer el valor analógico de cualquier canal dado, necesita decirle a la ADC qué canal quieres leer por lo tanto, antes de leer cualquier canal primero debe enviar dos bytes de información al chip. El primer byte, que el microcontrolador envía a la ADC es el marco de la dirección. Hay dos pernos en la LTC2309, que puede configurar la dirección.  Estableciendo el AD1 patillas y AD0 en alta, baja o flotante, puede obtener hasta 8 diferentes direcciones, lo que significa que puede conectar hasta 8 diferentes LTC2309s' en un bus I2C.  Si hace referencia a la figura 6.0 puede ver las diferentes configuraciones.  Ya he indicado que dirección estoy usando. 7 bits se utilizan como la dirección, y el LSB (Bit 0) se utiliza para indicar el tiempo es un comando comando o escritura lectura.  Establezca este bit en uno prepara al ADC para un comando de lectura y ajuste a cero pone a un comando de escritura.

El byte siguiente a la ADC es una broca de 6 palabra "Din".  Esto es responsable de la configuración de canal.  Ver Figura 8.0 para configuraciones de estruendo. Yo he destacado las diferentes palabras que he usado.  En mi programa, el bit S/D se encuentra siempre porque estoy haciendo una terminó las mediciones.  La broca de la UNI también siempre se encuentra ya solamente estoy usando el chip en modo unipolar.  Figura 7.0 es el diagrama de tiempo de un comando de escritura en la hoja de datos.

A continuación el ADC envía el valor analógico al microcontrolador. Sin embargo, cualquier momento cualquier información intercambiada de la ADC en el microcontrolador, debe todavía enviar la estructura de dirección, excepto el LSB en el marco de dirección se cambia a uno, lo que significa es un comando de lectura.   El valor analógico de 12 bits se envía en dos bytes.  Figura 9.0 es el formato de los datos. He leído el valor analógico en dos variables diferentes. Una variable contiene los 8 bits más significativos, y el otro byte contiene los 4 bits menos significativos de la variable.  Sin embargo los bits menos significativos son emplazamiento 4 lugares a la izquierda en esa variable, y los 4 bits a la derecha son sólo ceros. Para obtener este valor en una forma usable, cambio los 8 lugares más significativos de bits 4 a la izquierda. Soy capaz de hacer esto ya que la variable que estoy usando es una palabra de 16 bits.  Entonces cambio la variable con los 4 puntos de bits 4 menos significativos a la derecha.  Estos dos valores son entonces Unidos juntos y el resultado es una variable de 16 bits con un valor analógico de 12 bits.  Sin embargo todavía debe reducir el valor ya que un valor de señal de control midi es sólo un byte. El máximo valor del ADC es 4095 en decimal y por lo tanto debe ser reducido a 128. Para hacer esto multiplicar el valor de ADC por 4095 entonces se dividen es por 128.  Tengo otra variable, que utilizo para guardar el anterior valor de ADC. Cuando llega el lazo otra vez comprueba si ha cambiado el nuevo valor de ADC. Si cambió más de cierto valor umbral, envía una señal midi con el nuevo valor de ADC.  Si está por debajo de este valor, se salta todo junto y continúa leyendo el siguiente canal.  Guardar el valor sin escala, por lo que este umbral es 50.  Tuviera que elegir un valor que era bastante grande por encima del ruido, pero no ser tan grande que los valores analógicos enviados al controlador midi están muy lejos unos de otros, dando así un sonido entrecortado. Un comando de control midi es una serie de 3 bytes. El primer byte especifica que es un comando de control que se envía. El segundo byte es el canal que se envía el comando de control.  El último byte es el valor analógico.    Por ejemplo, permite decir dentro de mi programa de música asignar un volumen en un determinado canal para aceptar las señales midi entrantes de canal 16.  Como enciendo el potenciómetro, el controlador midi está continuamente enviando estos 3 bytes a un ritmo muy rápido.  Primeros dos bytes quedan igual cada vez que estos bytes se envían pero cambiará el último valor. La idea es que quieres este valor para mover hacia arriba o hacia abajo en pequeños incrementos. Los incrementos que cambia es el valor de umbral se discutió anteriormente. Incrementar el canal por 1, después de cada ciclo, pues todos los potenciómetros están escribiendo a su propio canal midi. Este bucle es entonces continuo 7 veces más para ADC de la viruta. Sigo un lazo diferente otro 8 veces para leer los valores de la otra viruta ADC. La única diferencia entre los dos lazos es la dirección que utiliza para comunicarse con el chip y los números de canal que se están actualizando.

Artículos Relacionados

Controlador de DJ MIDI de estilo arcade

Controlador de DJ MIDI de estilo arcade

>>> esto no es muy acabado pero ya armado un poco del circuito. Voy a actualizar el instructivo y subir un video cuando se ordena <<<He sido DJ por cerca de 10 años, y para los últimos he intercambiado buena viejo vinilo moda vinilo virt
Cómo crear un controlador de Dj MIDI

Cómo crear un controlador de Dj MIDI

así que esto era un proyecto escolar. Acabo de terminarlo. El documento adjunto al final es todo el proyecto, como lo he escrito bien a mano. Si desea tratar esta build me avisas y te puedo dar algunas sugerencias. También un alza para este proyecto
Hackear Pads SNES a hacer controladores de estilo Arcade de Retropie

Hackear Pads SNES a hacer controladores de estilo Arcade de Retropie

Hi y gracias por tomarte un tiempo para leer mi tutorial increíble. El cumpleaños de mi hermanita es el 25 de febrero, está convirtiendo 29 y supongo que empezó a sentir un poco viejo porque ella me pidió dar una de mi Super Nintendo y un cartucho de
Rocksmith Pedal de Control (controlador de estilo Stompbox) para XBox 360

Rocksmith Pedal de Control (controlador de estilo Stompbox) para XBox 360

este es mi primer Instructable.  Me alegra que mi momento coincidirá con el plazo de inscripción para el Game.Life 2 Challenge! He intentado hacer instructables antes, pero parece que a medio camino a través de mis proyectos, dejar de tomar fotografí
Controlador de pie MIDI (Pedalera controladora MIDI) para Amplitube 3.

Controlador de pie MIDI (Pedalera controladora MIDI) para Amplitube 3.

Instrucciones de armado y puesta en funcionamiento del Midi pedal.(Pedalera controladora MIDI) para Amplitube 3.Hola, uso habitualmente el programa Amplitube 3 para practicar con mi Guitarra, realmente me gustan mucho los sonidos y posibilidades de c
Controlador Arduino personalizado MIDI

Controlador Arduino personalizado MIDI

Hola y Bienvenidos a este instructable sobre cómo construir un controlador USB MIDI personalizado, barato y fácil, basado en Arduino. La mejor noticia: sólo tiene que conectar sin problemas con interfaces USB a MIDI, o herramientas de software como M
Controlador de DJ MIDI PACMOD

Controlador de DJ MIDI PACMOD

para el cumpleaños de mi hijo le hice una controladora para DJ diseñado para parecerse a un viejo gabinete arcade de la máquina. Lo que sigue es un breve resumen del proceso para hacerlo, incluyendo el código.El Teensy fue elegido como el cerebro deb
Controlador de pie MIDI basados en Arduino DIY

Controlador de pie MIDI basados en Arduino DIY

Llevo muuuucho tiempo con intentar un lazador de guitarra durante un tiempo, pero no me gusta la idea de gastar dinero en un pedal específicos del lazador cuando puedo usar un ordenador para eso y desde que he estado aprendiendo arduino para divertir
Controlador de pie Midi Arduino para Ableton Live

Controlador de pie Midi Arduino para Ableton Live

Soy un geek. Yo lo sé. Me gustan las cosas DIY'ing. Compré una impresora 3d (que está sentado en mi oficina no funciona ahora mismo)... y como construir drones. Yo generalmente morder más de lo que puedo masticar y a menudo tiene que ir a otros para
Zeta Reticuli: MIDI control de ecualizador de 10 bandas y múltiples interfaz de efecto externo

Zeta Reticuli: MIDI control de ecualizador de 10 bandas y múltiples interfaz de efecto externo

aproximadamente la mitad mi vida (20 años) hace que solía tener literalmente drillions y drillions de ideas que todavía siento no es una completa pérdida de tiempo. Una de estas brillantes ideas debía ser capaz de controlar un pedal de wah-wah guitar
Dibujar-MIDI controller con tinta conductora

Dibujar-MIDI controller con tinta conductora

'Draw It Yourself' es un controlador MIDI que utiliza tinta conductora como botones. Está basado en Arduino y utiliza un sensor capacitivo (dos, en realidad) para determinar si los botones dibujados son ser tocados o no.http://sanidanz.tumblr.com/dra
Tambores de guante MIDI con Arduino y sensores de luz

Tambores de guante MIDI con Arduino y sensores de luz

voy a describir una divertida y fácil manera de construir su propia expresión sonido MIDI habilitado guante sin gastar mucho dinero en costosos sensores o Interfaces MIDI.Sienta libre de entrarme en contacto con directamente por correo si gusta o si
Pedal de Teensy USB MIDI para controlar Mobius Looper

Pedal de Teensy USB MIDI para controlar Mobius Looper

Motivación:Tocando en una banda de 2 piezas, con los tambores y un montón de otras muestras que se está reproduciendo como forro pistas, era necesario utilizar una lanzadera para agregar más elementos a las pistas. Un looper basado en hardware falla
Usar una caminadora DC Drive Motor y controlador de velocidad PWM para accionar herramientas

Usar una caminadora DC Drive Motor y controlador de velocidad PWM para accionar herramientas

pueden requerir herramientas eléctricas tales como molinos de corte de metales y tornos, taladros, sierras, lijadoras y más .5HP a 2HP motores con la capacidad de ajustar la velocidad manteniendo el esfuerzo de torsión.Coincidentemente la mayoría de