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

Hola amigos,

Hace unos días llevé a cabo el proyecto que presentó el amigo Moyano Jonathan sobre el entrenador USB V.01 sobre comunicación HID USB con el pic18F2550 y les comento que me funcionó de maravillas.
Excelente manual y muy didáctico por cierto todo, a quien agradezco mucho el esfuerzo realizado.
Quiero aportar sobre algunos problemillas que tropecé antes de hacerlo funcionar para evitar que a algún otro amigo le pase lo mismo.

En principio yo estaba usando la versión V4.068 del compilador C CCS y para ver si podía compilar (pensando en futuros proyectos) sin tocar nada volví a recompilar el archivo "APLICACION_HID.c" y me tiró una cantidad de errores!
Después de identificar y "remendar" la línea del error, compiló OK y grabé el PIC, con la sorpresa de que al enumerarse me reiniciaba siempre la PC... enumeraba nuevamente y reiniciaba y así en un loop !!!!

Ya muy desanimado, vi que Jonathan usaba la versión V4.114 del C CCS y nació otra esperanza!
En su lugar pude conseguir la V4.105, rehice todo Y EL FIRMWARE SE ENUMERÓ CORRECTAMENTE !!!
Como tarjeta entrenadora, hace unos años yo había hecho una similar, que había publicado J1M en otro foro, pero los pines de los puertos estaban cambiados, así que corregí eso en el firmware, ejecuté la aplicación del C#
Y FUNCIONÓ TODO A LA PERFECCION !!!

Ahora bien, yo en C# nunca trabajé, en cambio en Visual Basic he hecho algunas cosillas, así que intenté ejecutar la misma aplicación del ejemplo en Visual Basic.NET y me tiró una excepción... no encontraba "mcHID.dll"
El problema era que para VBasic la dll debe estar en la carpeta BIN\DEBUG
Al ponerla allí, pude probar de forma excelente el funcionamiento de la tarjeta con la aplicación desde VBasic tal como se podía ver en los videos del ejemplo !!!
Muchas gracias nuevamente por compartir todo este material !!
 
Hola Moyano, yo estoy trabajando en una comunicacion pic-pc por usb en modo bulk, pero cuando instalo el driver me dice al final que el dispositivo no puede iniciarse codigo 10... sabes que puede ser?? el descriptor y el programa me compilan perfectamente.
 
Moyano Jonathan, la verdad sos un groso. Este tema me ayudo, y me esta ayudando mucho.
Tu programa en VB para los ocho reles me gusto mucho, ya que es muy sencillo y facil de entender}
este mes voy a intentar comandar 50 salidas, con el usb. Voy a intentar modificar tu codigo, para que el numero que le inrgese me lo represente en binario de 8 bits.
Si lo has intentado cuentame, sino luego mostrare como me fue.
 
Que tal!
Soy nuevo en esto y quisiera solamente conectar un led en el pic 18f2550 para controlar el encendido y apagado del led con un programa hecho en visual... algunos foros hacen que paresca facil, pero no especifican como se hace... y que materiales usar... solo eso gracias
 
Que tal!
Soy nuevo en esto y quisiera solamente conectar un led en el pic 18f2550 para controlar el encendido y apagado del led con un programa hecho en visual... algunos foros hacen que paresca facil, pero no especifican como se hace... y que materiales usar... solo eso gracias

te referis a visual basic?, pues el programa seria bastante sencillo...despues lo puedes complejizar para que se vea lindo.
En cuanto a la programacion del pic, depende en que lenguaje programes.
Si no lo tienes decidido, empieza con el primer ejemplo prouesto en este tema, que es muy bueno.
Luego, ve avanzando
 
Ya pude arreglar el problema de los drivers, simplemente no querian funcionar en mi portatil...

pero ya se me presenta otro problema en labview:
Cuando lo pongo en modo paso a paso funciona perfectamente, pero cuando lo pongo a correr continuo me sale error de timeout!
Otro problema que he tenido es que cuando vario la entrada al conversor analogo digital me sale "Could not perform operation because I/O error." en labview

Alguna sugerencia?
 
Que tal!
Soy nuevo en esto y quisiera solamente conectar un led en el pic 18f2550 para controlar el encendido y apagado del led con un programa hecho en visual... algunos foros hacen que paresca facil, pero no especifican como se hace... y que materiales usar... solo eso gracias

erockerito,
En la primera página del foro hay un excelente material publicado por Moyano Jonathan "Control de Dispositivos por USB" que tiene un tutorial sobre el proyecto, el firmware para el PIC18F2550 escrito con el compilador C CCS, el software de la aplicación escrito en Visual Studio 2008 C# y videos que muesran el funcionamiento. En fin, todo el material para llevarlo a cabo.
En otras páginas mas adelante podrás encontrar también la misma aplicación del proyecto pero escrita en Visual Basic.NET.
Saludos.
 
Muchas felicitaciones por hacerlo funcionar !!

Muchas gracias Jonathan!
Quiero hacerte una consulta sobre el código de la aplicación en visual basic.net, por ejemplo en el código del botón de encender los leds:

Private Sub OUT_DIGITAL_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OUT_DIGITAL_1.Click

Dim BufferOUT As Byte() = New Byte(BufferOutSize) {}

BufferOUT(0) = 0 ' Report ID.

BufferOUT(1) = &HA ' Primero enviamos un comando de control al dispositivo:
' &HA (COMANDO_SALIDAS).

BufferOUT(2) = &H10 'Luego enviamos los datos de control de los LED'S.

hidWrite(controlador, BufferOUT(0)) ' Envía los datos.

MENSAJES_USB.Items.Add("Cambia estado: SALIDA1.")

End Sub


No me queda claro el significado de la sintaxis de
Dim BufferOUT As Byte() = New Byte(BufferOutSize) {}
principalmente los corchetes {}
y BufferOUT(1) = &HA.



Muchas gracias por tu aporte y cordiales saludos!!!
Elflamen
 
Cuando lo pongo en modo paso a paso funciona perfectamente, pero cuando lo pongo a correr continuo me sale error de timeout!
Otro problema que he tenido es que cuando vario la entrada al conversor analogo digital me sale "Could not perform operation because I/O error." en labview

Alguna sugerencia?

Hay un hilo específico del foro en donde se explica detalladamente como llevar a cabo la comunicación con Labview.
Específicamente: https://www.forosdeelectronica.com/f26/usb-labview-entre-otros-18338/

Saludos !

Does this project work on windows 7 64bits?

bye

Si, el proyecto funciona perfectamente en Windows 7 de 64 bits.

Saludos !

Para:
Código:
Dim BufferOUT As Byte() = New Byte(BufferOutSize) {}

Crea un arreglo en tiempo de ejecución. Los corchetes no estoy seguro a que se refieren; podrías consultar la ayuda de microsoft MSDN.

Código:
y BufferOUT(1) = &HA
Es el código del botón presionado para que el micro reconozca el comando. En este caso el botón está marcado como "A".
Para entenderlo mejor vas a tener que revisar el firmware del microcontrolador, donde están declarados todos los comandos.

Un saludo !

Gente. Si ven que no les contesto a la brevedad es por que estoy trabajando y estudiando al mismo tiempo ...y dada las circunstancias la electrónica por ahora no le estoy prestando la debida atención.

Sepan disculpar las tardanzas. :apreton:
 
Para:
Código:
Dim BufferOUT As Byte() = New Byte(BufferOutSize) {}

Crea un arreglo en tiempo de ejecución. Los corchetes no estoy seguro a que se refieren; podrías consultar la ayuda de microsoft MSDN.

Código:
y BufferOUT(1) = &HA
Es el código del botón presionado para que el micro reconozca el comando. En este caso el botón está marcado como "A".
Para entenderlo mejor vas a tener que revisar el firmware del microcontrolador, donde están declarados todos los comandos.

Un saludo !

Gente. Si ven que no les contesto a la brevedad es por que estoy trabajando y estudiando al mismo tiempo ...y dada las circunstancias la electrónica por ahora no le estoy prestando la debida atención.

Sepan disculpar las tardanzas. :apreton:[/QUOTE]

Muchas gracias Jonathan,
Lo seguiré estudiando un poco más.
Abrazo.
 
Moyano, tengo una duda ya que en C nunca he escrito nada... Desde ya muchas gracias por hacer un programa tan pero tan explicativo.
En la linea
if(usb_cdc_getc()=='1'){ //

el caracter que resive en el buffer, no puede ser de dos digitos? por ejemplo 89 ???

Tal vez es de mi ignorancia pero estuve leyendo bastante y no logro encontrar una respuesta.
Si la respuesta es no, hay alguna forma de que sea posible hacerlo?

por ejemplo me gustaria hacer una cosa como esta

usb_task();
if (usb_enumerated()){ // Si el puerto ya fue enumerado por el host :
usb_enumerado(); // Enciende led de enumeración_OK.
if(usb_cdc_kbhit()){ // en espera de nuevo(s) caracter(es) en el buffer.
if(usb_cdc_getc()=='23'){ //
output_toggle(PIN_B3); // Cambia de estado el pin b3

Gracias por todo... espero no ser una molestia :)

Moyano, tengo una duda ya que en C nunca he escrito nada... Desde ya muchas gracias por hacer un programa tan pero tan explicativo.
En la linea
if(usb_cdc_getc()=='1'){ //

el caracter que resive en el buffer, no puede ser de dos digitos? por ejemplo 89 ???

Tal vez es de mi ignorancia pero estuve leyendo bastante y no logro encontrar una respuesta.
Si la respuesta es no, hay alguna forma de que sea posible hacerlo?

por ejemplo me gustaria hacer una cosa como esta

usb_task();
if (usb_enumerated()){ // Si el puerto ya fue enumerado por el host :
usb_enumerado(); // Enciende led de enumeración_OK.
if(usb_cdc_kbhit()){ // en espera de nuevo(s) caracter(es) en el buffer.
if(usb_cdc_getc()=='23'){ //
output_toggle(PIN_B3); // Cambia de estado el pin b3

Gracias por todo... espero no ser una molestia :)
 
el caracter que resive en el buffer, no puede ser de dos digitos? por ejemplo 89 ???

Si por supuesto que se tendría que poder. Ahora hay que ver como lo interpreta la función...por que quizás te lo toma como un código ascii o como un entero decimal...hay que tener cuidado..pero de poder se puede.

Un saludo !
 
Cuanto tiempo no paso por aquí desde que empecé con un trabajo, ya que se acabó el contrato, espero estar más por aquí.

A estas alturas de la vida. ¿Harás un revisión del manual?

Veo que tienes más soltura que antes en estos temas. La revisión es ampliar más contenidos o explicar más temas, etc..
 
Cuanto tiempo no paso por aquí desde que empecé con un trabajo, ya que se acabó el contrato, espero estar más por aquí.

A estas alturas de la vida. ¿Harás un revisión del manual?

Veo que tienes más soltura que antes en estos temas. La revisión es ampliar más contenidos o explicar más temas, etc..

Hola Gente!
He intentado bajar el manual desde mediafire y no he podido, parece que mediafire no funciona, no se puede acceder...
Se podrá subir aquí mismo en pdf de la misma manera en que se han subido el resto de los ejemplos y experimentos?
Muchas gracias y un abrazo, Elflamen
 
Si por supuesto que se tendría que poder. Ahora hay que ver como lo interpreta la función...por que quizás te lo toma como un código ascii o como un entero decimal...hay que tener cuidado..pero de poder se puede.

Un saludo !

Claro, pero cuando quiero compilar me dice como error qu es un caracter invalido. Solo me deja hasta el 9. Si me explicaras como puedo hacer te lo agradeceria.
 
Estimados amigos del Foro he leido casi todos los comentarios viendo los usos de los puertos usb, quisiera saber si me podrian ayudar, ya que tengo un proyecto, el cual es controlar un carrito por control remoto mediante la computadora, entonces mi plan es dejar el carrito sin hacerle nada y modificar solo el control, ya que solo tiene 4 direcciones Adelante, Atras , Derecha e izquierda, y eso lo quisiera manejar con un programa, actualmente estoy aprendiendo NetBeans pero veo que tiene demasiada experiencia con Visual, yo lo he usado pero no tanto, bueno regresando a mi pregunta es que si m apoyarian explicandome o enviandome como puedo lograr controlar esas cuatro direcciones con la salida USB. he leido muchos foros donde explica con puerto paralelo pero mi laptop no tiene el puerto, sin embargo tengo 4 salidas USB y quisiera que me ayudaran a como lograr manejar esas direcciones , en pocas palabras es los movimientos que hace el control realizarlo con la computadora, usando la placa del control, de hecho tiene un Pic y pienso que de ahi se podrian manejar las funciones... amigos espero me puedan orientar.. Gracias y Buenas noches
 
Estimados amigos del Foro he leido casi todos los comentarios viendo los usos de los puertos usb, quisiera saber si me podrian ayudar, ya que tengo un proyecto, el cual es controlar un carrito por control remoto mediante la computadora, entonces mi plan es dejar el carrito sin hacerle nada y modificar solo el control, ya que solo tiene 4 direcciones Adelante, Atras , Derecha e izquierda, y eso lo quisiera manejar con un programa, actualmente estoy aprendiendo NetBeans pero veo que tiene demasiada experiencia con Visual, yo lo he usado pero no tanto, bueno regresando a mi pregunta es que si m apoyarian explicandome o enviandome como puedo lograr controlar esas cuatro direcciones con la salida USB. he leido muchos foros donde explica con puerto paralelo pero mi laptop no tiene el puerto, sin embargo tengo 4 salidas USB y quisiera que me ayudaran a como lograr manejar esas direcciones , en pocas palabras es los movimientos que hace el control realizarlo con la computadora, usando la placa del control, de hecho tiene un Pic y pienso que de ahi se podrian manejar las funciones... amigos espero me puedan orientar.. Gracias y Buenas noches

Hola Pablochin,
Vas bien rumbeado en este foro. Te recomiendo que te bajes el material que publicó Jonathan en la primera página. Ahí tenés un ejemplo completo que puede serte útil para sacar ideas de como hacerlo.
Por lo que describis supongo que en el carro tendrás 2 motores de contínua con ambas marchas, con lo que hace que vas a necesitar 4 órdenes (avance/retro) mas 2 para prender cada uno.
En total 6 comandos si/no. El carro deberá tener un PIC con interfase USB el cual recibirá esos 6 comandos por el USB desde una aplicación en un PC escrita en .NET (C# o VisualBasic).
Fijate en ese ejemplo que viene con un manual, videos y los pasos para construir la tarjeta demo que te va a servir para hacer los experimentos.
En mi caso preferí el programa del PC en Visual Basic.NET porque ya había hecho un curso de programación en ese lenguaje. El ejemplo en Visual basic está en unas páginas mas adelante, no recuerdo cual...
Después tenés que conseguir el compilador C CCS v4.114 para programar el PIC, que se hace en lenguaje C. Yo utilicé la versión 4.105 y funcionó perfectamente. (Ojo que con versiones anteriores puede no funcionar...)
Buena suerte! Saludos
 
Última edición:
Estimados amigos del Foro he leido casi todos los comentarios viendo los usos de los puertos usb, quisiera saber si me podrian ayudar, ya que tengo un proyecto, el cual es controlar un carrito por control remoto mediante la computadora, entonces mi plan es dejar el carrito sin hacerle nada y modificar solo el control, ya que solo tiene 4 direcciones Adelante, Atras , Derecha e izquierda, y eso lo quisiera manejar con un programa, actualmente estoy aprendiendo NetBeans pero veo que tiene demasiada experiencia con Visual, yo lo he usado pero no tanto, bueno regresando a mi pregunta es que si m apoyarian explicandome o enviandome como puedo lograr controlar esas cuatro direcciones con la salida USB. he leido muchos foros donde explica con puerto paralelo pero mi laptop no tiene el puerto, sin embargo tengo 4 salidas USB y quisiera que me ayudaran a como lograr manejar esas direcciones , en pocas palabras es los movimientos que hace el control realizarlo con la computadora, usando la placa del control, de hecho tiene un Pic y pienso que de ahi se podrian manejar las funciones... amigos espero me puedan orientar.. Gracias y Buenas noches

Te recomiendo que pases por este post de T!, ya que un amigo mio hizo exactamente lo que buscas :D . Luego puedes modiificar la interfaz visual a tu gusto. Aunque creo que no estan los codigos , no me he fijado.

http://www.taringa.net/posts/imagenes/13031813/Mi-robot-comandado-por-la-PC_.html

ESTE POST.....olvide poner el link
 
Atrás
Arriba