Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

16/02/2009 #121

Avatar de Moyano Jonathan

8-) Hola a todos.

Bueno siguiendo con el tema de mpusbapi.dll, veremos como utilizar las funciones usb_put_packet() y usb_get_packet(). Las cuales permiten enviar datos por el usb o recibir datos.
Bien una descripción breve de las mismas es la siguiente:
Código:
usb_put_packet(endpoint,*ptr,len,toggle) // Función completa

Vamos a ver lo que está dentro del parentesis:

1 - endpoint: Buffer de entrada o de salida (son unidireccionales) // Ya lo explique post atrás.
2 - *prt : apunta a la dirección del dato a enviar (es una variable declarada por nosotros).
3 - len: es el tamaño del paquete en bytes. (hasta 64 max)
4 - toggle:  En la parte de transmisión de datos USB, los paquetes de datos se encuentran en grupos de paquetes de datos, y dentro de estos, existen unos llamados DATA0, DATA1. hay un proceso llamado sincronización del data toggle. a grandes rasgos esto no es mas que un método de validación de paquetes, y lo que hace es enviar alternadamente a DATA0 y DATA1 en una secuencia seguido de su ACK respectivo. todo con el objetivo de mantener la sincronización transmisor <-> receptor. ver fig 1 y 2

Sumario de la función: Esta función manda un paquete de datos hacia el host, el tamaño de los paquetes de datos hay que definirlos en el programa.

por ejemplo:

#define USB_EP1_TX_SIZE    1             //  Tamaño del buffer de salida.
#define USB_EP1_RX_SIZE    3             //  Tamaño del buffer de entrada.
16/02/2009 #122

Avatar de Moyano Jonathan

Ahora para usb_get_packet():
Código:
 usb_get_packet(endpoint, *ptr, max)

el argumento 1: endpoint: es el buffer de datos de entrada, donde llega el paquete de datos.
el argumento 2  *prt: es el apuntador adonde guardaremos ese dato.
el argumento 3 max: es el tamaño de paquete en bytes.


 Siempre hay que llamar a la función USB_KBHIT() , para saber si el buffer de datos está lleno o no. En  caso  de no llamar a la función podríamos recibir datos erroneos.


 Summary: Toma un paquete de datos y lo guarda en una variable previamente declarada.
Bueno esa es la teoría para el lado del PIC , que puedo agrandar a medida que vallan apareciendo dudas.
16/02/2009 #123

Avatar de Moyano Jonathan

Para que vallan leyendo esta es la hoja de descripción de funciones MPUSBAPI.dll, el autor es slalen del foro todopic.
Archivos Adjuntos
Tipo de Archivo: pdf mpusbapidll_descripcin_de_funciones_199.pdf (103,3 KB (Kilobytes), 1235 visitas)
17/02/2009 #124


Buenas, soy nuevito en este foro, quería agradecer por el gran esfuerzo que hicieron por explicar este tema que sinceramente si bien lo comencé a estudiar hace muy poquitos días, se me está haciendo extremadamente complicado de comprender. Programo pics hace más de 10 años para empresas importantes de Argentina y manejo varios idiomas tanto a nivel pic como a nivel software pero no he encontrado una guia concisa como para poder hacer funcionar por ejemplo un PIC como un dispositivo joystick, etc. O es muy complicado el tema o la información está muy mal brindada. De este tema que crearon es de donde he comprendido la mayor cantidad de cosas y si puedo ayudar en algo lo haré ya que la información que me brindaron fue excelente. Saludos
17/02/2009 #125

Avatar de Moyano Jonathan

Bueno frickito, en lo que podamos ayudarte está bien y bievenido al foro. Mirá el tema del usb embebebido es algo bastante idocumentado por lo que he podido leer hasta ahora. Lo único que he visto más documentado son las notas de microchip y de AVR atmel, pero incluso con esa data se me hace complicado el tema del puerto usb.

Lo de hacer como vos decis que la PC reconozca al pic como un jostick , pendrive , o lo que sea es un tema complejo. Mas que nada por el lado de la programación para el pic. Yo en este momento a parte de los 3 tipos de comunicaciones por usb que he posteado hasta ahora estoy estudiando el protocolo MSD que solo hay código ejemplo en C18.
17/02/2009 #126

Avatar de Moyano Jonathan

Todos tus comentarios , dudas y proyectos lo podemos ir viendo en este hilo a ver si con el tiempo todos podemos aprender a manejar este puerto en un 100%.
17/02/2009 #127

Avatar de aguevara

Estimado Moyano, gracias por tu pronta respuesta pero insisto, tratare de reflejar mi duda un poco mas explicita.
Yo escribo el programa de la funcion que deseo realize el PIC en algun compilador (CCS por ejemplo) donde seguramente imagino existen algunas directivas para el uso de la comunicacion USB y que seran usadas segun sea la necesidad de mi programa, una vez compilado el programa, el archivo .hex lo descargo a la program memory del PIC.
Ahora en VisualBasic 6.0 escribo mi aplicacion que deseo que se ejecute en la PC y la cual es la que tendra interaccion con el PIC via el puerto USB, en esta aplicacion es donde se haran las llamadas al file MPUSBAPI.DLL para con ello establecer la comunicacion, pero este archivo DLL que originalmente no esta en windows ni en las utilerias de visual dado que es un file que se descarga del site de microchip, donde rayos lo instalo, grabo, ubico para que visualbasic haga uso de el?

Gracias de antemano y saludos

PD Si estoy en algun error corrigeme.
17/02/2009 #128

Avatar de Moyano Jonathan

- Con respecto a lo del PIC está bien ahora para usar la librería de microchip , tenés que tener el módulo de funciones , vos dirás que es esto ?. Bueno el módulo de funciones es básicamente lo que me permite trabajar con la librería mpusbapi.dll, es decir tiene todas las funciones que hay que llamar para que la comunicación se establesca. Para incluirlo en tus proyectos tenés que agregarlo.

Ahora una vez agregado tenés que ver cuales son las funciones de dicho móduo(postee un pdf que lo muestra mas arriba) y por último ver como hacer una interfaz gráfica de usuario para mandar o recibir valores desde el disposivo usb (pic)

Te pongo las inmagenes para que veas como se hace. Además te dejo la librería para visual basic.


espero que te sirva
Imágenes Adjuntas
Tipo de Archivo: jpg agregar_mdulo_3_199.jpg (11,0 KB (Kilobytes), 847 visitas)
Tipo de Archivo: jpg agregar_mdulo_2_291.jpg (34,6 KB (Kilobytes), 823 visitas)
Tipo de Archivo: jpg agregar_mdulo_155.jpg (54,4 KB (Kilobytes), 778 visitas)
Archivos Adjuntos
Tipo de Archivo: rar libreras_206.rar (29,3 KB (Kilobytes), 703 visitas)
17/02/2009 #129

Avatar de Moyano Jonathan

Ahora la mpusbapi.dll , tiene que estar en la misma carpeta donde guardes el proyecto de visual basic si no te va a dar error al tratar de ejecutar el programa.
17/02/2009 #130

Avatar de aguevara

Mi estimado Moyano mas claro ni el agua, agradezco mucho tu ayuda. Por lo pronto leere el documento de las funciones del modulo para entender bien como usarlo
17/02/2009 #131

Avatar de Moyano Jonathan

De nada aguevara, ya sabés cualquier duda consulta.
19/02/2009 #132


Hay algun libro preferentemente en castellano que me ayude a comenzar a entender este tema?, lo único que conseguí es el "USB Complete 3rd edition by Jan Axelson" que si bien parece muuuy completo y tiene 593 hojas estimo que deberia haber alguno mucho más compacto o bien algun tutorial. Les comento que con el Proteus se puede probar todas las interfases USB ya que emula una conexion como si lo conectaramos a un puerto real, genera la conexion, lo detecta y se puede interactuar. Es espectacular ya que me permite probar los proyectos sin tener que armarlos, le cargo el firmware al micro y lo ejecuto. Probé un firmware HID que permite hacer un joystick digital + 3 botones, pero me gustaria poder modificarlo para hacer que me permita ingresar datos analogicos.
19/02/2009 #133

Avatar de aguevara

Mi estimado Moyano he leido por ahi que el driver MPUSBAPI.DLL ha quedado incompatible con Windows Vista, por lo que todo tu trabajo no podria ser aplicable bajo esa plataforma.
Pero existe un archivo denominado WinBus.DLL que viene por default en Windows Vista y que ademas es compatible con Windows XP, has leido algo sobre esto?
Actualmente estoy estudiando que tipos de cambios o adecuaciones habra que hacer (si aplica) para adaptarlo a tu trabajo.

Saludos
19/02/2009 #134

Avatar de Moyano Jonathan

Si hay un archivo actualizado, ya que ya me voy a fijar como se usa. Mientras tanto habrá que usar mpsusbapi.dll. Otro tema es que no dispongo de windows vista.
20/02/2009 #135


Otra pregunta
hola de nuevo,tengo una duda, ?

ya he realizado varios jemplos usando CDC, ahora estoy probando con bulktransfer, utilizo Python para hacer las interfaces graficas y es alli donde tengo el problema.

Yo programo al pic18f4550 con un ejemplo que encontre, donde utilizan usb_init(), usb_task(), usb_wait_for_enumeration() , usb_kbit(), etc, todo se ve que funciona bien, pues al conectar el conector USB me pide el driver, lo instalo y listo, pero cuando con pyton trato de enlistar los dispositivos USB, no me aparece la información del dispositivo PID, VID, etc....

Lo raro es que tengo un mouse y este si devuelve la información del PID, VID etc, tambien tengo un programador USB este igual devuelve esa información cuando se la pido desde PYTHON,

yo he concluido pensando que desde el PIC18f450 no se envia la información, pues el ejemplo no hace eso,

Mi pregunta es, como hago para que el PIC18f4550 envie esa información?
Gracias a sus respuestas,
20/02/2009 #136

Avatar de Ardogan

En el programa del PIC ¿cambiaste el VID_PID o lo dejaste como estaba?. Si lo dejaste igual tendrías que incluir el código fuente para ver porque el PIC no envía la información.
20/02/2009 #137


adjuntare el ejemplo para que vean, la verdad soy un poco nobato en esto de USBPIC pero hay va el ejemplo que uso, y el driver. este ejemplo lo encontre en esta direccion, mirala bien para ver donde es que el microenvia a la PC el PID y el VID, ojala me puedan ayudar

http://picmania.garcia-cuervo.com/US...kTransfers.php
Archivos Adjuntos
Tipo de Archivo: h rr2_usb_monitor_399.h (6,6 KB (Kilobytes), 249 visitas)
Tipo de Archivo: c rr2_usb_monitor_155.c (4,8 KB (Kilobytes), 248 visitas)
22/02/2009 #138

Avatar de Moyano Jonathan

evvrivas, como te va. Mirá tenés mal configurados los fuses en el archivo rr2_usb_monitor.c
Los vid y pid (vendor id y product id) los envía en la librería rr2_usb_monitor.h, ahora lo que tendrías que revisar es el programa en python del cual yo no se como se usa (solo he usado visual basic). Para mi el error está donde vos intentas llamar a la mpusbapi.dll por eso no podés enviar datos.
22/02/2009 #139


Todos empezamos desde cero
Un poco acerca de mi y este tema: Hace un par de años realice una pequeña interfaz de extracción de datos y envio de estos a través de USB usando un par de pic's de la familia Pic18Fxxx5, PIC-C de CSS y C#.

En base a lo que he visto en este post, tengo algunos comentarios:
- Si bien es cierto que es un tema muy complicado, no es imposible implementarlo, así que animo.

- Moyano, es buena la información que posteas considero que has realizado un buen esfuerzo, pero no seas tan "explicito", no dejas que los demás traten, busquen y sobre todo lean... No hay que confundir la enseñanza ( o compartir conocimientos con los demas ) con darles todo tan sencillo y evitarles el esfuerzo de usar su cerebro un rato. Además a este ritmo el post se hará eterno, es mejor realizar un ejemplo "completo" y explicar sobre él varios temas, en lugar de uno por uno, los cuales muchas veces son basicos.

- Dudo que desde hace un par de años a la fecha no se hayan creado más proyectos o escrito más acerca este tema... así que lean! Desde mi punto de vista, es la mejor forma de romper las barreras, para todos los aspectos de nuestra vida. Y nos ayuda a ser autodidáctas.

No hay que olvidar que este tema está orientado a gente dedicada a la electrónica, con cierto nivel de conocimientos y habilidades. Si son estudiantes, entonces actuen como tales, no sólo hay que preguntar, también aporten. No es justo que sólo un par realicen todo el trabajo.

Salvo lo anterior, un buen Post.
Ánimo y Éxito a todos en este complicado mundo del USB.
Saludos, los seguire leyendo.
22/02/2009 #140

Avatar de Moyano Jonathan

Muchas gracias por tu comentario je_aleph, mi método de enseñanza es directo. Acá yo no miro quien es el que lee o deja de leer sino mi objetivo es que aprendan de la forma más facil posible. Ahora el que solamente se deja guiar por mis ejemplos en este post pues yo le aconsejo que investigue ya que yo no entro en profundidad sobre el usb sino que doy una mirada rápida a las funciones de control más relevantes.
El que quiera aprender realmente como es el protocolo de comunicación les recoomiendo comprar un libro como por ejemplo usb complete.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.