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

Hola Amigos!! Les cuento que estoy haciendo un programa en C# 2008 para comunicarlo con un data logger que hice para mi trabajo final de carrera de electrónica.
El tema es que recién hace una semana que empece con esto del C# y quisiera ver si alguien me puede ayudar con lo siguiente. el data logger anda por usb con emulación de puerto serie.

1_ Quisiera que se me prenda alguna luz cuando recibo datos de com port
2_Que me detecte automáticamente el pic cuando lo conecto o sino que me muestre en el index solo los puertos detectados
3_Me gustaría que se pueda guardar los datos recibidos en un archivo de texto o cvs (no tener que copiar y pegar)
4_otro problema que tengo es que quiero poner un mensaje de error cuando se pretende enviar el contenido de un textbox y el usuario no ha introducido nada o si introdujo un valor incorrecto.

Aprovecho para agradecer infinitamente a Meta que gracias a su manual pude empezar a programar en C#

Les muestro como se ve el programa en la foto
 

Adjuntos

  • panelfront.JPG
    panelfront.JPG
    77.2 KB · Visitas: 129
Última edición:
Hola a todos estaba retornando a lo de la comunicacion USB por medio del mpusbapi.dll . Corri muchos ejemplos que hay por la red y son excelentes los que aportan por este foro...pero bueno estaba queriendo hacer un sencillo programa mediante consola win32 con el vc++2008.Asi de esta manera me acostumbrare a como proceder cuando hagas mis propios programas. Use como ejemplo el PicUSBStuff en su formato de VC++ de J1M, ahi tiene el usb2550.dll que como veo adapto del mpusbapi.dll; pero tengo problemas al jalar el mpusbapi.dll origina que viene en la carpeta de microchip solution. Podria alguien ver mi programa y decirme en que me equivoco..estoy colgando el programa incluida una imagen que me muestar el error que sale.

La intension es que solo prenda algunos leds

Muchas gracias a todos.
 

Adjuntos

  • usb_consola.rar
    673.1 KB · Visitas: 249
primero que todo gracias por el aporte

lo que sucede es que necesito ayuda con un ´proyecto que desarrollo con un compañero que consiste en una manipulador robotico por medio de pc bueno con el protocolo USB y un interface grafica hecha con delphiborland.....

bueno el problema es que ya esta todo listo he simulado la aplicacion con proteus y funciona a la perfeccion sin embargo cuando lo implemento y lo conecto al puerto USB del pc el robot no hace nada es decir no funciona, no se si hay que colocar un driver especial o algo asi (por su pueto ya instale el driver virtual USB del pic y los de proteus) o talvez hay que hacer un acople, en fin no se que hay que hacer porque ya intente varias veces conectarlo al puerto y como no funciona me da miedo dañarlo.

si alguien me pudiera ayudar le agradeceria mucho.

a continuacion les dejo la imajen de las conexiones hechas en proteus y de la inteerface grafica.

http://www.imaxenes.com/imagen/simulaci_n_proteus1ea57dx.png.html
http://www.imaxenes.com/mini/simulaci_n_proteus1ea57dx.png

http://www.imaxenes.com/imagen/inte...faz_grafica_del_sistema_de_control1aa30ye.png
 
Hola jade, a primera vista te digo que la conexion de los pines vusb, v+ u estan mal, te paso foto de lo que recomienda microchip.
Por otra parte a mi si me anduvo con capacitor de 4.7u aunque se recominenda uno de 220nf y resistencia de pull up 1.5k(fijate que pusiste la la resistencia de pull up de 100k a vcc y no a v+). Espero te sirva.
Por otra parte no aclaras que tipo de coneccion usb configuraste(hid, cdc o bulk) de acuerdo a eso necesitaras distintos drivers
Saludos
Ah otra cosa, unifica todas las masas, las de usb y la del pic.
Una cosita mas , veo que usas el pin sense,acordate de deshabilitar mcrl (justo ahí lo pusiste!!)y la resistencia que va es de 100 K no de 1k acordate que el vcc del usb tira como 500mA o 300mA lo cual es mucho .
 

Adjuntos

  • usb.JPG
    usb.JPG
    31 KB · Visitas: 98
Última edición:
Hola a todos estaba retornando a lo de la comunicacion USB por medio del mpusbapi.dll . Corri muchos ejemplos que hay por la red y son excelentes los que aportan por este foro...pero bueno estaba queriendo hacer un sencillo programa mediante consola win32 con el vc++2008.Asi de esta manera me acostumbrare a como proceder cuando hagas mis propios programas. Use como ejemplo el PicUSBStuff en su formato de VC++ de J1M, ahi tiene el usb2550.dll que como veo adapto del mpusbapi.dll; pero tengo problemas al jalar el mpusbapi.dll origina que viene en la carpeta de microchip solution. Podria alguien ver mi programa y decirme en que me equivoco..estoy colgando el programa incluida una imagen que me muestar el error que sale.

La intension es que solo prenda algunos leds

Muchas gracias a todos.

Estuve viendo un poco tu ejemplo, pero por arriba porque no tengo esa versión del VC++ y no he podido abrir el proyecto.

Por lo que veo en los archivos que tienes, puede que este confundiendo la forma de tener acceso a la dll. Es algo básico para que te funcione.

Existen dos formas, una es Load-time linking y Run-time linking.
Para Load-time linking necesitas el archivo mpusbapi.lib en tu proyecto, pero esto depende del compilador que uses porque creo que la que trae microchip es para borland. Para este caso debes usar el archivo _mpusbapi.h que tiene la declaracion de las funciones. Y el mpusbapi.dll debe estar en el mismo direcorio que el archivo ejecutable.

Para el Run-time linking solo necesitas el .dll, pero para esto necesitas cargar la libreria y por ahi es mas complicado. No veo por los .cpp de tu proyecto que uses algo asi como LoadLibrary() o algo asi. Para este caso necesitas usar el archivo mpusbapi.h, fijate que no tiene el "_". Y el mpusbapi.dll no necesita estar en el mismo directorio, sino puede estar en system o system32.

La otra opcion es que uses los archivos fuentes de la dll que son _mpusbapi.cpp y el _mpusbapi.h, y no necesitas la libreria dll.

Si tienes el framework, en la siguiente ruta puedes ver unos ejemplos.
C:\Microchip Solutions\USB Device - MCHPUSB - Generic Driver Demo\PC Software

Por los errores del compiladro pareciera que es eso.
Saludos y suerte.
 
Yo solo escribi para ver mi avatar jejejeje

Jejeje en un abrir y cerrar de ojos pasaron un par de meses, desde la ultima vez que escribi, es que en mi pueblo el acceso a internet todavia es un privilegio jejejeje ya me deshaogue.
Bueno en mis ratos libres probe los ejemplos de Moyano (Gracias otra vez Moyano por tu esfuerzo y tiempo y animo por el tutorial) y otros que desarrolle programando en c de ccs para el pic y vb6 para pc, el problema surgio al programar el pic18F2550 USB, con HID por interrupcion solo envia 2 Bytes del pic a pc al igual que Alder quien escribio unas paginas atras.
Por cierto revise las funciones de las librerias que utiliza ccs pic18_usb.h, usb.h, usb_desc_hid.h, que son las mismas que se utiliza en este foro, bueno con excepcion del descriptor de strings (usb_desc_hid.h) estaran de acuerdo que no es critico para el envio de mas de 2 bytes.
Alguien logro enviar 8, 16 bytes o hasta 64 bytes
Espero comprendan el problemilla amiguirijillos jejejejej ni Flanders lo dijo mejor.
Es decir puntos criticos en el pic

#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT // Habilita endpoint 1 de salida OUT
#define USB_EP1_TX_SIZE 64 // Longitud del buffer
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT // Habilita endpoint 1 de entrada IN
#define USB_EP1_RX_SIZE 64 // Longitud del buffer

int8 in_data[64]

La pregunta es: porque no transmite mas de 2 bytes, el problema seguro que esta en alguna linea de codigo c del pic ya que tambien al programar el pic en asm pude transmitir 8 bytes con la misma aplicacion de visual basic 6 con mcHID.dll que se utiliza en este foro
Prueben a transmitir mas de 8 bytes.
Continuare realizando pruebas con otras librerias mas y a ver que onda.

Pd. No interesa si se envia 8,9,10,11 bytes o mas la cuestion es enviar bytes hasta el rango maximo que es de 64 si no me equivoco.
 
Última edición:
Hola amigos, he seguido sus articulos, experimentos Moyano gran aporte.
Estoy realizando un DataLogger y al parecer por fin he logrado transmitir mas de 2 bytes
he transmitido 8 bytes. pronto subire un ejemplo.

Saludos
 
Hola , no le hallo aun leer 5 bytes del pics , solo leo 3 hasta ahora ,osea quiero enviar en 5 bytes pero no se que significa esto
envia[1] = valor1;
envia[2] = valor2;
envia[3] = valor3;
envia[4] = valor4;
envia[5] = valor5;
usb_put_packet(1,envia,2,USB_DTS_TOGGLE);
es el numero 2 que no se para que sirve , alguien podria desasnarme

valor 1,2,3,4,5 son 5 registros del pic
 
No, no... Esa es la longitud total!! Si quieres mandar los Byte 0 y 1, solamente pondrías 2. Para el caso que puso "spiritbreaker" tendría que poner 5, para mandar los Byte 1,2,3,4 y 5... Pero no me crean mucho porque todavía no he podido probar un proyectico q tengo con USB Jeje...
Pero la Teoría es esa, sino busca en la ayuda del compilador!!! Yo lo saqué de ahí y de los mensajes anteriores en este mismo hilo... Revisen x ahí en este hilo, yo sé que da flojera pero le hace bien a todo el mundo!!! :)
 
gracias man , ese 2 se debe aumentar , asi es , ademas unoss retardos agregar en la lectura ,,, ya salio con 4bytes espero llegar a 8 ,, gracias vegetal tu pregunta resolvio mi pregunta
 
paso a paso como un niño tontito quisiera que alguien me explicara desde menos cero como coños funciona el modulo USB del pic, y como puedo establecer comunicacion HID, o donde viene bien explicado, thanks
 
Hola:

¿Aún se sigue trabajando con el manual?

Desde el 2008 que me metí en el mundo del puerto serie, ahora del puerto paralelo, tengo ganas tremenda de hacer circuitos con el USB. Cad vez veo más y más en todas partes.

Quiero hacer cosas como estas que puedes ver aquí abajo.
http://www.retrovicio.com/tutoriales/tutorial-del-pac-drive-placa-controladora-led

Claro que mi objetivo es manipular 8 Relés con el puerto USB y con Visual Stuio .net. Algo tan sencillo como eso, para mi es complicado y apenas me he metido en él ya que estoy con otros puertos. Ánimo Moyano, haber si se te sube las ganas y motivación poco a poco. Ya me encrgaré de pasarlo a Visual C# a mi manera. Después haré un manual rápido sobre como hacer un circuito de control de relés por USB.

También hay más proyectos ismples y muy bueno que he visto de USB hasta entrenadores.

http://www.neoteo.com/microingenia-y-su-entrenadora-para-18f2550.neo


Se que atrás hay ejemplos, eso si, un buen manual hace falta, casi no hago el del LPT porque tenía varios proyectos juntos y no me daba tiempo. Ahora me toca hacer otras cosas, como la mejoras del puerto serie.

Un cordial saludo.
 
paso a paso como un niño tontito quisiera que alguien me explicara desde menos cero como coños funciona el modulo USB del pic, y como puedo establecer comunicacion HID, o donde viene bien explicado, thanks

Lee el hilo completo esta todo explicado..
Saludos !

Hola:

¿Aún se sigue trabajando con el manual?

Si meta como estás. El manual se sigue desarrollando , mi motivación sigue intacta. El tema es que quiero hacer algo completo y bien pero para esto es tiempo y mas tiempo y para colmo no es el unico proyecto que tengo por eso me tardo...

Si queres empezar con lo del USB por favor lee el hilo completo y te vas a dar cuenta que esta todo lo necesario para empezar por lo menos ...en cuanto termine mi libro lo voy a postear o por lo menos sus avances pero como te digo todo lleva su tiempo y para esto del USB se necesita aprender mucho.

Saludos y felicidades por tus manuales que cada vez estan mas interesantes !
 
Atrás
Arriba