Controlador MIDI por USB con PIC para Virtual Dj

Hola buen dia a todos.
Estuve intentado hacer un pequeño programa que detecte un boton y mande el estado de este por midi.
Me ayude un poco por los códigos que aparecen en este foro, tabn busque como configurar los fuses y al
final me quedo el siguiente codigo.
Lo grabo y cuando lo conecto a la compu no pasa absolutamente nada
primero quise probar sin conectar el boton ni nada pero la compu no me lo reconoce como dispositivo midi.
seguramente me este equivocando en alguna cosa fácil que no me doy cuenta. alguna ayuda?

tengo un clock de 20mhz conectado y la coneccion del pic al usb me guié por una foto que encontré en Internet.
Código:
#include <18f4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#fuses NOMCLR   //Habilita MCLR/RE3 como entrada   
#use delay(clock=48000000)

#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 <.\include\midi7.h>   //USB Configuration and Device descriptors for this UBS device
#include <usb.c>           //handles usb setup tokens and get descriptor reports

void main(void) 
{ 

SET_TRIS_D(0xFF);
int8 botones=0;
int8 estado=0;
while(TRUE){

int8 out_data[4];
estado= input_state(pin_D1);
 
           if (estado==0){
					out_data[1] = 0x90;          //Note on
      				out_data[0]= out_data[1]>>4;
      				out_data[2] = 0x00;         // Nota 0
      				out_data[3] = 0x7F;         // Volumen 127
      				usb_put_packet(1,out_data,4,USB_DTS_TOGGLE); 
					delay_ms(6);

						}
		if (estado==1){
					out_data[1] = 0x90;          //Note on
      				out_data[0]= out_data[1]>>4;
      				out_data[2] = 0x00;         // Nota 0
      				out_data[3] = 0x00;         // Volumen 0
      				usb_put_packet(1,out_data,4,USB_DTS_TOGGLE); 
					delay_ms(6);

						}
}	
}

muchas gracias
 
Última edición:
hola fernandoae si conecte una resistencia de 4,4kohms al mclr, 2 capasitores de 22pf conectados a el cristal de 20mhz y conectados a tierra. vdd en el pin 32, vcc en el pin 31 (el vdd y el vcc los saco de la coneccion del cable usb), y un capasitor de 470nf al pin 18 que es Vusb. los pines 23 y 24 los conecto al los pines del usb
como en la foto: http://ladelec.com/images/stories/stories2/aar%2026%20pic%2018f4550%20circuito%20completo.jpg

no c donde puede estar el error. porque cargo un programa simple que apague y prenda un led y funciona.
 
Última edición:
Bueno entonces descartamos eso, ahora... no tendras los cables de datos del usb invertidos (d+ y d-)?
Porque a cualquiera se le escapan detalles jeje, el otro dia revise un circuito en la protoboard para asegurarme que todo este bien, enciendo la fuente y salio olor a quemado... habia conectado el micro y demas a 16v, pero bueno... por suerte era un 12f675.
 
uu no te lo puedo creer que bajon que haya pasado eso.
ya revise los pines y están bien.(revise varias veces que sean los pines que hay que conectar.) puede ser que sea algo del codigo? o del complilador? lo probe conectándolo a la una notebook y a una pc y en las 2 no hace absolutamente nada, tengo windos 7 y cuando conecto el usb no me aparece que se conecto algo desconocido o algo raro. directamente no pasa nada... medio raro no c que puede ser. ya teste que cuando grabo el programa en el pic se haya grabado bien grabo bien.
 
bueno... seguimos, tenes el archivo midih7.inc en la carpeta include dentro de tu proyecto?... seguro que si sino no te deberia compilar... otra cosa no se me ocurre, revisaste la palabra de configuración al momento de grabarlo?
 
La resistencia en MCLR no hace falta, que en los fuses está definido el pin como entrada.
Yo probaría a poner un led en una salida que encienda y apague para saber que el PIC "está vivo"
Un saludo
 
yo probé prender y apagar un led pero con un código en C18 y funcionaba.
en CCS hice esto... tendría que funcionar o me falta algo para prender y apagar el led?
tengo miedo que quemar el micro por alguna configuración o algo mal por eso pregunto.
Código:
#include <18f4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#fuses NOMCLR
#use delay(clock=48000000)
void main(void) 
{ 
SET_TRIS_B(0x00);
while(TRUE){

                Delay_ms(500);
                output_low(pin_B7);
		Delay_ms(500);
                output_high(pin_B7);
}}
Muchas gracias por la ayuda
 
buen dps de ver y comparar con los ejemplos que hay en este foro.
1ro decidí pasarme al pcwhd de Css para compilar un ejemplo que hay y sin tocar nada funciono y me lo reconocio.
2do puse mi programa y no funcionaba... compare los 2 programas y me di cuenta que
faltaba el:
usb_init_cs();
usb_task();
y esto:
Código:
if(usb_enumerated()) 
          { //programa

}
ahora me lo reconoce :)
 
Claro!! Como no nos dimos nadie cuenta de eso? jajajaja Lo primero es inicializar el USB. Ahora te tiene que funcionar el ejemplo que tenías del botón, y como mínimo, reconocerlo como dispositivo midi.
Yo siempre añado un led dentro del programa para saber que está corriendo. En tu caso, puedes ponerlo que al presionar el botón se encienda o apague, así sabras que el pic está funcionando y hasta donde te funciona el programa. Es una forma de hacer debuger, jejjeje
Un saludo y ánimo!!!
 
listoo ya lo reconoció como dispositivo midi y me detecto el boton en traktor. pero en el virtualdj se cuelga... conecto el usb y se cuelga, lo desconecto y se "descuelga" por asi decirlo. no c que puede ser :S alguna solución?
También modifique el programa porque el que puse antes me envia dada vez que pregunta el estado del pin la nota midi. lo modifique le agregue una variable para que solo mande cuando cambio de estado y que mande 1 sola vez el paquete.
y lo del led es una buena forma para saber que pasa. una gran consejo lo voy a implementar.
 
Estas usando el vdj7 crackeado? proba desconectandote de internet o bloqueando la salida y entrada del soft desde tu firewall, no te sale algo de que va a funcionar solo por 15 minutos?
 
En traktor funciona sin problemas y lo detecta como midi y demás, pero ahora llegas al siguiente jaleo en el virtual dj: los mappers y devices.... En este hilo más atrás se habló de ello. Tienes que escribir un par de archivos que se meten en la carpeta mappers y devices del virtual dj para que reconozca lo que has conectado.
Échale un vistazo y si no te vamos ayudando.
Un saludo
 
Si estoy usando virtualdj7 crackeado ya probé lo de el Internet y sigue sin funcionar se me tilda.
Por ahora sigo probando con el traktor que anda perfecto. esta semana me fijo lo de los mappers y devices, lo había leído anteriormente pero muy bien no entendí para que sirve y en que carpeta los tengo que colocar. voy a seguir averiguando y dentro de poco empiezo a probar con los potes.

una consulta de cuantos koms tiene que ser los potes? o pueden ser de cualquier medida? yo compre uno de 5k lineal. y tengo entendido que el conector de la derecha lo conecto a 5v el de la izquierda a tierra y el del medio es la entrada al pin del micro... es correcto?

muchas gracias
 
los potes pueden ser de cualquier valor hacia arriba, pero no menos de 5k para que no consuman mucha corriente... igual si son de mucho valor pueden meterse señales indeseadas, de 5k o 10k son buenos valores.
 
Atrás
Arriba