Controlador MIDI por USB con PIC para Virtual Dj

Hola estoy desarrollando un controlador MIDI con ccs y el pic 18f2550 por medio de MIDI-USB, el pc ya me reconoce el pic como dispositivo de audio usb aunque con un signo de interrogación, se supone que en FL studio que es el que pienso utilizar, me debe aparecer como MIDI In mi controlador ? porque no me aparece nada y no se como hacer para comunicar Fl studio con el controlador que ya tengo programado...
 
Si te reconoce e instala el dispositivo no tiene que aparecer el signo de interrogación, eso significa que probablemente falten controladores, por eso no se activa como dispositivo MIDI que reconozca el FL
 
comprendo, entonces que podría ser, básicamente lo que he hecho es copiar las librerias de midi, descriptores.h etc.. en pocas palabras en el ccs me compila bien; también descargue he instale los controladores para usb de la pagina de microchip y lo estoy probando con una simulación en isis, que me podría faltar ? :/
 
Puede estar mal montado el hardware, alguna vez me dio fallos el usb por estar mal el conector, confundidos D+ y D- en el Pic, no tener condensador en Vusb....
Cualquier pequeño fallo de conexión, aparece como conectado pero no lo reconoce.
 
no lo que pasa es que estoy probando con una simulación en proteus, al parecer si pueden ser falta de controladores, pero no sabría cuales, pues en si los que descargue hace poco son de a pagina de mirchochip (ya probé con algunos ejemplos de HID y funciono, con uno de cdc porque no se como es jaja ... ), podrían ser unos especializados para MIDI, porque al dirigirme a dispositivos e impresoras me reconoce el controlador, pero sale con un signo de interrogación como dispositivo de audio USB, y al mirar con mas detalle, dice que no se reconoce el dispositivo, y que este dispositivo no puede iniciar(codigo 10) ... entonces si debe ser eso, o no se que mas me pueda faltar porque ya me e descargado las librerías o descriptores que aparecen en este foro :D, las puse en la carpeta de drivers de pic c, ya he colocado el #include <midi7.h> etc me compila perfecto el código, siguiendo los ejemplos de este foro, entonces no se que mas me podria faltar jaja ... les agradeceria mucho que me ayudaran con esto :) ...
 
Última edición:
Hola compañeros.
Bueno quiero agradecer a todos los que han aportado a este tema, me ha ayudado bastante ya que llevo desarrollando un dispositivo MIDI desde hace un año pero solo lo comunicaba mediante transmisión serial, ahora con el aporte de el descriptor midi7.h logre comunicarlo mediante usb tipo bulk, me fue muy emocionante ver que cualquier software de audio reconocia mi placa.

Muchas gracias.
 
Saludos, muy interesante el tema... (y muy extenso para leerlo todo, solo he leído los últimos comentarios).

Apenas ando terminando un proyecto similar pero para controlar Traktor, como interfaz utilizo Arduino UNO, el cual se encarga de recibir datos serie enviados por un PIC16F73 para posteriormente enviarlos vía USB a la computadora. En la computadora, aparte de estar corriendo el traktor, utilizo otro programa (LoopBe3) que recibe los datos desde el puerto USB y los envía a un puerto MIDI virtual que finalmente se comunica con el Traktor.

Aquí es donde tengo un "problema", este programa LoopBe3 lo descargué como versión de prueba y después de 60 min caduca y el puerto virtual se cierra. Entonces quisiera saber si ustedes conocen algun otro programa para generar puertos MIDI virtuales sin la limitación temporal (si no los hay, tendré que comprar la versión de paga de LoopBe3). Utilizo W7 con 64 Bits.

PD. Si ya hablaron de esto en el tema por favor si pueden dirigirme al post donde lo trataron

http://img42.imageshack.us/img42/2616/uk2z.jpg

hola me peguntaba si me pueden ayudar la idea es básicamente la misma ,tengo un arduino mega y quiero usarlo como un plato midi solo me falta la parte de como configurar(el codigo) el motor del HDD y como conectarlo , soy nuevo en el mundo de la electrónica digital

ante todo muchas gracias :apreton:
 
Hola, como tal el motor del disco duro no se controla por el ARDUINO si no lo contrario, el ARDUINO recibe impulsos del HD a través de un circuito diseñado para tal fin.

El diagrama por desgracia no lo tengo a la mano ahorita pero lo buscaré, te adelanto que se trata de un par de comparadores de Schmitt y un flip flop. Los comparadores "convierten" la señal senoidal que genera el HD cuando gira a digital para que pueda ser reconocida por el arduino.

El código si variará pero la idea central será la misma entre PIC y arduino

Saludos
 
Hola, saludos.

He leido todas las paginas y he podido hacer funcionar todo excepto los leds. Quede perdido...
Estuve siguiendo todo el desarrollo y respecto a los leds el tema queda parado en la pag 15 donde rachelies publica como logro hacer que funcionar los leds. Sin embargo no he logrado que me funcionen.

El problema que tenido es el siguiente:
utilizo la funcion "if (usb_kbhit(1))" para verificar si llegan datos al pic, y en caso de que lleguen, se encinda un led. Sin embargo esta funcion solo se cumple una vez, despues el pic pareciera que ignora esta parte del codigo y no entiendo por que. Busque un poco de info en google y encontre a otros que les pasaba este problema con la funcion usb_kbhit, pero nadie daba respuestas a sus problemas.

Adjunto mi codigo por si encuentran algun error:
Código:
#include <18F4550.h>
#device adc=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN      //~~~ 20MHZ OSCILLATOR CONFIGS ~~~//
#FUSES NOMCLR                   //Master Clear pin used for I/O
#use delay(clock=48000000)

#use FIXED_IO( A_outputs=PIN_A4 )

#DEFINE USB_HID_DEVICE     FALSE
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK  //turn on EP1 for IN bulk/interrupt transfers
#define USB_EP2_RX_ENABLE  USB_ENABLE_BULK  //turn on EP1 for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    64  //size to allocate for the tx endpoint 1 buffer
#define USB_EP2_RX_SIZE    64   //size to allocate for the rx endpoint 1 buffer

#include <pic18_usb.h>
#include <descriptors.h>   //USB Configuration and Device descriptors for this UBS device
#include <usb.c>           //handles usb setup tokens and get descriptor reports

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#use fast_io(A)

#byte PORTA=0xF80

int lec_vel = 0;
int recibe[8];

int8 rxdata[8];
int buf1;

void main(void) {

   unsigned char buf[4];

   enable_interrupts(INT_USB);
   enable_interrupts(GLOBAL);
   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_DIV_16);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   set_tris_A(0);
   PORTA=0;
   
   usb_init_cs();

   while (TRUE) {
      usb_task();

            if (usb_kbhit(1)) {
               output_high(PIN_A4);
               delay_ms(2000);
               usb_get_packet(1,recibe,8);
            } 
            
            //if (recibe[2] != 0){
            //   output_high(PIN_A4);
            //}
            //if (recibe[2] == 0){
            //   output_low(PIN_A4);
            //}

      if(usb_enumerated()) 
      
      {
          //set_adc_channel(0);
          //delay_us(3);
          //lec_vel = read_adc();   
          //lec_vel = (int16) lec_vel * 127 / 255; //rango de valores de protocolo midi, van de 0 a 127
         
         //if(bit_test(PORTA,2)){
            //buf[1] = 0x90;          //Note on
            //buf[0]=buf[1]>>4;
            //buf[2] = 0x30;         // Nota 30
            //buf[3] = 0x7F;         // Volumen 127
            //buf[3] = lec_vel;
            //usb_put_packet(1, buf, 4, USB_DTS_TOGGLE);
            
            //delay_us(200);     
       
      }
   }
}
 
saludos, no se si va aca esta pregunta, es sobre un midi in, es decir tengo un teclado con un cable midi a usb funciona bien el midi out del teclado con fl studio, entre otros programas, pero mi gran duda que funcion cumple el mdii in de mi teclado con respecto a la computadora, no con respecto a otro teclado sin no del pc al midi in porque no se si es que en mi piano va a sonar lo que esta por ejemplo en fl studio en las cornetas de mi piano o teclado, esa es mi duda porque he buscado en google y solo hablan que se conecta otro teclado, pero no como es respecto al pc.
 
hola, saludos.

He leido todas las paginas y he podido hacer funcionar todo excepto los leds. Quede perdido...
Estuve siguiendo todo el desarrollo y respecto a los leds el tema queda parado en la pag 15 donde rachelies publica como logro hacer que funcionar los leds. Sin embargo no he logrado que me funcionen.

El problema que tenido es el siguiente:
Utilizo la funcion "if (usb_kbhit(1))" para verificar si llegan datos al pic, y en caso de que lleguen, se encinda un led. Sin embargo esta funcion solo se cumple una vez, despues el pic pareciera que ignora esta parte del codigo y no entiendo por que. Busque un poco de info en google y encontre a otros que les pasaba este problema con la funcion usb_kbhit, pero nadie daba respuestas a sus problemas.

Adjunto mi codigo por si encuentran algun error:
Código:
#include <18f4550.h>
#device adc=8
#fuses hspll,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv1,vregen      //~~~ 20mhz oscillator configs ~~~//
#fuses nomclr                   //master clear pin used for i/o
#use delay(clock=48000000)

#use fixed_io( a_outputs=pin_a4 )

#define usb_hid_device     false
#define usb_ep1_tx_enable  usb_enable_bulk  //turn on ep1 for in bulk/interrupt transfers
#define usb_ep2_rx_enable  usb_enable_bulk  //turn on ep1 for out bulk/interrupt transfers
#define usb_ep1_tx_size    64  //size to allocate for the tx endpoint 1 buffer
#define usb_ep2_rx_size    64   //size to allocate for the rx endpoint 1 buffer

#include <pic18_usb.h>
#include <descriptors.h>   //usb configuration and device descriptors for this ubs device
#include <usb.c>           //handles usb setup tokens and get descriptor reports

#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
#use fast_io(a)

#byte porta=0xf80

int lec_vel = 0;
int recibe[8];

int8 rxdata[8];
int buf1;

void main(void) {

   unsigned char buf[4];

   enable_interrupts(int_usb);
   enable_interrupts(global);
   
   setup_adc_ports(an0);
   setup_adc(adc_clock_div_16);
   setup_comparator(nc_nc_nc_nc);
   setup_vref(false);
   
   set_tris_a(0);
   porta=0;
   
   usb_init_cs();

   while (true) {
      usb_task();

            if (usb_kbhit(1)) {
               output_high(pin_a4);
               delay_ms(2000);
               usb_get_packet(1,recibe,8);
            } 
            
            //if (recibe[2] != 0){
            //   output_high(pin_a4);
            //}
            //if (recibe[2] == 0){
            //   output_low(pin_a4);
            //}

      if(usb_enumerated()) 
      
      {
          //set_adc_channel(0);
          //delay_us(3);
          //lec_vel = read_adc();   
          //lec_vel = (int16) lec_vel * 127 / 255; //rango de valores de protocolo midi, van de 0 a 127
         
         //if(bit_test(porta,2)){
            //buf[1] = 0x90;          //note on
            //buf[0]=buf[1]>>4;
            //buf[2] = 0x30;         // nota 30
            //buf[3] = 0x7f;         // volumen 127
            //buf[3] = lec_vel;
            //usb_put_packet(1, buf, 4, usb_dts_toggle);
            
            //delay_us(200);     
       
      }
   }
}

amigo cual es el código completo para poder probar la comunicación.
 
Hola. En muchos códigos en la parte de los potenciómetros, veo que utilizan mucho los bucles para la lectura de potenciómetros, pero al usar bucles constantemente se envía midi, hecho que veo innecesario, ya que al no haber movimiento en potenciómetros, no debería haber envío de MIDI.

¿Alguien tiene idea cómo se pudiese hacer esto?? Enviar MIDI sólo cuando haya movimiento en potenciómetros.

Saludos.
 
Última edición por un moderador:
Buenas, chicos.

Estuve siguiendo el hilo y me armé un controlador con PIC18F4550.

Tengo 8 botones los cuales ya andan 8 leds que estoy tratando de descifrar el código aún y 8 potes los cuales el código ya me funciona, pero tengo un pequeño problema con las conversiones ADC.

Se me mete ruido, de alta frecuencia de no más de 100 mv de amplitud, por lo que veo en el osciloscopio.
Eso hace que la conversión ADC varíe constantemente en no más de 1 o 2 valores, por lo que se manda MIDI constantemnte y lo cual es un problema.

Tengo capacitores de 100nf en todas las entradas.
Si puenteo a masa la entrada analógica, el valor sigue variando en el midi OX de 00, 01, 02 como mucho.
Según lo que noté en el osciloscopio, el ruido se me mete por la alimentación.

¿Alguna idea?

Gracias!!
 
Última edición por un moderador:
Buenas, chicos.

Estuve siguiendo el hilo y me armé un controlador con PIC18F4550.

Tengo 8 botones los cuales ya andan 8 leds que estoy tratando de descifrar el código aún y 8 potes los cuales el código ya me funciona, pero tengo un pequeño problema con las conversiones ADC.

Se me mete ruido, de alta frecuencia de no más de 100 mv de amplitud, por lo que veo en el osciloscopio.
Eso hace que la conversión ADC varíe constantemente en no más de 1 o 2 valores, por lo que se manda MIDI constantemnte y lo cual es un problema.

Tengo capacitores de 100nf en todas las entradas.
Si puenteo a masa la entrada analógica, el valor sigue variando en el midi OX de 00, 01, 02 como mucho.
Según lo que noté en el osciloscopio, el ruido se me mete por la alimentación.

¿Alguna idea?

Gracias!!


buenas noches, emplea algo como esto:
FUENTE_SIN_RUIDOS.JPG

aunque no necesariamente tantos capacitores, con uno de 100nf uno de 10uf y otro de 1000uf es sufisiente para eliminar cualquier ruido, si persiste, colocale lo mas proximo al pic par de capacitores de 100nf y 1uf, en la parte de la fuente.
 
Oye, funciona perfectamente con el 18f4550, yo lo hice con ese PIC, te recomiendo que uses el MIDI7 tal cual, no lo modifiques, y fijate en los programas de la pagina de este mismo hilo del foro, ahi hay un programa base que sirve muy bien del usuario fernandoae. Con esas dos cosas puedes partir y agregar lo que tu quieras, que yo con esas dos bases hice un dispositivo muy complejo ;)

Hola dashafi
Te escribo desde Córdoba para hacerte una consulta sobre el programa que hablaste hace un tiempo de USB-MIDI en la pagina foros de electrónica.
Estoy renegando y no hay forma de hacerlo funcionar. La PC me detecta el puerto midi (lo estoy haciendo con el pic 18f4550) pero me lo deja con un signo de admiración y tanto el midi-ox (monitor midi) como el midi trace me dicen que no hay ningún dispositivo midi conectado. Tendras idea en que estoy fallando?.
 

Adjuntos

  • 12339237_484146528454487_4155570634305425272_o.jpg
    12339237_484146528454487_4155570634305425272_o.jpg
    90.3 KB · Visitas: 29
Gente, estoy intentando armarme un controlador, con dos discos rigidos, un par de potenciometros y algunos botones, estuve buscando bastante y vi que hay varias formas de hacerlo, tengo un pic18f2550 y un atmega328 (el del arduino), puedo armar el circuito y todo, pero por mas que me haya leido las 18 paginas, no me cierra el tema de la programacion, soy un -10 en eso :D alguno que lo haya armado y tenga un .hex para pasarme? no se si el archivo para el 4550 servira en el 2550, pero bue, cualquier cosa sera bienvenida, muchas gracias!
 
Atrás
Arriba