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

Mirá @zadkiel acá te podemos orientar y mucho...pero nos tenés que espeficar que necesitas....en el hilo está todo lo que necesitas para tu proyecto es cuestion de leer nomas y preguntar dudas...
saludos y que estes bien !
 
Otra vez dando una hojeada a la pagina jejeje.
ya mencione unas paginas atras pero creo que vale la pena volver a repetir, buen tiempo andube peleando con el pic y con el programa de visual basic para la transmision de mas de 2 bytes, el problema esta en la tabla de descriptores por defecto esta configurado a 2 bytes en el usb_desc_hid.h de ccs.
modificando el descriptor CLASS_SPECIFIC_DESC[], los bytes de report count, que estan en 2 modificar: ejm. cambiar a 3 para transmitir 3 bytes, o 8 para transmitir 8 bytes, verifica en el archivo de descriptores, antes de compilar.
Por cierto olvide mencionar que esto es para el modo de trasmision HID.
Esto por que alguien tubo problemas al transmitir mas bytes.
Moyano tengo una duda, lei que estas programando en asm, que es lo que estas programando? el codigo fuente para pic? aplicacion para pc o el driver?. programo algo en asm y quiza pueda darte una mano
Animo Moyano, con el manual
 
Hola el manual está parado no por razones mías sino que tengo que aprender más y no les voy a dar un manual asi nomás sino que es un libro ya con sus 300 páginas...pero no sean impacientes todo va a salir en su debido momento no quiero adelantar nada más.

Para ASM estoy programando el Firmware del PIC que es compatible con easyHID , es un firmware HID.

El mismo lo estoy estudiando de a poco ya que el ASM no es 100% mi amigo ...pero lo que quiero es entender como funciona el tema de USB en forma completa...por que es muy facil crear una aplicación funcional pero a veces no se entiende como es en forma interna.
 
Estoy de acuerdo contigo Moyano el firmware para programarlo en asm se requiere de conocimientos avanzados, hace un tiempo discutimos sobre usb en asm pero este no utiliza interrupciones, esto para el modo de transmision HID.
Por falta de tiempo no pude actualizarlo para que pueda ser usado como una libreria firmware, sin embargo funciona y es compatible con easyHID, ademas de un manual que esta en ingles.
la pagina esta en: http://dynamoelectronics.multiforos.es
espero sirva de algo.
 
Asi, es ya recuerdo cuando encendi y apague un led por primera vez con un pic18f2550 por usb, estaba tan feliz que di brincos de alegria todo el dia.
No me conecto muy seguido a internet pero estare viendo los avances,
Saludos.. Moyano
 
Mira por donde ya llega el libro C# 2010 que puedes ver aquí en inglés.

Este último libro del Dr. John Allwork apoya el desarrollo de C# empleando el reciente entorno Microsoft Visual Studio 2010 y el sistema operativo Microsoft Windows 7.

El objetivo de este libro es enseñar rápidamente cómo programar un PC utilizando el conocido lenguaje de programación de alto nivel C#. La enseñanza comienza con los tipos de datos y el flujo de programa y se extiende a conceptos avanzados como la programación orientada a objetos, threading, comunicación por internet y bases de datos. Todos los ejemplos utilizados están disponibles – sin cargo alguno – en la web www.elektor.com; puedes crear fácilmente tus propios resultados para demostrar los conceptos explicados y reforzar tu aprendizaje en el proceso.

Se pueden descargar herramientas software de calidad profesional – también sin cargo alguno – desde Micorsoft. El entorno Microsoft Visual Studio 2010 está ampliamente cubierto con controles de usuario y sus propiedades, métodos y eventos. Se proporciona una guía detallada para aquellos que deseen controlar hardware desde el PC con los capítulos dedicados al interfaz con PC que explican los puertos serie y paralelo, la conexión analógica mediante la tarjeta de sonido y utiliza los drivers DirectX Microsoft. La interconexión con el omnipresente puerto USB se explica en profundidad con un diseño detallado de hardware y software para la conexión USB a un hardware basado en PIC.

Este libro se complete con muchos programas de ejemplo completos, ejercicios de autoevaluación y enlaces a videos de soporte. También se presta soporte para profesores de Universidad en forma de presentaciones PowerPoint para la mayoría de los capítulos.

Ahora, y por tiempo limitado, los suscriptores de Elektor pueden pedir este nuevo libro con un descuento de 5€ y sin gastos de envío.

Consejo: ¡Pide el libro junto con otros productos y te ahorrarás los gastos de envío del pedido completo
Fuente:
http://www.elektor.es/noticias/nuev..._source=ES&utm_medium=email&utm_campaign=news

Índice del libro en PDF:
http://www.elektor.es/Uploads/Files/Product/IndiceC-2010Programming.pdf

Parece el mismo libro del C# 2008 pero más actualizado.
http://www.elektor.es/noticias/nuevo-libro-c-2008-y-net-para-ingenieros.979192.lynkx
 
Los ejemplos DE CDC USB funcionan bien con su hex que viene hay, pero al compilar los ejemplos con el ccs crea un hex que no funciona bien no recive el carácter se pasa de largo la funcion "usb_cdc_kbhit()" pero si imprime caracteres que agrege una linia printf(usb...)para probar.
Una pregunta hay una forma que el pic no espere que llegue un carácter al buffer "usb_cdc_kbhit()" por que se detendría el programa solo en la espera, seria recivir caracteres por interrupción, hasta llenar un buffer creado asi como se usa uart rx por interrupción.
 
Al ser topología USB - SERIE la interrupción de la que me hablás es por USB y la implementación de eso es bastante compleja...es raro a algunos les funciona a otros no los ejemplos....quizás sea la versión del CCS yo usé la V4.025 ....y ya van por la 4.112....hay que fijarse en eso también ..quizas haya algunas funciones cambiadas.
 
Usé el ccs 4.020 lo mas cercano que encontre de la vercion que usaste este si funciona pero tengo una duda la funcion "usb_cdc_kbhit()" espera realmente ise una prueba y lo salta.
Aqui pongo una parte del codigo y agregue unas lineas.
..
...
do{
usb_task();
if (usb_enumerated()){ // Espera a que el dispositivo sea enumerado por el host.
printf(usb_cdc_putc, "El USB.\n\r");
delay_ms(200);
printf(usb_cdc_putc, "El USB 2.\n\r");
delay_ms(200);
printf(usb_cdc_putc, "El USB 3.\n\r");
if(usb_cdc_kbhit()){ // En espera de nuevos caracteres en el buffer de recepción.
if(usb_cdc_getc()=='x'){ //¿lo que llegó fué el caracter x?
printf(usb_cdc_putc, "Se recibe el caracter x.\n\r");
//si, entonces envía una cadena hacia el PC
}
if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
printf(usb_cdc_putc, "Se recibe el caracter a.\n\r");
//si, entonces envía una cadena hacia el PC
}
}
}
}while (TRUE); // bucle infinito.
..

Imprime "EL USB x " en forma imparable supuestamente deberia quedarce en la funcion "usb_cdc_kbhit()" hasta que llegue un caracter, a mi parece que esta funcion no espera solo ve si ha llegado datos.
la funcion "usb_cdc_getc()" si espera hasta recivir un caracter muy parecida a la uart.
"usb_cdc_kbhit()" siempre se activa en el trafico usb si interesar si mandaste un caracter por la hiperterminal..
 
Última edición:
Buenas a todos¡¡
He estado trabajando USB tipo bulk, he conseguido entender el funcionamento general de este tipo de comunicacion. Estoy realizando unas pruebas con UART y me encuentro con la contrariedad de que no me transmite bien. Presumo que es por las velocidades de transmision no son las correctas. Intente comunicacion I2C y fue un fiasco completo. Es decir la comunicacion entre pic me falla cuando uno de ellos usa USB. La verdad he intentado por muchos caminos pero obtengo los mismos resultados. Alguien ha implementado estas configuracion. Seria estupendo que alguien me pudiera orientar con respecto a este tema.
Gracias desde ya.
Salu2¡¡
 
cristian_elect la verdad no se específicamente donde pueda estar tu problema , tendrías que revisar que la configuración de velocidad de tu aplicación coincida con la del firmware. La mayoría de las aplicaciones presentan errores por velocidades mal configuradas.
 
HOla Moyano!

llevo como un mes siguiendo el post, ya casi me vuelvo loco, peor no he podido hacer funcionar mi pic, en modo CDC todo OK! pero en modo HID no :(, ni uno de los ejemplos del HID me ha funcionado en real pero en proteus si, estoy usando el mismo circuito que el del CDC que si me funciono en real, tendras alguna idea que esta fallando, lo que pasa es que cuando conecto el circuito al USB este no lo reconoce tengo semanas intentando diferentes configuraciones pero nada, me siento muy frustrado no poder hechar ha correr esto pues estoy haciendo un proyecto para controlar 3 motores a pasos. Espero alguna ayuda Gracias! Saludos desde Mexico
 
@eviltools: Hola como estás.

Mirá todos los ejemplos los he probado yo mismo en mi entrenadora antes de subirlos a la red y no tienen ningún error de funcionamiento. Pero quizas en el hardware si.

Antes de brindarte una solución , te recomiendo que subas inmágenes de el administrador de dispositivos para ver que mensajes te aparecen.

También tendrías que subir una foto de tu montaje y el esquema que estás usando y por último el programa junto con su firmware.

Me parece algo muy raro que te funcione el programa en proteus y no te funcione en la aplicación real.
 
Hola Moyano, me alegra que allas respondido.

Estoy utilizando tu ejemplo numero 2 del HID, he tomado el .hex y lo he grabado en mi pic 2550. el esquema que estoy utilizando es el que muestras en el archivo de proteus, claro con sus debidas conecciones a vcc y gnd, dejo adjunto la foto del montaje, lo raro de todo esto es que cuando grabo al pic el ejercicio CDC funciona de maravilla, "solo con los errores de que hay que pulsar multiples veces la imagen del led en el programa para que enciendan los leds".

espero y me puedas ayudar, tendras algun esquema de tu entrenadora?
 

Adjuntos

  • archivos.rar
    1.2 MB · Visitas: 185
aqui te dejo otras fotitos pero ahora del ejemplo en CDC, el mismo circuito pero ahora le grabe el ejemplo control_de_8_rels_por_usb_439, la verdad no entiendo que estara pasando, no se pq con CDC todo va Ok y con HID no :(, espeor y me puedas hechar la mano.

Oye amigo como solucionaste el problema del software para este ultimo ejemplo del CDC, pues cuando pulso sobre algun led en el programa no reacciona a la primera, hay q pulsar varias veces para q reaccione.

de ante mano muchisimas graciaas!!
 

Adjuntos

  • Escritorio.rar
    2 MB · Visitas: 141
Atrás
Arriba