Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
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
#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);
}
}
}
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); } } }
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!!
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