Control de dispositivos a través del módulo USB del PIC18F45/2550

hola FRYCK, gracias por el dato apartir de ahora lo voy a usar.
te agradeceria que me pasaras la informacion que tiengas para probarla en mi sistema por que ya te tratado con todo y hasta el momento no he tenido exito con eso...
 
Hola A todos, soy nuevo en el foro!!!

En primer lugar, este es el topic mas claro que he podido encontrar en internet para tratar de comprender el protocolo de comunicación USB, con el cual no estoy muy familiarizado. Sin embargo he estado entendiendo algunos conceptos básicos y algunos de los métodos de transferencia de datos bidireccionalmente, gracias a este topic, asi que a todos ustedes y a Moyano, muchas gracias.

Well, Tengo este proyecto que estoy desarrollando con dos amigos, usando un PIC18f2550, con el cual queremos muestrear y digitalizar una señal de audio y transmitir su equivalente digital a traves del puerto usb hacia algun tipo de software que me permita graficarla, manipularla o reproducirla, en el mejor de los casos. Sin embargo, y debido a que no estoy familiarizado con este tipo de comunicación, me han surgido algunas dudas.

1. En primer lugar, no estoy totalmente seguro si este pic es capaz de digitalizar una señal de audio con componentes de frecuencia de hasta 20KHz, si es asi, una vez que vaya a configurar el tiempo de muestreo del adc, es posible establecer una frecuencia de muestreo diferente a las frecuencias de muestreo establecidas para el micro, ya que quisiera muestrear a 44.1KHz para que sea compatible con los formatos de audio del pc.

2. Tengo claro que, debido a que se trata de audio, deberia transmitir los datos por el tipo de transferencia bulk/transfer en tiempo real, lo que supone que no debo establecer el tamaño del paquete de entrege, correcto(?). Sin embargo, no tengo idea alguna de como implementar este protocolo, ni de que librerias deberia incluir en mi proyecto (btw, yo uso el compilador CCS) ni de como modificar los firmware para escribir nuestra firma en nuestro dispositivo.

3. Finalmente, podrian darme alguna indicación de que tipo de software o que camino deberia usar para recibir y manipular los datos que llegan al pc (he oido que labview es muy util).

Lamento molestar con tantas preguntas, y de antemano muchas gracias =)

Jhon
 
hola a todos espero que no sea tarde para preguntarles algo. es que quiero comunicar dos pics 18f2550 por medio inalambrico y los modulos q uso funcionan de la siguiente manera que los datos sean digitales y en forma serial osea tengo que programar en modo usart o serial unos de los pics pero me toca hacer conversion de los datos de analogo a digital y luego mandarlo por el usart al transmisor eñ se comunica con el receotor q despues pasa al otro pic q se encarga de comunicarse con el pc.

lo q necesito es q me ayuden a programar el 18f2550 para establecer esa comunicacion

Moyano o Meta colaboranme porfa es q estoy corto de tiempo

hola a todos espero que no sea tarde para preguntarles algo. es que quiero comunicar dos pics 18f2550 por medio inalambrico y los modulos q uso funcionan de la siguiente manera que los datos sean digitales y en forma serial osea tengo que programar en modo usart o serial unos de los pics pero me toca hacer conversion de los datos de analogo a digital y luego mandarlo por el usart al transmisor eñ se comunica con el receotor q despues pasa al otro pic q se encarga de comunicarse con el pc.

lo q necesito es q me ayuden a programar el 18f2550 para establecer esa comunicacion
 
Última edición:
hola bernardo ovallos,
Lei tu post y no lo veo cumplicado pero si algo difuso, que es exactamente lo que quieres hacer, lo que he interpretado es algo asi como un PIC que envia los datos del ADC por RF al otro PIC que los recibe y los tratansmite a una PC... esta comunicacion seria por medio de RS232 o por USB?, cual integrado de RF vas a usar?
 
Última edición por un moderador:
Hola FRYCK!!
Probe con tu codigo y con el codigo de RALD y no me funciona, lo que me parece raro que es puedo transmitir bien al PC pero no puedo recibir desde el PC, todo esto lo hago desde el Hyperterminal. Recibo el kbhit() pero no puedo distingur que tecla fue presionada y si retransmito loque recibi siempre me aparece lo mismo... un 'fi' y para que me aparezca tengo que presionar una tecla dos veces... muy raro...
Estoy usando el PIC18F13K50 y si pongo clockout veo en el osciloscopio una senal de 12MHz lo que creo que esta bien.... Tenes alguna idea?
Gracias y saludos

Daniel
 
Última edición:
Hola A todos, soy nuevo en el foro!!!

En primer lugar, este es el topic mas claro que he podido encontrar en internet para tratar de comprender el protocolo de comunicación USB, con el cual no estoy muy familiarizado. Sin embargo he estado entendiendo algunos conceptos básicos y algunos de los métodos de transferencia de datos bidireccionalmente, gracias a este topic, asi que a todos ustedes y a Moyano, muchas gracias.

Well, Tengo este proyecto que estoy desarrollando con dos amigos, usando un PIC18f2550, con el cual queremos muestrear y digitalizar una señal de audio y transmitir su equivalente digital a traves del puerto usb hacia algun tipo de software que me permita graficarla, manipularla o reproducirla, en el mejor de los casos. Sin embargo, y debido a que no estoy familiarizado con este tipo de comunicación, me han surgido algunas dudas.

1. En primer lugar, no estoy totalmente seguro si este pic es capaz de digitalizar una señal de audio con componentes de frecuencia de hasta 20KHz, si es asi, una vez que vaya a configurar el tiempo de muestreo del adc, es posible establecer una frecuencia de muestreo diferente a las frecuencias de muestreo establecidas para el micro, ya que quisiera muestrear a 44.1KHz para que sea compatible con los formatos de audio del pc.

2. Tengo claro que, debido a que se trata de audio, deberia transmitir los datos por el tipo de transferencia bulk/transfer en tiempo real, lo que supone que no debo establecer el tamaño del paquete de entrege, correcto(?). Sin embargo, no tengo idea alguna de como implementar este protocolo, ni de que librerias deberia incluir en mi proyecto (btw, yo uso el compilador CCS) ni de como modificar los firmware para escribir nuestra firma en nuestro dispositivo.

3. Finalmente, podrian darme alguna indicación de que tipo de software o que camino deberia usar para recibir y manipular los datos que llegan al pc (he oido que labview es muy util).

Lamento molestar con tantas preguntas, y de antemano muchas gracias =)

Jhon

Una cosa mas :rolleyes: se requiere de algun sistema operativo en especifico para realizar este proyecto?

muchas gracias =)
 
Hola FRYCK!!
Probe con tu codigo y con el codigo de RALD y no me funciona, lo que me parece raro que es puedo transmitir bien al PC pero no puedo recibir desde el PC, todo esto lo hago desde el Hyperterminal. Recibo el kbhit() pero no puedo distingur que tecla fue presionada y si retransmito loque recibi siempre me aparece lo mismo... un 'fi' y para que me aparezca tengo que presionar una tecla dos veces... muy raro...
Estoy usando el PIC18F13K50 y si pongo clockout veo en el osciloscopio una senal de 12MHz lo que creo que esta bien.... Tenes alguna idea?
Gracias y saludos

Daniel
Hola kuropatula si el micro esta siendo reconocido por el pc debe haber comunicacionla verdad este pic PIC18F13K50 no lo e trabajado por eso no te sabria decir ¿lo estas haciendo simulado o lo estas probando de forma fisica? si es simulado te aconsejo que lo ¡ntentes con el circuito real tambien puedes intentar con otro programa fuera del hiperterminal yo utilizo Hercules y funciona bien
saludos
 
@Jhon5191 lo que querés hacer ...es muy complejo...pero creo que se podría hacer lo único que la señal de audio la tendrías que tratar con un DSpic y luego mandar los datos por USB con el PIC18F2550.
Ahora yo solamente te podría estar ayudando con el tema de USB....tratamiento de señales nunca he hecho....:S
Algo que se me ocurre es que si te conseguís un dsPIC que tenga DMA , podrías sacar los datos por ahi y enviarlos por un PIC18F4550 que tiene puerto paralelo de alta velocidad ...este puerto tiene la virtud de poder comunicarse directamente con el SIE y por lo tanto si tenés que hacer muchas muestras por segundo y mandarlas por USB es la mejor manera.....otra cosa no se me ocurre.
 
^ Gracias por tu respuesta Moyano ;) , bueno, la verdad es que en primer lugar, nosotros vamos a digitalizar una señal de un guitar pick up (o microfono de guitarra electrica, no se como se dice) cuya señal de audio es mas sencilla de trabajar, y la cual se nos pidió que fuese acondicionada con un amplificador de instrumentación cuya salida se lleva al pic18f2550. Claro está, que me interesa mucho desarrollar como proyecto personal, el tratamiento de la señal de audio con el DSPic como tu me aconsejas. Sin embargo creo que debo terminar este proyecto primero.

Con respecto a la comunicación USB, tengo claro algunos conceptos hasta ahora, como la enumeración por el host, el estado de la conexión y mirar si hay datos en espera en el buffer de entrada, lo que no estoy muy seguro de resolver, es el envio de los datos que estoy tratando, no se si deberia mandar dato por dato (es decir, leer el adc y mandar el dato) o llenar un arreglo con cierta cantidad de datos, y luego mandar este arreglo como un paquete. Cual de los dos deberia implementar, y como?.

De antemano y nuevamente muchas gracias moyano ;)
 
saludos FRYCK y kuropatula,
kuropatula al parecer tenemos el mismo problema con la transmisión de datos del PC al PIC por cdc USB, yo ya he tratado son diferentes opciones pero creo que el problema esta en el driver del puerto, tal y como dijo FRYCK en un correo anterior... ya trate con el programa hercules pero igual no logro nada... FRYCK si fueses tan amable de mandarme el nuevo driver a mi correo políticas@delforo.com para testearlo te lo agradecería mucho, por que, ya no se me ocurre que mas hacer para encontrar una solución.... gracias


 
Última edición por un moderador:
@Jhon5191 Bueno en realidad lo mejor sería mandar datos continuamente .....algo óptimo sería que en vez de que los datos sean procesados por el microcontrolador , los enviara por USB a la PC y un programa escrito en algún lenguaje gráfico los procesara....
Por ejemplo lo que podés hacer es un adaptador con amplificadores operacionales ...mandar esa señal a un ADC externo...que se comunique con el PIC18F4550 mediante el MPP....y de ahi al SIE para que transmita los datos por USB....
Te recomiendo un ADC externo debido a que podés tener más samples/seg...y más definición en bits.. que el ADC interno del PIC..

Algo que podrías hacer es crear tu propio archivo de descriptores USB para trabajar al PIC como si fuera un encoder de audio....pero tendrías que crearlos vos leyendo las especificicaciones del protocolo USB...y de ahi ver como la máquina te toma los datos y te los procesa como si fuera sonido..
 
Hola a todos dejo los driver de microchip y las dos librerías de pic c ccs usb_cdc.h y usb_desc_cdc.h remplacen estas dos librerias en la carpeta C:\Archivos de programa\PICC\Drivers compilen el programa de nuevo después revisen en que puerto se instalo el driver en mi_pc->propiedades -> hardware -> administrador de dispositivos -> puertos(com & lpt) -> pic usb 4550 (comx)
abren ese puerto con el programa Hércules que les dejo en esta misma carpeta que es para comunicación serial ojala les pueda servir
saludos
 

Adjuntos

  • drivers_usb_cdc.rar
    534 KB · Visitas: 243
hola a todos sera q alguien me puede colaborar. es que quiero comunicar dos pics 18f2550 por medio inalambrico y los modulos q uso funcionan de la siguiente manera que los datos sean digitales y en forma serial osea tengo que programar en modo usart o serial unos de los pics pero me toca hacer conversion de los datos de analogo a digital y luego mandarlo por el usart al transmisor eñ se comunica con el receotor q despues pasa al otro pic q se encarga de comunicarse con el pc.

lo q necesito es q me ayuden a programar el 18f2550 para establecer esa comunicacion
 
Pero bernardo ovallos tendrías que abrir un nuevo hilo para exponer tu problema....igual hay muchos hilos que hablan de lo mismo y tu problema al parecer está dado por lo siguiente:
tenés 2 PIC para comunicar.... + 2 transceptores ( o emisor receptor ). + Problema de programación.
Primero ejecutar una rutina de recepción / envío RS232 es algo muy sencillo y hay amplia información en la red.
Si usas transceptores con comunicación serial limpia (libre de ruido) es aún más simple por que lo único que tenés que hacer es definir un hardware que conecte al PIC con el transceptor y teniendo el código RS232 listo no tenés que hacer más que conectar y funciona.
Ahora si usas módulos RF de bajo coste ....tu trabajo va tener que estár más enfocado en limpiar las comunicaciones por software implementando algún sistema CRC básico.
Te pido que por favor busqués en el foro y en internet que vas a encontrar seguro lo que necesitas.
Un saludo !
 
lo que pasa es q ya sustente el proyecto y lo propuse por medio del pic18f2550 usando el puerto usb y he visto q haces buenos aportes no s esi me pudes colaborar por esa parte y si tienes un enlace dond me pude guiar te agradezco
 
Hola FRYCK, gracias por la respuesta, es bueno cuando hay ayuda....
Probe con lo que me dijiste y me sigue funcionando de la misma forma. Lo que hice fue copiar los archivos que estaban en la primer carpeta pero no encontre 'usb_cdc.h', en su lugar encontre 'usb_desc_scope' que creo que es para Bulk.
El driver que le instale fue el que estaba en la carpeta 'drivers_cdc'... esta bien lo que hice?
Estoy haciendo todo con HW
Muchas gracias!!! espero poder resolverlo porque tengo un poco de presion ya que estoy en el trabajo.
Saludos y gracias

Hola RALD, yo sigo intentando, cuando lo solucione te aviso... lo mismo vos por favor,
Saludos!
 
Última edición:
Atrás
Arriba