TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: J1M en 26 de Agosto de 2005, 17:35:00

Título: Proyecto PicUSB
Publicado por: J1M en 26 de Agosto de 2005, 17:35:00
Antes de comenzar querría agradecer a Mat Clayton el valiosísimo aporte de su API para C#, sin la cual estaría aún dándome cabezazos intentando entender porqué no me leía la DLL!! Gracias Mat! Dedico este proyectillo a todos los usuarios del foro TodoPIC, ese pedazo punto de encuentro para todos los PicManíacos!

PicUSB se ha realizado con la intención de proporcionar un primer empujón para todos aquellos que quieren arrancar con los diseños por USB y que como supongo que a muchos nos ha pasado, no saben por donde engancharlo!

El proyecto en sí es bastante sencillito, pretende mostrar como enviar/recibir datos por USB desde el PIC al PC, se ha intentado que el programa fuera entendible, por lo que realmente no tiene ninguna utilidad mas que como digo, servir de introducción al mundo del USB.

Se ha utilizado el grabador GTP USB Lite como ‘placa base’ para este proyectillo, ya que el funcionamiento del PicUSB se limita a encender/apagar cada uno de los colores del led bicolor y a realizar una suma de dos operandos.

El esquema de conexión del PicUSB es el mostrado en la siguiente imagen:

(http://www.hobbypic.com/images/stories/articulos/comunicacion/picusb/picusb_sch.jpg)

El proyecto consta de tres partes:

    * Programación de la aplicación para el PIC
    * Programación de la aplicación para el PC
    * Edición del driver suministrado por Microchip

Para la programación de la aplicación para el PIC se ha optado por usar el extendido compilador CCS, en concreto la versión 3.227, la primera versión que incorpora las bibliotecas para el uso del USB 2.0. El código de la aplicación se encuentra en el PicUSB_CCS.zip, así como el .hex para ser grabado en el PIC. Tanto el PicUSB.c, como el PicUSB.h están más o menos documentados en un perfecto Spanglish. El proyecto está basado en el ex_usb_scope.c suministrado por CCS como ejemplo para el compilador. Se ha decidido usar el 18F2550 pero puede usarse cualquiera de la serie 18Fxx5x que incorporan el USB 2.0.

Para la programación de la aplicación para PC se ha optado por usar el Visual C# Express 2005 (http://lab.msdn.microsoft.com/express/vcsharp/default.aspx) y puede ser descargado gratuitamente de la página de Microsoft.

En el caso de no instarse el Visual C#, para poder ejecutar el PicUSB.exe será necesario al menos, tener instalada la última versión del .NET Framework (http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&DisplayLang=en).

El código fuente se encuentra en PicUSB_VisualC#.zip, donde también se incluye funciones_dll.txt, en este se detalla el uso de las funciones contenidas en la mpusbapi.dll proporcionada por Microchip.

El último paso ha sido la edición del Driver suministrado por Microchip de tal forma que apareciera en el Administrador de Dispositivos una nueva clase con un icono personalizado. Para esto ha sido necesario crear una DLL que exporte ese icono. Se adjunta el código fuente de la DLL, PicUSB_Classinstaller.zip por si se desea recompilar para poner otro icono. Se necesita para ello la DDK (Development Driver Kit) de Microsoft, para este ejemplo se ha usado la windows_server_2003_sp1_ddk. Y el ejemplo llamado Toaster.

El Driver en sí se encuentra en PicUSB_Driver.zip, donde pueden ser modificados varios apartados, aunque quizá los mas útiles son los Strings y PID&VID.

Al conectar el PicUSB por primera vez, aparecerá el asistente para la instalación de nuevo hardware, se marca la opción de "instalar desde una lista o ubicación específica", se pincha sobre siguiente y en la siguiente pantalla se marca la opción de "Buscar el controlador más adecuado en estas ubicaciones", se pincha sobre "Incluir esta ubicación en la búsqueda" y a continuación sobre Examinar, entonces se selecciona la carpeta PicUSB_Driver, y se le da a Aceptar, y a Siguiente, aparecerá entonces una pantalla de advertencia, se hace clic sobre aceptar, y la instalación del Driver estará terminada, el led del PicUSB habrá pasado de estar rojo a verde y estará listo para ser usado.

Si todo ha ido bien, en el Administrador de Dispositivos debe aparecer algo así:

(http://www.hobbypic.com/images/stories/articulos/comunicacion/picusb/picusb_drv.jpg)

Dentro del PicUSB_APP.zip se puede encontrar la aplicación PicUSB.exe así como la dll necesaria, suministrada por Microchip. El funcionamiento es sencillo:

(http://www.hobbypic.com/images/stories/articulos/comunicacion/picusb/picusb_pgm.jpg)

En la parte superior se encuentra el sumador, si se introduce un número del 00 hasta el 99 en cada uno de los sumandos y se pincha sobre PIC Suma!, estos dos operandos serán enviados al PIC, donde se procesará la suma, devolviendo entonces el resultado que se mostrará en la tercera casilla. Por otro lado los botones, Leds Off, Led Verde On y Led Rojo On, envían el código correspondiente al PIC para cada uno de los casos y actúa en consecuencia. Al hacer clic sobre la imagen se abrirá vuestro explorador web por defecto para llevaos a mi página HobbyPIC

Para programar el PIC se recomienda usar el WinPIC800 (http://www.winpic800.com) creado por Sisco.

DOWNLOAD (http://www.hobbypic.com/)

ACTUALIZACIÓN:
El proyecto se ha actualizado para dar soporte a Windows Vista x32/x64, además de mantener la 'retrocompatibilidad' con Windows XP, visita el nuevo artículo llamado PicWinUSB pinchando sobre la siguiente imagen:

(http://www.hobbypic.com/images/stories/articulos/comunicacion/picwinusb/PicWinUSB_App.jpg) (http://www.hobbypic.com/)

Para cualquier duda o pregunta: hobbypic@hotmail.com
 
Jaime Fernández-Caro Belmonte - J1M
..:: www.HobbyPIC.com ::..
Título: RE: Proyecto PicUSB
Publicado por: lord_10 en 26 de Agosto de 2005, 20:08:00
Orale muy buena aplicación para empezara usar el USB.....mis mas sinceras felicitaciones pana JIM  Giño Sonrisa GiganteRebotado  
Título: RE: Proyecto PicUSB
Publicado por: wqtrp en 26 de Agosto de 2005, 21:44:00
hola J1M, muy bueno esto y me intereso el tema y estoy empezando con USB, al ver el programa picUSB.c noto q no tengo los siguientes archivos

#include <pic18_usb.h>    
#include <PicUSB.h>       
#include <usb.c>      

estoy usando la version 3.218 y vos la 3.227, imagino q la diferencia viene por ese lado. por donde podria conseguir esa version como para poder utilizar tus programas?

Gracias.
Título: RE: Proyecto PicUSB
Publicado por: Nocturno en 27 de Agosto de 2005, 00:22:00
Enhorabuena por conseguirlo y gracias por compartirlo, Jaime.
Título: RE: Proyecto PicUSB
Publicado por: RaDoN en 27 de Agosto de 2005, 04:20:00
Estupendo J1M !!! Gracias por compartirlo, aver que desarmo para conseguir el conector usb AvergonzadoAvergonzadoAvergonzado
Título: RE: Proyecto PicUSB
Publicado por: J1M en 27 de Agosto de 2005, 04:37:00
Los que no os descargueis esta version del Visual C#, necesitareis tener instalada la última version del .NET Framework, para poder ejecutar el PicUSB.exe, aquí lo podeis descargar:
http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=7abd8c8f-287e-4c7e-9a4a-a4ecff40fc8e

gracias por el aviso dani Giño
Título: RE: Proyecto PicUSB
Publicado por: wqtrp en 27 de Agosto de 2005, 06:58:00

Gracias J1m, la verdad q me asombra lo sencillo y util del programita
            y ademas ya consegui la version 3.227

dos preguntas para quien sepa algo mas de USB

1. si yo tengo mi propia placa ya alimentada con 5 volts, como deberia ser la conexion de los 5 volts del host?
  los dejo sin conectar y solo conecto las masas?
  es necesario consumirle algo de corriente a los 5v del host con una resistencia por algun motivo?

2. la conexion de las señales D+ y D- es directa pin a pin? es peligroso invertirlas?

Gracias a todos.
Título: RE: Proyecto PicUSB
Publicado por: RaDoN en 27 de Agosto de 2005, 07:11:00
Yo conectaria las masas, y los 5V del USB, a una resistencia de 1 ohm por ejemplo y luego a los 5V que ya tenia la placa. Así las pequeñas diferencias se las "come" la resistencia.
Título: RE: Proyecto PicUSB
Publicado por: J1M en 27 de Agosto de 2005, 07:35:00
wqtrp te digo lo que hacen los de Microchip en la placa de desarrollo PICDEM, puedes ver aquí el datasheet:
http://ww1.microchip.com/downloads/en/DeviceDoc/51526a.pdf

Ellos unen las masas, tanto la de, en este caso, tu placa ya alimentada, con la del USB, y los 5v del usb (VUSB), lo ponen a masa con un condensador de 470nF.

Por invertirlo... no creo q pase nada... simplemente supongo q no funcionará, mejor no pruebes Avergonzado

Saludos!
Título: RE: Proyecto PicUSB
Publicado por: wqtrp en 27 de Agosto de 2005, 07:37:00
lo q no se es si el host usb detecta la coneccion de un circuito  por sonsumo de corriente, con lo cual debo conectar los 5 volts del host en mi circuito a una resistencia para q consuma algo y asi detecte la conexion o si detecta la coneccin por transmision de datos, con lo cual no necesitaria coneccion de los 5 volts del host

Gracias
Título: RE: Proyecto PicUSB
Publicado por: J1M en 27 de Agosto de 2005, 07:50:00
nop, el PC no lo detecta de esa forma, o al menos q yo sepa, sino los de Microchip no lo hubieran conectado así... quien sí detecta conexión al PC es el PIC, en el caso de que hagamos una rutina específica para cuando "lo enganchemos" al PC... puedes ver como hacerlo en el PicUSB.c

Codigo:

/////////////////////////////////////////////////////////////////////////////
//
// If you are using a USB connection sense pin, define it here.  If you are
// not using connection sense, comment out this line.  Without connection
// sense you will not know if the device gets disconnected.
//       (connection sense should look like this:
//                             100k
//            VBUS-----+----/////----- (I/O PIN ON PIC)
//                     |
//                     +----/////-----GND
//                             100k
//        (where VBUS is pin1 of the USB connector)
//
/////////////////////////////////////////////////////////////////////////////
//#define USB_CON_SENSE_PIN PIN_B2  //CCS 18F4550 development kit has optional conection sense pin

Título: RE: Proyecto PicUSB
Publicado por: wqtrp en 27 de Agosto de 2005, 08:11:00
claro, pero cuando nosotros enchufamos un circuito usb al host, este comienza todo un proceso, el tema es como el host detecta esta conexion...

pero ya esta, el capacitor lo segun la especificacion de microchip debe ser de 100nF y en muchos lugares encntre q poneen un electrolitico asi q pondre un electroliticoo y listo,
ademas para la primer prueba no voy a conectar los 5v del hoost a nada y

que salga loo q deba salir....

Gracias y seguimos....
Título: RE: Proyecto PicUSB
Publicado por: J1M en 16 de Septiembre de 2005, 14:46:00
he retocado el .inf para que en el administrador de dispositivos para q no aparezca dentro de "otros dispositivos" y utilize otro icono distinto al ? ese amarillo... a ver si averiguo como ponerle un icono propio (le he puesto un conector usb xD), y algun que otro retoke pq iba con algun fallito, esto q os pongo es el .inf que debereis modificar del driver.

Saludos!

Codigo:

[Version]
Signature=$CHICAGO$
Class=%ClassName%
ClassGuid={4D36E911-E325-11CE-BFC1-08002BE10318}
Provider=%MFGNAME%
DriverVer=08/26/2005,1.0.0.0

[Manufacturer]
%MFGNAME%=DeviceList

[DestinationDirs]
DefaultDestDir=10,System32Drivers

[SourceDisksFiles]
mchpusb.sys=1
wdmstub.sys=1

[SourceDisksNames]
1=%INSTDISK%,,,

[DeviceList]
%DESCRIPTION%=DriverInstall,USBVID_04D8&PID_0011

;------------------------------------------------------------------------------
;  Class section
;------------------------------------------------------------------------------

[ClassInstall32]
Addreg=PicUSBClassReg

[PicUSBClassReg]
HKR,,,0,%ClassDesc%
HKR,,Class,,%ClassName%
HKR,,Icon,,-21

;------------------------------------------------------------------------------
;  Windows 2000/XP Sections
;------------------------------------------------------------------------------

[DriverInstall.ntx86]
CopyFiles=DriverCopyFiles

[DriverCopyFiles]
mchpusb.sys,,,2

[DriverInstall.ntx86.Services]
AddService=PicUSB,2,DriverService

[DriverService]
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%10%system32driversmchpusb.sys

;------------------------------------------------------------------------------
;  Windows 98/Me Sections
;------------------------------------------------------------------------------

[DriverInstall]
AddReg=DriverAddReg
CopyFiles=DriverCopyFiles,StubCopyFiles
DriverVer=08/26/2005

[DriverAddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,"wdmstub.sys,mchpusb.sys"

[StubCopyFiles]
wdmstub.sys,,,2

;------------------------------------------------------------------------------
;  String Definitions
;------------------------------------------------------------------------------

[Strings]
MFGNAME="J1M PicUSB"
INSTDISK="PicUSB Device Driver Disc"
DESCRIPTION="PicUSB"
ClassName="PicUSB Sample Device"
ClassDesc="PicUSB Device"

Título: RE: Proyecto PicUSB
Publicado por: josemyzm en 18 de Septiembre de 2005, 08:05:00
En Microsoft he encontrado un ejemplo de como incluir 2 iconos para mostrar el estado del dispositivo (permite tomar los iconos desde un fichero)

Espero que te sea de utilidad




He quitado el texto porque las líneas eran muy largas y se hacia dificil de leer.
En el mensaje siguiente está el enlace.





Título: RE: Proyecto PicUSB
Publicado por: josemyzm en 18 de Septiembre de 2005, 08:07:00
El enlace para poder leerlo mejor:
http://www.microsoft.com/whdc/driver/install/devicons.mspx#EBAA

Título: RE: Proyecto PicUSB
Publicado por: J1M en 18 de Septiembre de 2005, 12:23:00
gracias por la info josemyzm, ya habia visto eso y así tal cual no se puede usar, estoy ahora con el windows_server_2003_sp1_ddk ... ya q todo pasa por crear una DLL y usarla desde el .inf, dentro del ddk hay un ejemplo de como crear la funcion ClassInstall necesaria para q se pueda acceder al instalador d la DLL para extraer los iconos... no se si me explicado del todo pero vamos... q espero en un par de dias poneos x aki el código en VC++ para la DLL y el nuevo .inf

saludos Giño


pd: podrias editar el primer post xa q no deforme el tema??? esq es un tanto putada leerlo así xDDD

graciasRebotadoSonrisa Gigante
Título: RE: Proyecto PicUSB
Publicado por: josemyzm en 18 de Septiembre de 2005, 14:26:00
Por cierto J1M, has puesto un ejemplo para que el PIC detecte la conexión al PC, mediante la detección de los 5V que suministra el USB, correcto.  Pero es necesario colocar la otra resistencia de 100K entre VBus y GND??

Un saludo

Título: RE: Proyecto PicUSB
Publicado por: J1M en 18 de Septiembre de 2005, 14:32:00
Gracias por editar el post Giño

Si, las dos resistencias son necesarias, yo aún no he probado la detección de conexion del cable, asiq no te lo puedo decir por experiencia, pero sí por el gráfico q muestran los de CCS (está un pokito deformado, se puede ver bien en el .C)

Saludos!
Título: RE: Proyecto PicUSB
Publicado por: pendexgabo en 29 de Septiembre de 2005, 08:05:00
Buenas..
basandome en el proyecto de J1M (que particularmente me ayudo mucho.. muchas gracias) y en los ejemplos de microchip, empecé a ver si se podia hacer algo. mi idea es conectar un LCD a un 18f2550 y a travez de la PC enviarle los datos que quiero que se muestren en el LCD. en principio estoy realizando la aplicación para el host en C++ (utilice este lenguaje porque la pude encontrar varios ejemplos ).

ahora me surgen ciertas dudas que no interfieren con el proyecto pero que me gustaria resolver: en el caso de que tuviera mas de un dispositivo del mismo tipo, como hago para enviarle información al que yo deseo (por lo que estuve leyendo, uno puede saber la cantidad de dispositpvos conectados tenidendo el vID (vendor ID) y el pID (product ID) que le defini en el pic, pero esto no me distingue entre dos dispositivos iguales.

otra cosa: como debería hacer para que al pulsar un switch en el pic el host lo detecte? debe haber algun método por interrupciones, ya que si lo hago por polling tendría al host moy ocupado de gusto..

bueno, en cuanto tenga algo listo se los envio

estoy utlizando

C++ 6 Builder
CCS 2.227
y la famosa mcpusbapi.dll con los ejemplos de la misma

saludos
Título: RE: Proyecto PicUSB
Publicado por: J1M en 30 de Septiembre de 2005, 04:06:00
hola pendexgabo,

Respecto a como hacer diferencia entre dispositivos con el mismo vid y pid, en el funciones_dll.txt tienes la respuesta, te pego aquí la parte que te interesa:

///////////////////////////////////////////////////////////////////////////////
//   MPUSBGetDeviceCount : Returns the number of devices with matching VID & PID
//
//   Note that "input" and "output" refer to the parameter designations in calls
//   to this function, which are the opposite of common sense from the
//   perspective of an application making the calls.
//
DWORD _MPUSBGetDeviceCount(string pVID_PID);

///////////////////////////////////////////////////////////////////////////////
//   MPUSBOpen : Returns the handle to the endpoint pipe with matching VID & PID
//
//  All pipes are opened with the FILE_FLAG_OVERLAPPED attribute.
//  This allows MPUSBRead,MPUSBWrite, and MPUSBReadInt to have a time-out value.
//
//  Note: Time-out value has no meaning for Isochronous pipes.
//
//  instance - An instance number of the device to open.
//             Typical usage is to call MPUSBGetDeviceCount first to find out
//             how many instances there are.
//             It is important to understand that the driver is shared among
//             different devices. The number of devices returned by
//             MPUSBGetDeviceCount could be equal to or less than the number
//             of all the devices that are currently connected & using the
//             generic driver.
//
//             Example:
//             if there are 3 device with the following PID&VID connected:
//             Device Instance 0, VID 0x04d8, PID 0x0001
//             Device Instance 1, VID 0x04d8, PID 0x0002
//             Device Instance 2, VID 0x04d8, PID 0x0001
//
//             If the device of interest has VID = 0x04d8 and PID = 0x0002
//             Then MPUSBGetDeviceCount will only return "1".
//             The calling function should have a mechanism that attempts
//             to call MPUSBOpen up to the absolute maximum of MAX_NUM_MPUSB_DEV
//             (MAX_NUM_MPUSB_DEV is defined in _mpusbapi.h).
//             It should also keep track of the number of successful calls
//             to MPUSBOpen(). Once the number of successes equals the
//             number returned by MPUSBGetDeviceCount, the attempts should
//             be aborted because there will no more devices with
//             a matching vid&pid left.



Bien te explico un poco, para empezar tienes que llamar a esta funcion:

_MPUSBGetDeviceCount(string pVID_PID)

donde pVID_PID = vid_04d8&pid_0011;

esa función te devolverá un valor entero (DWORD) dependiendo del número de dispositivos encontrados con el mismo vid y pid; Si como preguntas tienes dos dispositivos conectados, el valor deberá ser 2. Si es así entonces (y aquí es donde tengo una pequeña duda de como enumerarlos) a la hora de llamar a la funcion:

_MPUSBOpen (DWORD instance, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved);)

deberás elegir el dispositivo que quieres "controlar" seleccionandolo con "instance" el cual tomará un valor entero dependiendo de la numeración que tenga el dispositivo y ahora viene el problema, como saber como los ha enumerado el sistema operativo?? imagina que en vez de dos dispositivos (este caso quizá sea facil...) tenemos tres (dos iguales y uno diferente a ellos), pudiendo haber sido enumerados así:

Device Instance 0, VID 0x04d8, PID 0x0001
Device Instance 1, VID 0x04d8, PID 0x0002
Device Instance 2, VID 0x04d8, PID 0x0001

Como ves, tenemos los device 0 y 2 iguales, y el 1 distinto a estos. Esto es debido a que los 3 usan el mismo driver...

Para hacer distincion entre los dispositivos iguales simplemente tendriamos que llamar a la funcion open de la siguiente forma:

- Para el dispositivo 0
_MPUSBOpen (0, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved);) (esto es lo q yo tengo hecho en el ejemplo, ya que doy por supuesto de q solo va a haber un PicUSB conectado al PC)
- Para el dispositivo 2
_MPUSBOpen (2, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved);)

Pero claro, aquí está el problema... como he dicho antes... como saber como los ha enumerado el sistema operativo???

Si solo tenemos dos dispositivos y ademas son iguales, usando el mismo driver tendríamos esto:

Device Instance 0, VID 0x04d8, PID 0x0001
Device Instance 1, VID 0x04d8, PID 0x0001

Aquí no habría ningun problema (que es lo q tu preguntabas realmente ;))

- Para el dispositivo 0
_MPUSBOpen (0, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved);)
- Para el dispositivo 1
_MPUSBOpen (1, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved);)

De todas formas esto no lo he probado, asiq no te puedo garantizar 100% q funcione... cuestion de hacer pruebas ;)


Respecto a tu segunda pregunta:

Pon ese switch en una pata con interrupción externa, como puede ser RB0... cuando entres en la rutina de interrupción de esa pata, haz lo q tengas que hacer con el USB. Así el PIC en su estado "normal" no estará pendiente de ese Switch ni el HOST de la información por USB, ya q no estará activo.

Saludos ;)
Título: RE: Proyecto PicUSB
Publicado por: J1M en 03 de Octubre de 2005, 08:02:00
Wenas os dejo por aquí el Driver modificado para el PicUSB.

La modificación consiste en añadir en el Administrador de Dispositivos del Panel de Control una clase (ya no aparecerá dentro de Otros Dispositivos...) con un Icono Personalizado (se acabó lo del simbolo de exclamación feo Vacilando)

http://perso.wanadoo.es/j1m/varios/driverdll.zip

Dentro del .zip encontrareis dos archivos:

- driver.zip : El driver en sí, no lo he probado con Windows98 solo con el XP, si alguien tiene aún ese sistema operativo que me diga como va la cosa...

- classinstaller.zip : Encontrareis el Código Fuente para crear la DLL necesaria para añadir el icono personalizado al Administrador de Dispositivos. De esta forma podreis cambiar el Icono (q mirad mirad q bonico me ha kedao ^^ jejeje), la clase que exporta, etc. Para poder compilarla necesitais las DDK (Development Driver Kit) de Windows XP ó 2k3, yo he utilizado esta: windows_server_2003_sp1_ddk.iso Angelito

Os dejo una imagen de lo q os debería aparecer en el Administrador de Dispositivos si todo se ha instalado bien.


Y bueno para cualquier duda por aquí andamos.

Saludos Giño
Título: RE: Proyecto PicUSB
Publicado por: pendexgabo en 03 de Octubre de 2005, 08:57:00
J1M impresionante macho jaja. muy buen trabajo, gracias por la explicacion de arriba, cuano tenga alguna novedad te voa a comentar como va esto.
te tengo una consulta, el windows_server_2003_sp1_ddk.iso lo bajaste de la mula? porque lo busque por el download de microfuck y no lo encontre..

bueno gracias y saludos!!!

gabriel
Título: RE: Proyecto PicUSB
Publicado por: J1M en 03 de Octubre de 2005, 14:15:00
sip, esq es muy cara y para lo q iba a hacer............. RollEyes

saludos! Giño
Título: RE: Proyecto PicUSB
Publicado por: GJM2000 en 18 de Octubre de 2005, 20:42:00
invasor Estoy un poco atrazado, dónde puedo conseguir el CCS v. 3.227 o superior???
Yo tenía una versión que no sé dónde quedó y no lo encuentro en la web.
Gracias

gerardomenta@hotmail.com
gerardomenta@yahoo.com.ar

Título: RE: Proyecto PicUSB
Publicado por: Nocturno en 18 de Octubre de 2005, 23:42:00
Lo puedes conseguir aquí: http://www.ccsinfo.com/ccscorder.shtml

Estos son los precios:
PCB Compiler for 12-bit parts - $125
PCM Compiler for 14-bit parts - $125
PCH Compiler for PIC18 parts - $175
Integrated Development Environment


PCW Professional Package (Both PCB and PCM) - $350
PCWH Professional Package (PCB, PCM and PCH) - $425
PCH Add-on for existing PCW users - $75
Coming Soon: dsPIC
Título: RE: Proyecto PicUSB
Publicado por: BAFAN en 25 de Octubre de 2005, 09:58:00
Hola tengo una duda del programa que utiliza el PicUSB (el Visual C#).
Mi duda es como cojer los datos por interrupcion. O sea, estar haciendo cualquier otra cosa en el programa de C# y cuando el PIC mande los datos me cree una interrupcion en el programa y yo ya coja los datos y los trate.  En el pic ya lo tengo hecho pero me falta saber como hacerlo en el PC.
Si sabeis como hacerlo seria d gran ayuda muuuuchas gracias.Angelito
Un saludoGiño
Título: RE: Proyecto PicUSB
Publicado por: alesaurio en 29 de Octubre de 2005, 22:56:00
saludos yo ya consegui el ccs 3.227 en el emule, pero me pidio unos archivos para registrar el programa, no los tenía pero igual finalizé la instalación... pero tengo un problema no puedo compilar ningun archivo, se debe a que no tenia los archivos mencionados? es decir debo necesariamente comprar el ccs? existe alguna solucion?
Título: RE: Proyecto PicUSB
Publicado por: Flugplatz en 03 de Noviembre de 2005, 10:40:00
Hola a todos ...

J1M ... este es un tema muuyyy interesante y seguramente gracias a este fenomenal proyecto muchos podremos empezar a usar el tema del USB basado en microcontroladores Pic.

Yo tengo muchas ideas y efectivamente, segun presentas este topic, una compilacion de la base necesaria para empezar a implementar circuitos con USB, es una excelente idea. Yo me he mirado el tema cien veces, pero entre que todo esta en ingles, y que la cosa es bastante compleja, es extraordinariamente dificil empezar a trabajar con PIC y USB.

Aparentemente, y siguiendo tu proyecto, creo que esta vez si que voy a conseguir aclararme con el asunto.

No dudeis en que si consigo algo, lo expondre claramente en este estupendo foro.

Un saludo

Mario

PD: Segun escribo esto ... dia 3 de Noviembre de 2005 a las 17:35 (hora de Madrid) parece que los de Wanado se han cepillado tu pagina, y por lo tanto, no he podido ver los archivos que se necesitan para empezar.
Título: RE: Proyecto PicUSB
Publicado por: J1M en 04 de Noviembre de 2005, 04:09:00
Ya vuelve a estar online, parece que fue un fallo de wanadoo... me alegro que te haya servido para "exar a andar"

saludos Giño
Título: RE: Proyecto PicUSB
Publicado por: Flugplatz en 04 de Noviembre de 2005, 05:27:00
Gracias Mil ... don Jaime F (si me permites llamarte por tu nombre) Sonrisa

Este topic es como una bomba de relojería ... Sonrisa. Seguro que a partir de él y tu prometedor proyecto va a surgir una verdadera Brainstorm ...

Tengo un montón de ideas para el USB, y cuando consiga implementarlo no dudéis en que voy a poner todo lo que vaya deduciendo por aquí. Me parecéis todos una gente verdaderamente acojonante, y aunque yo soy mayor, gente como vosotros hace que aun tenga algo de esperanza sobre la capacidad del ser humano.

un saludo

Mario
Título: RE: Proyecto PicUSB
Publicado por: Flugplatz en 04 de Noviembre de 2005, 05:42:00
Por cierto ...

En casa no tengo nada  instalado, pero en el trabajo tengo el Visual Studio 6, de hecho es con lo que trabajo, así que, ya que aqui no puedo, es un buen momento para dar el salto, al menos en casa e instalar el Visual Studio 2005.

Tengo dos versiones del DVD de Visual Studio 2005:

Standard Beta2 (original Microsoft - creo que la del enlace)
Express Editions Beta2 (me venía en un PC Actual)

Me imagino que dara igual, ya que no hay acceso a datos y esas cosas, pero.

¿cual de las dos pongo?

Otra cosilla ... al ser entorno Visual Studio, me imagino que las DLLs valdran para cualquiera de sus variantes, asi que lo mas probable, es que intente hacer, al menos las aplicaciones de consola, en Visual Basic, ya que lo domino bastante mejor que el C# ...
Título: RE: Proyecto PicUSB
Publicado por: BAFAN en 04 de Noviembre de 2005, 06:06:00
Si consigues hacer q funcione en Visual basic lo del USB ya me cuentas pq yo he intentado con algunas librerias d USB de Visual Basic y no consigo q comunique...
Use el EasyHid q ya te crea todo el proyecto de Visual Basic para USB donde solo tienes q ponerle el VID y el PID pero no he conseguido q funcione.
Bueno un Saludo.
Título: RE: Proyecto PicUSB
Publicado por: J1M en 04 de Noviembre de 2005, 06:22:00
Gracias por los comentarios flugplatz... tampoco es para tanto! Sonrisa

Bueno al tema, respecto a tu duda, yo tengo instalada la version Visual Express C# Beta 2 ... vamos la q te venía en el cd de la revista, yo me lo bajé de la página de MS pero creo q es la misma que la q tu comentas. La original de MS supongo q tendrá ejemplos y alguna cosilla extra, pero vamos, mas de lo mismo e igual de funcional.

Si vas a trabajar en Visual Basic, simplemente tienes que adaptarte la API de VC# a VB, no tienes que hacer ningun cambio en la DLL de microchip (aunq ellos suministran el código fuente para BC++ por si necesitaras modificar algo).

BAFAN este proyecto no está preparado para trabajar en modo HID, sino con la DLL de microchip, son dos cosas distintas... por eso no te funciona, lo q tienes q hacer es como le he dicho a flugplatz, adaptar la API de VC# a VB y entonces podras hacerlo andar sin problemas Giño

pd: la API es la "libreria" que contiene las funciones para utilizar la DLL.


s2!

EDITO: Quizá tengas razon respecto a lo del entorno Visual Studio, algo he escuchado (pero no estoy demasiado puesto en temas de programación para PC...) creo q si tienes instalada la Suite al completo puedes añadir la API de VC# a VB y el solito te lo arregla todo para que sea compatible y de forma automatica... no lo he probado x lo q no te puedo asegurar q funcione... xo si q "podría ser" Giño
Título: RE: Proyecto PicUSB
Publicado por: J1M en 19 de Noviembre de 2005, 18:19:00
BAFAN, encontraste lo de las interrupciones??, aquí te dejo este link por si te pudiera servir, creo q necesitas tener una cuenta para bajarte el video tutorial, pero a partir de ahí supongo q puedes encaminar tu buskeda un poco... (es el ejemplo 3)
http://www.learnvisualstudio.net/videos/Visual_CSharp_2005_Express_Edition_for_Beginners.htm

edito: aunq siempre puedes hacer una buskeda rápida en el google y que te de un link xD
http://lab.msdn.microsoft.com/express/beginner/

Por otro lado Microsoft sigue con la politica de ofrecer sus productos gratis (esperemos que dure por mucho tiempo y no solo sea otra estrategia de marketing mas...)

Aquí teneis el Visual C# Express 2k5 Final
http://msdn.microsoft.com/vstudio/express/visualCsharp/default.aspx

Los que tengais la beta2 desinstalar todo lo relacionado con ella (visual, msdn, net framework) antes de instalar este nuevo.

saludos!
Título: RE: Proyecto PicUSB
Publicado por: BAFAN en 20 de Noviembre de 2005, 05:00:00
Buenas. Gracias por la informacionGiño, lo mirare a ver q sako en claro. Lo de las interrupciones del PC lo tenia d momento estancado. Pero las interrupciones del PIC ya las he sakao y funcionan muy bien, por si os interesa mirar el fichero Pic18_usb.h en la funcion void usb_isr_tok_dne() en la comparacion
 if (!bit_test(USTAT,2)) {
            bit_set(__usb_kbhit_status,en);
//****************************************
             usb_get_packet(1,datoRX,10);      // aki es donde coges los datos del USB
       //printf("DAto_USB: %X",dat_usb[0]);// para ver por puerto serie q dato coges
//***************************************
        }
asi he conseguido coger datos del USB por interrupcion.
Bueno pues gracias por tu informacion seguire mirando a ver si consigo hacer lo mismo en el PC, y si lo encuentro ya os lo comento.
Muchas gracias J1M a ver si entre los dos sakamos el maximo jugo al USB jejeGiño
Título: RE: Proyecto PicUSB
Publicado por: RaDoN en 20 de Noviembre de 2005, 08:03:00
Estado trasteando con los directores, alguien sabe como cambiarel campo donde dice "Ubicación", me salen simbolos raros loco
Título: RE: Proyecto PicUSB
Publicado por: RaDoN en 20 de Noviembre de 2005, 12:21:00
Me refiero a esto:

Título: RE: Proyecto PicUSB
Publicado por: J1M en 20 de Noviembre de 2005, 13:09:00
Comprueba bien esta parte:

//////////////////////////////////////////////////////////////////
///
///   start string descriptors
///   String 0 is a special language string, and must be defined.  People in U.S.A. can leave this alone.
///
///   You must define the length else get_next_string_character() will not see the string
///   Current code only supports 10 strings (0 thru 9)
///
//////////////////////////////////////////////////////////////////

//the offset of the starting location of each string.
//offset[0] is the start of string 0, offset[1] is the start of string 1, etc.
const char USB_STRING_DESC_OFFSET[]={0,4,12};

#define USB_STRING_DESC_COUNT sizeof(USB_STRING_DESC_OFFSET)

char const USB_STRING_DESC[]={
   //string 0
         4, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         0x09,0x04,   //Microsoft Defined for US-English
   //string 1 --> la compañia del producto ???
         8, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         "J",0,
         "1",0,
         "M",0,
   //string 2 --> nombre del dispositivo
         22, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         "J",0,
         "1",0,
         "M",0,
         " ",0,
         "P",0,
         "i",0,
         "c",0,
         "U",0,
         "S",0,
         "B",0
};

Está al final del PicUSB.h ... algo has cambiado que lo has dejado malamente Rebotado

configura bien el offset
USB_STRING_DESC_OFFSET[]
y los lenght...

estoy casi seguro q el fallo está en alguno de esos dos lados...

saludos! Giño
Título: RE: Proyecto PicUSB
Publicado por: RaDoN en 20 de Noviembre de 2005, 15:14:00
Pues no, me acabo de dar cuenta que con tu hex tb lo hace ... se pone un poco tontorron el win creo yo. He provado a desinstalar el controlador e igual ... loco

Pues sí lo conformo, paranoyas del win, va tocando formatear porque el portatil no lo hace.

P.D.: puedes explicarme como van las longitudes, no entiendo porque 8 ó 22 por ejemplo.
Título: RE: Proyecto PicUSB
Publicado por: J1M en 21 de Noviembre de 2005, 05:36:00
Respecto al fallo, una vez desinstalado el dispositivo, prueba a borrar la clave del registro, despues lo vuelves a instalar a ver si hay suerte.

Lo de las longitudes del string va, dicho de forma rápida:

(longitud_string+1)*2 => j1m => (3+1)*2 = 8

lo del offset va:

offset para el string 0 = 0; // string 0 tiene un length de 4 por lo que..
offset para el string 1 = 4; // string 1 tiene un length de 8 por lo que..
offset para el string 2 = 12; //8+4 Vacilando

saludos!
Título: RE: Proyecto PicUSB
Publicado por: RaDoN en 21 de Noviembre de 2005, 08:43:00
Thanks you very much Sonrisa Gigante
Título: RE: Proyecto PicUSB
Publicado por: Artifox en 21 de Noviembre de 2005, 14:15:00
Hola, tengo una duda, quiero adicionar un pequeño circuito para recibir señales analogicas, para eso pensaba aunmentarle una fuente, para no tener problemas con la corriente del USB, pero aun no me queda claro como conectarlo al circuito.

Estuve revisando el pdf que recomendaste revisar y estuve viendo el esquematico y note que lo hacen por intermedio de un mosfet, realmente es necaesario el mosfet o se puede cambiar por otro circuito??

Creo que estoy algo confundido con esoloco.... Gracias
 
Sonrisa Gigante
Título: RE: Proyecto PicUSB
Publicado por: 5GTT en 24 de Noviembre de 2005, 17:47:00
Estoy ciego o sera la hora, pero no encuentro por la web de microchip la libreria ni nada relacionado con ella. Me puede alguien orientar?

De todas formas mañana mirare de nuevo.

Título: RE: Proyecto PicUSB
Publicado por: 5GTT en 27 de Noviembre de 2005, 19:17:00
Vale... perdon por preguntar tonterias xD, si es un perro me come y ni me entero
Título: RE: Proyecto PicUSB
Publicado por: Artifox en 05 de Diciembre de 2005, 16:35:00
Hola nuevamente... molestandolos una vez mas... yo tambein estoy intentando aprender a usar el modulo USB... ya tengo el hardware, que me funciono bien con los archivos de J1M. Hasta aca ningun problema... mi problema es que quiero ahcer lo mismo en Visual C++ 6.0 y no tengo ni idea de como leer la dll que esta en el zip...

Por otro lado he visto el dll que viene en el EasyHID, que genera archivos para Visual Basic y Visual C... pero no entiendo el que esta en C...

No se si me pueden hechar una mano... Cabe recalcar que recien estoy aprendiendo a programar en Visual C++...Giño

A ver si me pueden ayudar con eso... y si no... por lo menor un link donde encontrar info acerca de como linkear los dll"s y como usarlos.

Un abrazo Sonrisa Gigante
Título: RE: Proyecto PicUSB
Publicado por: 5GTT en 06 de Diciembre de 2005, 15:57:00
Artifox estoy intentandolo tambien yo con Visual c++.  Para usar la libreria tienes que compilarla con el Visual C++ antes de nada, para que te genere un archivo .lib ya que el que viene solo sirve para Borland.

Despues con este archivo .lib nuevo y con la dll que trae ya puedes hacer tu proyecto.

En mi caso estoy intentando conseguirlo, pero me da unos errores muy raros con la funcion Openpipes, se me para el programa y sale un cuadro de dialogo de error.

Título: RE: Proyecto PicUSB
Publicado por: J1M en 06 de Diciembre de 2005, 19:12:00
Antes de nada, perdonad por no haber respondido antes, estoy con los papeleos de la entrega del proyecto fin de carrera y es un follon!

Con respecto a la librería para Visual C++, mira en esta página:

http://pic18fusb.online.fr/wiki/wikka.php?wakka=CustomCom

Concretamente en:

http://forum.microchip.com/tm.asp?m=118908

En ese post, un usuario ha puesto una DLL que puede ser importada sin problemas desde VC++ y explica como hacerlo, comenta x aquí como ha ido la cosa.

saludos! Giño

PD: voy a buscar que creo q por algun lado tenía un ejemplo en VC++ con la DLL d microchip...
Título: RE: Proyecto PicUSB
Publicado por: Artifox en 07 de Diciembre de 2005, 00:22:00
Hola J1M... gracias por el link, despues de pelearme con el Visual Studio.Net y un par de incosistencias cerebrales... pude hacer algo... Acomode un codigo que encontre y lo pase a VC++ 6.0, y emule tu programa que encendia y apagaba luces... pero hasta alli llegaron mis limitaciones en VC++ no pude enviar los datos para la suma y la recepcion de datos... en si es un error de sintaxis, pero ya me quede en blanco y no se que hacer ( es que no se programar mucho en VC++)

http://rapidshare.de/files/8754589/USBSample.rar.html

esos son los archivos de mi programa, mi problema como les digo es cuando voy a sumar... no se que se debe de hacer...

Me hago la parte mas pesada y en lo sencillo me complico... loco ni yo entiendo porque paso asi...

Espero me den una mano... Un abrazoRebotado
Título: RE: Proyecto PicUSB
Publicado por: Artifox en 07 de Diciembre de 2005, 00:28:00
Me olvidaba... en el archivo estan la dll (usb2550.dll) y la libreria (usb2550.lib) ya compilada y lista para usar... Sonrisa Gigante

Y es con el mismo hardware que nuestro amigo J1M hizo, asi que solo varia el programa en la PC...

Ahora si nos vemos... RebotadoRebotado
Título: RE: Proyecto PicUSB
Publicado por: 5GTT en 07 de Diciembre de 2005, 08:24:00
No puedo descargar tu codigo Artifox, me gustaria verlo para ver donde fallo yo y a ver si te puedo ayudar con lo tuyo.

Título: RE: Proyecto PicUSB
Publicado por: Artifox en 07 de Diciembre de 2005, 09:34:00
Hola mariano, no me habia dado cuenta que el archivo no bajaba bien... lo he vuelto a colgar, esta vez en uno de los almacenes del foro...

http://miarroba.com/foros/ver.php?foroid=348538&temaid=3933900

Hay esta todos los archivos de mi programa... y el problema esta en el archivo USBSampleDlg.cpp en la parte donde se hace la suma en OnSumar()...

A ver si lo revisas y me das una mano... Un abrazo, nos vemos RebotadoRebotado
Título: RE: Proyecto PicUSB
Publicado por: mario_pastor en 07 de Diciembre de 2005, 12:03:00
Excelente proyecto J1M... tu siempre tan generoso compartiendo tus conocimientos en el foro.... Una buena guía para los que recien iniciamos en el mundo del USB. Giño
Título: RE: Proyecto PicUSB
Publicado por: 5GTT en 09 de Diciembre de 2005, 10:44:00
Artifox, cual es exactamente el problema que te da, ¿o simplemente es que no suma?, me refiero a si te da un error de windows como me pasaba a mi.


Edito: Ante todo no soy ningun experto en Visual C++, por lo que puede que diga una burrada. Me parece que las funciones  de leer y escribir no se utilizan exactamente igual, ahi un puntero por ahi que varia, concretamente en el parametro RecvLength de la funcion MPUSBRead. De todas maneras que lo confirme J1M o alguien, por que tampoco soy un programado nato xD.
Título: RE: Proyecto PicUSB
Publicado por: Artifox en 10 de Diciembre de 2005, 12:03:00
Este es parte del codigo donde esta mi error, para esto a las cajas de texto les puse una variable m_Sum1, m_Sum2 y m_Res de tipo byte para poder trabajarlo directamente con los comandos de envio y recepcion USB, pues estos trabajan a nivel de byte.

void CUSBSampleDlg::OnSumar()
{

   DWORD SentLength,RecvLength;
   BYTE send_buf[3];
   char rec_buf[1];
   send_buf[0] = 0x00;             // Para Sumar
    send_buf[1] = (BYTE) m_Sum1;         // Envia sumando 1 ?????????
   send_buf[2] = (BYTE) m_Sum2;         // Envia sumando 2 ?????????
   MPUSBWrite(myOutPipe,send_buf,3,&SentLength,1000);
   MPUSBRead(myInPipe,rec_buf,1,&RecvLength,1000);
   m_Res=(int)rec_buf;                  // ??????????
}

Cuando lo corro, no me bota nada, no envia y no recibe, hice una depuracion punto por punto y me di cuenta que ni siquiera carga los valores el el bufer, por ello no  tengo idea cual es el error o como debo hacerlo.

A ver si alguien mas nos da una mano. Un abrazo Rebotado
Título: RE: Proyecto PicUSB
Publicado por: patolinec en 12 de Febrero de 2006, 16:35:00
Hola J1M oye solo una cuestion, por alguna de mi pais tercermundista no puedo encontrar un crsital de 12Mhz, por lo que me preguntaba en que parte tengo que configurar esto del cristal para poder colocar un de 16 o 4, te agradeceria mucho tu respuesta
Título: RE: Proyecto PicUSB
Publicado por: J1M en 13 de Febrero de 2006, 01:36:00
Hola patolinec,

me hago un copy&paste de este post:

http://miarroba.com/foros/ver.php?foroid=6510&temaid=3675112&pag=3

Codigo:

por ejemplo (os lo pongo en C para CCS q no se como se declaran en Basic)

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000)

en el delay debo poner a la frecuencia a la que va a ir mi sistema... no la frecuencia del cristal que esté usando. 48Mhz para obtener 12mips y los 1,5MB de transmision del protocolo USB 2.0

El siguiente paso es configurar los fuses para que apartir de un cristal X obtener la frecuencia del sistema Y (en este caso 48Mhz), para eso nos vamos al DataSheet del 18Fxx5x, y a la página 31 y 32.

Vemos un peaaazo tabla en la que tendremos q mirar primero la columna de la izquierda (Input Oscillator Frecuency), seleccionamos la casilla correspondiente al cristal q estemos usando, en mi caso es de 12Mhz, ahora nos vamos a la columna de la derecha(Microcontroller Clock Frecuency) y buscamos los 48Mhz que queremos conseguir.

Ahora tenemos que ver que parámetros nos da la tabla para poner como Fuses, para el que estamos calculando tenemos:

PLL Division: +3 (011)
Clock Mode: HSPLL, ECPLL, ECPIO (a elegir entre uno de los tres...)
MCU Clock Division: +2 (00)

Por ultimo seleccionamos los fuses adecuados a esos parametros, esto ya dependerá un poco del compilador y los nosmbres q le haya dado, aunque generalmente se respetan los del datasheet, para el caso del CCS se tiene:

PLL Division: PLL3
Clock Mode: HSPLL
MCU Clock Division: USBDIV (para indicarle q vamos a usar el divisor tb para el USB), CPUDIV1 (aunq arriba sea +2, es el 00, y es el primero, usea "1"Giño

Para vuestro caso que es de 4Mhz tendriais:
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN
#use delay(clock=48000000)


Bueno espero que os haya quedado un poco mas claro... y q no os haya terminado de liar :P



Saludos! Giño
Título: RE: Proyecto PicUSB
Publicado por: PABCAT en 22 de Febrero de 2006, 18:35:00
hola saben   como acceso a la rom del pic18f4550?;  no c si el ccs sera parecido al compilador del mplab que es con el que estoy trabajando pero viendo como lo hacen con ese podria guiarme y probar si es similar al del mplab c18;  el proyecto en el que estoy trabajando es usb;  como el de J1M   le he agregado algunas cosas  pero me gustaria accesar al rom para dejar guardado algunos datos cuando se desconecte del host  por cierto lograste ver como crear otros iconos yo le puse uno por defecto que viene en la dll  que es un rombo gris pero me gustaria colocar uno personalizado.  
Título: RE: Proyecto PicUSB
Publicado por: BAFAN en 23 de Febrero de 2006, 03:40:00
Para escribir en la memoria de programa en CCS simplemente utilizando la instruccion que da CCS write_program_eeprom(direccion memoria,dato); con eso ya puedes escribir datos de 16bits y para leer es lo mismo pero con read_program_eeprom(direccion memoria); y retorna un dato de 16bits... solo hay q tener en cuenta que las direcciones estan separadas de 2 en 2 bytes y con eso ya puedes escribir facilmente en memoria de programa.
Bueno espero q te haya servido de algo ...Avergonzado
Un saludoGiño
Título: RE: Proyecto PicUSB
Publicado por: djps150 en 27 de Febrero de 2006, 07:34:00
Saludos, en que me puedes ayudar con la comunicacion usb 2.0...
Gracias
Título: RE: Proyecto PicUSB
Publicado por: Artifox en 27 de Febrero de 2006, 19:27:00
Hola, pues para poder ayudarte tienes que ser mas especifico en tus preguntas, en que necesitas ayuda. En la programacion del PIC? el los drivers para la PC? o en la programacion en la PC?

Saludos

Sonrisa Gigante
Título: RE: Proyecto PicUSB
Publicado por: patolinec en 09 de Marzo de 2006, 09:53:00
He tengo un problemilla no logro conseguir el DDK driver develepent kit, en que paquete viene o de donde se lo puede bajar?
Título: RE: Proyecto PicUSB
Publicado por: J1M en 15 de Marzo de 2006, 14:48:00
perdona por no responder antes patolinec... pasate por este link q informan sobre la diferencia entre el DDK y el WDF....
http://foros.solocodigo.com/index.php?showtopic=19337

saludos Giño
Título: RE: Proyecto PicUSB
Publicado por: patolinec en 17 de Marzo de 2006, 12:41:00
A continuacion pongo el contenido del autor Eternal Idol en donde nos dice la localizacion del DDK por si alguien lo nescesita

"El DDK de Windows es gratuito, solo tenes que pagar el envio del CD y si bajas el ultimo modelo es absolutamente gratis: http://www.microsoft.com/whdc/driver/wdf/KMDF_pkg.mspx

Tambien podes bajar varias versiones de esta pagina (ilegalmente claro):
http://down.szipc.com/OS/"[/color]
Título: RE: Proyecto PicUSB
Publicado por: LordLafebre en 31 de Marzo de 2006, 00:08:00
Hola:

Pues voy a hacer una PREGUNTONTA, pero desconosco de la plataforma.NET, recien este sabado tengo un curso de C# basico, en realidad mi pregunta iva dirijida a Jaime:

Si mal no recuerdo lei en tu web que el programa para el PC esta hecho en C#, es aqui donde me confundo, puedo abrir ese proyecto en C#.net? es lo mismo C#.net que VC#?

El tipo de aplicacion es Windows? consola? o de otro tipo...?

Reitero, espero que mis preguntas no esten desencajadas, pero esto me ha llevado a confusiones, espero me las puedan aclarar.Avergonzado

Gracias..!!! Sonrisa Gigante
Título: Re: Proyecto PicUSB
Publicado por: J1M en 08 de Abril de 2006, 14:19:20
Ummmm creia q habia respondido a este post...... lo siento Giovanni, bueno aquí mi respuesta espero q no sea demasiado tarde :S

VC# es Visual C# ... perteneciente a la suite Visual Studio... Cada dos años aproximadamente Microsoft suele actualizarla, la última versión es con la que he realizado el ejmplillo del PicUSB ... La han llamado Visual Studio 2005 ... anteriormente estaba la que tú comentas, Visual Studio .Net, se llamó así ya que con ella se introdujo (si no recuerdo mal) el nuevo lenguaje C#, que se creó para hacer frente a Java... teniendo lo mejor de los dos mundos... Java y C++ .. y salió ese engendro llamado C# que tanto dolor de cabeza me da de vez en cuando xDDD... Esta nueva versión del Visual es compatible y trabaja con el C# 2.0, el VS .Net lo hacía con el C# 1.0 ... bueno en fin, una locura de nomenclaturas...

No sabría decirte si este ejemplo creado con VC# 2k5 es compatible con VC# .Net ya que no he tenido la oportunidad de compilarlo con esa suite, me imagino que puesto que estas haciendo un downgrade... aparezcan problemas... suponiendo que llegue a abrirse el proyecto claro...


Bueno y ahora os dejo por aquí un adelanto de mi dolor de cabeza, que no es gran cosa, pero bueno, me sirve para ir aprendiendo a trastear el VC#

(http://perso.wanadoo.es/j1m/picusbnutbrd.jpg)
(http://perso.wanadoo.es/j1m/picusbnutsft.jpg)

El ejemplillo es un favor que me han pedido desde Tailandia ^^ ... Nut escribe un articulo al mes en una revista de electrónica de Tailandia y quería hacer algo con USB, la cosa era que él me mandaba el KIT que veis en la primera imagen, y despues entre los dos   le pegabamos un par de golpes al teclado para hacer un ejemplo de conexión por USB que
- Encendiera y Apagara los 4 LEDs de la placa
- Envie texto para mostrar en el LCD
- Tomara el valor de una resistencia variable y lo muestre en el programa
- Detectara la Pulsación de los dos botoncillos y se muestre en el programa
Que es lo q se puede ver en la segunda imagen... Al final me ha tocado hacerlo a mi pq dice q no se aclara con el VC# ... pero bueno, mejor pal menda, que tengo una placa muy graciosa (a la que en breve voy a meterle mano al tema de la memoria SD) y me llevo los conocimientos adquiridos... a y bueno una mención en una revista tailandesa jajajaja xD

A ver si comento el código, y lo cuelgo en la página, la cual me tienen cerrada ya una semana x cambio de servidor grrrrr

saludos!
Título: comunicar PicUSB - PicUsb
Publicado por: fercuetos en 12 de Abril de 2006, 08:20:59

hola picmaniacos q tal keria saber si podria conectar dos tarjetas PicUSB y se comunicarian entre ellas.La he realizado antes con rs232 pero para usb me surge la duda. tengo un entrenador basado en el gran proyecto de J1M y estoy descubriendo el gran mundo del c#.

Por cierto he intentado sin exito buscar el circuito electronico del cable de USB-USB para pc. alguien lo conoce???

thankssss xxx
Título: Re: Proyecto PicUSB
Publicado por: josemyzm en 13 de Abril de 2006, 03:14:53
Dios mio, solo el LCD ya tiene una pinta que para qué más. Todo un detalle que han tenido al enviartelo.

Un saludo.

Título: Re: Proyecto PicUSB
Publicado por: softjad en 13 de Abril de 2006, 15:13:45
Olá a todos.
Etou agora a iniciar em pics 18F4550, coloquei o software para o pic mas depois, ao conectar ao Computador, ele dá-me a mensagem de "dispositivo não reconhecido" este erro dá continuamente. Mesmo com os drivers instalados a mensagem é a mesma.
Será incompatibilidade do hardoware do compudador com o pic?

Ogrigado.

Ps. Desculpem ter escrito em portugues.

Título: Re: Proyecto PicUSB
Publicado por: softjad en 18 de Abril de 2006, 12:46:09
Olá a todos.
Já consegui corrigir o problema. O problema estava no software do pic.

J1M,

Podias disponibilizar o programa desse teu ultimo projecto?
Eu estou a tentar fazer um parecido mas estou a ter dificuldade em enviar o texto para o pic. Podes ajudar?

salu2
Título: Re: Proyecto PicUSB
Publicado por: J1M en 19 de Abril de 2006, 20:13:46
aquí lo tienes softjad, va sin comentar, pero bueno, espero t sirva, cuando saque un ratillo le añado alguna funcionalidad mas y lo cuelgo en la página.
Saludos!
Título: Re: Proyecto PicUSB
Publicado por: Tulkas en 10 de Junio de 2006, 11:10:54
Hola a todos, antes de nada tengo que felicitar a todo el mundo por hacer de este foro uno de los mejores que he leido y además en español.  Empiezo con el tema.

Resulta que en los últimos años he estado trabajando haciendo sistemas de adquisición de datos, los primeros sistemas de adquisición que hice eran basados en eeprom y la descarga a través de la rs232 era muy lenta, luego pasé a almacenar los datos en tarjetas MMC/SD y en CF pero siempre por algún motivo o por otro necesitaba conectar un ordenador a la placa de adquisición, y siempre a través de la rs232, como en la actualidad este puerto está desapareciendo, sobre todo de portátiles, quería empezar a trabajar sobre la comunicación por usb, lo que quiero basicamente es leer datos de una eeprom y guardarlos en un fichero en el disco duro, la programacion del pic siempre la he hecho en ensamblador y por ahora no se me ha resistido nada.  Mi problema es que no encuentro nada que parta desde cero en la configuración del usb, quiero decir este proyecto parte del hardware del gtp usb que ni si quiera tengo, por otra parte tampoco tengo mucha idea de este protocolo y no quiero tener que leerme un enorme manual para luego llegar al pic y no saber hacer nada (que de hecho es lo que me pasa ahora), tampoco se si la programación en ensamblador es la más adecuada.

Muchas gracias.
Título: Re: Proyecto PicUSB
Publicado por: vinny en 20 de Junio de 2006, 18:26:06
Tengo exactamente el mismo problema que Tulkas,en mi proyecto fin e carrera necesito leer unas eeproms y volcar su contenido en un PC, lo hago mediante un PIC18F4455 que tiene puerto USB, pero no sconsigo que el PC me reconozca el PIC, ni siquiera utilizando proyectos que he encontrado por internet. Yo programo con CCS, me bajé una versión que ya lleva los drivers del USB, pero ni aun así consigo la comunicacion PC-PIC.

Gracias a todos y a ver si conseguimos sacar algo en claro!
Título: Re: Proyecto PicUSB
Publicado por: J1M en 20 de Junio de 2006, 19:25:21
No se parte del GTP USB, se parte de este esquemático:

(http://perso.wanadoo.es/j1m/proyectos/picusb/PicUSB_sch.jpg)

Lo que yo decía es que utilizaba el GTP USB pq en base viene a ser lo mismo... Ahora bien, de donde sacar los componentes de ese esquemático... exale un ojo al datasheet... está todo muy bien explicado.

La programación en ensamblador no va a serte nada comoda para las aplicaciones por usb, como poder ser puede, pero el tiempo de desarrollo es muchisimo... y que ganas?? posiblemente nada, ya  que el compilador casi con total seguridad dejará el código mas optimizado que lo que se pueda hacer 'a mano'.

Vinny monta todo tal cual aparece en este ejemplo pq funciona de lujo... si estas seguro que está todo montado tal y como dice, comenta x aquí cual es el fallo (q eso de q no te reconozca el PIC no es demasiada buena descripción de tú problema.....)

saludos
Título: Re: Proyecto PicUSB
Publicado por: Cortez en 20 de Junio de 2006, 23:29:11
bueno yo tengo el mismo problema ya monte todo y despues de muchos pininos logre programar el pic el montaje es por demas sencillo pero no funciona de hecho no hace nada nisiquiera prende el led rojo que deberia indica que no esta instalado el driver estoy suando un pic18f2455 que en realidad es similar al 2550 solo por la memoria ya cheque voltaje y volvi a checar la programacion del pic y esta bien, ando algo perdido con eso no se que esta mal :( si necesito algun driver que tenga que programar en el pic o solo con el hex del picusb es suficiente (picusb.hex) :-/
Título: Re: Proyecto PicUSB
Publicado por: J1M en 21 de Junio de 2006, 04:04:43
Tú mismo acabas de decir cuál es tú problema... estas usando un 18F2455 con un hex para un 18F2550... vuelve a compilar el código pero cambia el fichero de cabezera...
saludos!
Título: Re: Proyecto PicUSB
Publicado por: vinny en 21 de Junio de 2006, 08:02:51
Gracias J1M, mi problema cuendo digo que el PC no me reconoce el PIc, es que no reconoce que haya instalado nada en el puerto USB, hay un proyecto en la pagina www.hobbypic.com que explica como instalarlo como un hardware normal que podamos insertar en un puerto USB, pero, ni usando su mismo proyecto cambiando la cabecera por la de un PIC18F4455 que es el que uso yo, nio instalanso todas las .dll me reconoce que inserte nada en el puerto USB, y el PC reconoce cuelquier cosa que ponga en ese puerto.

Yo uso el programador ART2003, que es muy sencillo, con el winpic programo y leo bien el contenido del PIC, sin embargo ayer me entr´ño una duda mientras probaba cosas, en el manual del ART2003 pone que no necesita tensión externa para programarse ya que se hace en LVP, pero miro con el tester en las patillas de Vpp y...no hay voltaje mientras grabo, pero graba! xq puedo leer el contenido, esto porque es? si le meto 5v  en VPP en el momento de programar, estropearé algo?
 :(
gracias por todo y a ver si esto va mejorando que me veo el proyecto de fin de carrera muy mal muy mal
Título: Re: Proyecto PicUSB
Publicado por: J1M en 21 de Junio de 2006, 18:42:01
Se enciende alguno de los leds(rojo/verde) de la placa del picusb??? si no es así es que efectivamente no tienes bien grabado el micro... revisa el ART q debes tenerlo mal montado, si no se te activa la linea de VPP supongo que será pq lo has conectado a otra pata del conector del PP.
saludos
Título: Re: Proyecto PicUSB
Publicado por: softjad en 22 de Junio de 2006, 12:53:28
Yo tive el mismo problema, el PC no detectava nada de nada. Tanbiem programava con ART2003.

El mi problema estava em las configuraciones del WIPIC800, en configuraciones tienes que activar el LVP e en Oscillator Selection deveras tener seleccionado: Divided by 3(12Mhz input).

despoes adios problema!!

Salu2
Título: Re: Proyecto PicUSB
Publicado por: Ehlo en 24 de Julio de 2006, 01:01:45
Saludos Hermanos: Quisiera saber si alguno de ustedes ha utilizado el descriptor USB, en este caso con transferencia tipo BULK (del ejm PicUSB y ex_usb_scope), y ha leido algo q dice en el archivo ...\drivers\pic18_usb.h de que "//NOTE - PING PONG MODE IS NOT SUPPORTED BY CCS!" cuando es necesario configurar el modo de double buffered -USB_PING_PONG_MODE-. Ese comentario realmente significa que el modo PING PONG (double buffered) realmente no lo soporta el CCS? Como en ninguno de los dos ejemplos se utiliza, entonces parece q no se puede utilizar ese modo. Si alguien ha configurado ese modo o el que sea pero en alguna parte, por favor, díganme donde declararlo, porque no sé si va el archivo descriptor *.h (ejemplo: PicUSB.h) o en cual porque veo que en esos ejemplos no esta declarado porque en el usb.h estan las definiciones pero no esta seleccionado en ningún otro archivo.

Espero puedan ayudarme.
Título: Re: Proyecto PicUSB
Publicado por: kain589 en 02 de Agosto de 2006, 06:13:36
Saludos! Estoy empezando a estudiar este proyecto para que me sirva de base a mis futuros desarrollos con el usb, ya he estado leyendo y haciendo cosas con el VisualC#, que no tenia ni idea de él suerte que sabia de Vbasic y de C y leyendo un poco creo que no tendre demasiados problemas.

El tema es que me he puesto a leer el codigo en C del pic, y he encontrado esto:

Código: C
  1. #include <18F2550.h>
  2. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
  3. #use delay(clock=48000000)

En el esquematico el cristal que aparece es de 12mhz, mi pregunta es ¿si el clock con el PLL3 no seria 36000000?De antemanos gracias por la respuesta, y un muy buen proyecto para empezar J1M
Título: Re: Proyecto PicUSB
Publicado por: wqtrp en 02 de Agosto de 2006, 09:37:23
hola, fijate en el datasheet del chip, veras q pll3 en realidad es pllDIV(x) cn l cual divide el clock para llevarl a un valor fijo y estandard de 4MHz para despues multiplicarlo siempre a 48MHz
hay un diagrama en el data q es muy bueno para entender esto.
Suerte
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 13 de Agosto de 2006, 09:07:25
Jaime:

He fagocitado tu Proyecto PicUSB completo para mi RRBOARD2 (http://www.todopic.com.ar/foros/index.php?topic=2300.0). De hecho lo único que he modificado ha sido cambiar el include <18f2550> por el include <18f4550> que calza mi viceplaca. Le he cargado el hex tal como tu lo dejaste, la he conectado al USB de mi PC, le he instalado tus drivers y he ejecutado el programa PicUSB.exe y .... ¡¡¡ TODO PERFECTO !!!


(http://picmania.garcia-cuervo.com/images/USB_TEST_J1M_PICUSB.gif)


A partir de ahí he continuado avanzando y lo primero que he hecho ha sido reconstruir tu programa ejecutable para el PC pero realizándolo en Delphi, que es mi idioma materno en Güindous. Haciendolo 100% compatible con el tuyo (mas sambuyo). Solo le he añadido una pequeña nota de color al formulario ...  :mrgreen:


(http://picmania.garcia-cuervo.com/images/USB_TEST_J1M_PICUSBDelphi.gif)


Asi que ademas de darte las gracias públicas por tu trabajo, alabarte infinitamente por la cantidad y calidad de tu jugo de cerebro, de ....   :D  :D  :D

Quiero ofrecer a nuestros amigos un pequeño aporte adicional que es el proyecto completo del ejecutable realizado en Delphi 6 Enterprise, lo teneis disponible en:

La mpusbapi.dll desencadenada, PC <-> PIC vía USB en Delphi (http://www.todopic.com.ar/foros/index.php?topic=13418.0)

Un saludo y salgo corriendo (a seguir con el USB y el PIC)





Título: Re: Proyecto PicUSB
Publicado por: J1M en 15 de Agosto de 2006, 07:21:16
Enhorabuena Diego y un enorme y absoluto placer que te haya servido el trabajillo del PicUSB!!! :D ... llevo un tiempo perdido de absoluto relax y dsconexión del mundo de la electrónica e informatica... salí mentalmente agotado de los examenes de Julio (por suerte salieron bastante bien las 8 a las q me presenté... aunq casi me explota el cerebro XDDD) la verdad necesitaba un verano para 'no pensar' ... y jode creo q estoy empezando a exar esto de menos... aunq x algún motivo aún no estoy preparado... en fín, espero estar pronto x aquí dando guerra otra vez.... ahora ya empezando a estudiar para los tres examenes que me quedan para concluir 4º en Septiembre y volver para dar un poco de guerra.

Un saludo a todos!!
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 22 de Agosto de 2006, 20:31:54
Hola a todos y la verdad los felicito por su trabajo, el tema es que yo uso generalmente el c++ Builder 6 para programar y queria saber si alguien tiene algo para este entorno, ya que no se como usar el dll con builder. saludos nuevamente y gracias
Título: Re: Proyecto PicUSB
Publicado por: 5GTT en 22 de Agosto de 2006, 23:25:26
Si no recuerdo mal, creo que en C++ Builder es donde esta hecha la libreria original de Microchip ademas de un par de ejemplos.

Saludos de Mariano.
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 25 de Agosto de 2006, 16:06:25
Eso esta en la pagina de microchip?? Yo tengo solo el dll nada mas, donde consigo eso? Gracias
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 25 de Agosto de 2006, 18:15:45
Ya encontre el zip donde viene todo, gracias, me voy a poner a jugar un poco con eso! saludos
Título: Re: Proyecto PicUSB
Publicado por: PakoJones en 29 de Agosto de 2006, 12:57:56
Hola buenas J1M, estoy intentando probar el PicUSB que has creado y me da problemas a la hora de conectar el montaje con el PIC al puerto USB. Me dice que "No reconoce el dispositivo USB". Y llegado a este punto me surge las siguientes dudas:

Tiene algo que ver que utilice un cristal de cuarzo de 20MHz en vez del de 12MHz que pones en tu montaje? Mi montaje es exactamente = salvo el cristal, que es de diferente valor)

Puede que no haya instalado bien los drivers? Me gustaria saber que archivos exactamente he de instalar, o poner en segun que carpetas.

Por ultimo, puede que sea por el VID&PID?? He respetado el PID_0011 que tienes puesto, pero he leido en algun post que podria crear conflicto. Tengo el GTP-USB+ instalado, y lo uso para grabar los PIC's, pero no lo uso para alimentar el circuito, el circuito lo alimento aparte por el puerto USB, es decir, primero grabo el PIC con el GTP-USB+ conectado a una placa de topos donde enchufo el PIC, y luego saco el PIC y lo pongo en una protoboard desconectando el GTP-USB+ y conectando el mismo cable usb a la protoboard.

Espero que alguien me pueda ayudar, gracias.

PakoJones
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 29 de Agosto de 2006, 13:01:20
Tiene toda la pinta de que sea el cristal. Con el PLL configurado para generar 48 Mhz con un cristal de 12 Mhz no te va a funcionar si le pones el cristal de 20 Mhz. (A mi me paso lo mismo y funcionó en cuanto le cambié el cuarzo)

Título: Re: Proyecto PicUSB
Publicado por: elmasvital en 29 de Agosto de 2006, 13:23:31
Desconecta tambien el gtp-usb+ o el ejemplo de j1m puede que no vaya. Tanto a redpic como a mi nos ha dado problema tener el gtp-usb conectado a la vez. Los dos a la vez no funcionan...

creo que redpic dio con la solucion... pero ahora mismo no recuerdo cual era.

Por otro lado yo la primera vez que probé el invento me habia cargado el usb del 18f2550 y no me había dado cuenta porque el chip funcionaba perfectamente salvo que hacia lo mismo que el tuyo, al conectarlo el pc decia dispositivo usb no reconocido.

1 saludo
Título: Re: Proyecto PicUSB
Publicado por: PakoJones en 29 de Agosto de 2006, 13:45:38
Ok gracias por responder tan rapido, mañana comprare el cristal de 12MHz a ver si chuta bien y ademas probare con otro 18F2550 que tengo por aki tb, a ver si va a ser que esta en mal estado. Mañana os comentare los resultados.

Un saludo y gracias!  :-)

PakoJones
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 29 de Agosto de 2006, 16:53:38
Jose Antonio y demás amigos:

Tanto el PicUSB.exe como el Driver de J1M funcionaron perfectamente, cuando le puse el Xtal de 12 Mhz, pero se interferían por algún motivo desconocido, con el Driver del GTP-USB+. Ambos solo funcionaban cuando el otro no estaba conectado, imagino que tenían un irrefrenable ataque de celos mutuos.

La solución que le dí fue descargar e instalar el driver original de Microchip, y cambiarle al Firmware del PIC el VID&PID para que fuese el mismo que este último driver. A partir de ahí todo perfecto.

Otra nota para PacoJones, puedes hacer funcionar tu USB a 48 Mhz con un cristal de 20 Mhz haciendo que el divisor PLL sea PLL5 en lugar del PLL3 que usa J1M para su PicUSB con el 12 Mhz. El asunto está en conseguir un divisor del cristal que uses para que te dé una frecuencia de 4 Mhz en función del Xtal que estás utilizando. Por eso 12 Mhz -> PLL3 ya que 12 / 3 = 4; y 20 Mhz -> PLL5 ya que 20 / 5 = 4.  :mrgreen:

(Acabo de descubrirlo al ver los ejemplos de USB del CCS C que pone que el cristal usado es de 20 Mhz y la unica diferencia estaba en los fuses del ejemplo que ponía PLL5 en lugar de PLL3)

Edito: Acabo de hacer lo que proponía: Le he puesto un Xtal de 20 Mhz y le he cambiado el PLL3 por PLL5 en los fuses y ha ido todo de maravilla.



Título: Re: Proyecto PicUSB
Publicado por: RedPic en 29 de Agosto de 2006, 17:26:19
Por cierto. Acaba de hechar a andar el ¡¡¡ USB Keyboard Emuleitor con la RRBOARD2 (http://www.todopic.com.ar/foros/index.php?topic=2300.0) !!!  :mrgreen:  :mrgreen:  :mrgreen:

(http://picmania.garcia-cuervo.com/images/USB_HID_KBD_Dump_01.gif)
Título: Re: Proyecto PicUSB
Publicado por: jonathanlopez en 29 de Agosto de 2006, 17:30:04
Muy bueno felicitaciones
Título: Re: Proyecto PicUSB
Publicado por: SimonMG en 29 de Agosto de 2006, 22:42:47
perdonen las molestias pero me pudieran enseñar el programa que va en el PIC en asembler lo que pasa es que no C nada de C :mrgreen: :mrgreen: :mrgreen: :8} pero si no es molestia les agradeceria q me eseñaran el programa en asembler  :D gracias y saludos
Título: Re: Proyecto PicUSB
Publicado por: PakoJones en 30 de Agosto de 2006, 06:51:14
Muy buenas! RedPIC eres un genio!! ya me funciona, a la perfeccion!! He usado el cristal de 20MHz haciendo el divisor por 5 (PLL5) y me ha reconocido el PIC, se me han instalado sin problemas los drivers y el programa en VisualC# funciona a la perfeccion. Un exitazo. Lo que no acabo de entender eso del divisor, pq eso de conseguir que sean 4MHz segun el cristal que tengas, no entiendo pq han de ser 4MHz, hay alguna explicación lógica para esto, si lo saben me gustaria entenderlo.

Otra cosa, al principio tube un poko de problema, me lo reconocia pero me salia en vez de J1M USB, simbolos raros como esto: |||||][][]|| |||[][][][][||||||||||||| [][][][][][][][][][][] saben? no se si es que tenia todos los archivos tan liados que el windows no ha sabido por donde coger la cosa. Al final he hecho un poko de limpieza desinstalando los drivers y volviendo a grabar el archivo de PicUSB de nuevo, y he cambiado de puerto USB, si para el GTP-USB+ usaba el de arriba, para lo de J1M uso el de abajo. Lo he hecho pq al principio al conectar el PicUSB no salia nada, no se a ke debe ser. Bueno, no se si tendra que ver el hecho de que haya ido a panel de control-->Sistema-->Hardware-->Administrador de dispositivos y haya desinstalado el controlador que ponia Familia PIC 18F4550, cosa que me parece raro al usar el PIC18F2550. Bueno, total, a lo que queria llegar, si quiero hacer yo un experimento con el USB no hara falta que cambie el PID&VID??

Muchas gracias a todos por vuestra ayuda!!, estaba ya un poko desesperado

PakoJones

PD: Si no entendeis bien lo que digo , ya puede ser, pq no me explico demasiado bien, jeje.
Título: Re: Proyecto PicUSB
Publicado por: patolinec en 01 de Septiembre de 2006, 16:52:29
Pues eso sale cuando tu modificas los strings del archivo PICUSB.h en la parte de J1M y PicUSB vuleve a como es normalmente y listo
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 01 de Septiembre de 2006, 18:00:07
Pako:

Voy a intentar explicar un poco de dónde sale esto de los 4 Mhz para el USB 2.0.

Como nunca me canso de repetir: En los datasheet está T_O_D_O, absolutamente todo.  :mrgreen:

Aqui os pego un trozo de la imagen donde aparece la estructura de configuración de las opciones de los osciladores en los PIC's de la familia 18Fxx5x que son los que soportan el USB 2.0 (Documento 39632b.pdf de Microchip dedicado a los 18F2455-2550-4455-4550)

(http://picmania.garcia-cuervo.com/images/USB_OSC_Configuration.gif)

Es sistema es complejo debido a la inmensa versatilidad y posibilidades que ofrece.

Como podéis ver en OSC1 y OSC2 conectamos nuestro cristal: 4 Mhz, 8 Mhz, 12 Mhz, 16 Mhz, 20 Mhz, 24 Mhz, 40 Mhz  ó 48 Mhz, que son los cristales validos compatibles con lo que sigue a continuación.

Tened en cuenta que este cristal es el mismo para generar la frecuencia de 48 Mhz necesaria para el USB 2.0 y para el Clock del PIC, que pueden ser la misma o no, según la configuración que al final adoptemos, quiere esto decir que podemos tener el USB a 48 Mhz y nuestro programa en el PIC funcionando a 12 Mhz por ejemplo.

Fijaos en que justo tras el Smicht Trigger del Primary Oscillator salen tres lineas en paralelo que van a modulos distintos con distintas posibilidades.

La primera línea, la superior, va directamente al switch USBDIV que si está a cero indica que la frecuenci base original del cristal es directamente inyectada al USB, si pasa el switch FSEN que elige entre todo el sistema directo/PLL o el Primary Clock del CPU. Esta Opción de inyectar directamente la frecuencia del cristal es obviamente solo posible si usamos un Cristal de 48 Mhz que es lo que necesitamos para el USB.

Cualquier otro cristal debe ser tratado para conseguir los 48 Mhz necesarios.

El módulo USB Clock Source tiene a su entrada un PLL Prescaler, o sea un divisor de frecuencia. En cada una de sus salidas vamos a tener FOSC dividida por 1, 2, 3, 4, 5, 6, 10 ó 12. Y mediante PLLDIV que no es mas que un Multiplexor vamos a seleccionar la que deseamos usar.

Así si nuestro cristal es de 12 Mhz y en PLLDIV colocamos un 010 estaremos dividiendo por 3 el valor de FOSC con lo que tendremos 4 Mhz a la salida del MUX. Si por el contrario el cristal es de 20 Mhz y en PLLDIV colocamos un 100 entonces dividiremos por 5 FOSC con lo que tendremos también 4 Mhz a la salida del MUX.

Esta salida del MUX es lo que utilizamos para inyectársela al PLL de 96 Mhz. Si le metemos 4 Mhz él genera 96 Mhz. Es esta capacidad de pasar de 4 Mhz a 96 Mhz la que nos da la posibilidad de usar un montón de cristales distintos.

Pero 96 Mhz es el doble de lo que nos hace falta para el USB que son 48 Mhz. Asi que inmediatamente después tenemos que tener, y tenemos, un divisor por 2 que es el segundo camino por el que llegamos a USBDIV y en este caso le pondremos un 1 para usar la señal proviniente del PLL.

Fijaos que además de inyectar la señal oscilante en USBDIV tambien se conecta la señal del PLL a 96 Mhz en un Postscaler, otro divisor, en este caso por 2, 3, 4 ó 6 y cuyas señales van al CPUDIV. O sea que podemos generar una señal de reloj para nuestro PIC, no para el USB sino para la velocidad de ejecución de nuestro programa tomándola del PLL y que puede ser de 16 Mhz, 24 Mhz, 32 Mhz ó 48 Mhz.

Pero además la señal original llegaba en paralelo al Oscilator Postcaler, otro divisor más, que de forma directa, sin pasar por el módulo PLL nos divide la frecuencia original del cristal por 1, 2, 3 ó 4 y que también va a parar al CPUDIV pero desde otro origen. Con este módulo podemos obtener otra gama de frecuencias distinta para hacer correr el programa.

Cúal de ambos CPUDIV vamos a utilizar lo seleccionamos con el switch FOSC3:FOSC0 que es de donde sacaremos la definitiva frecuencia de ejecución de programas.

Por último tambien tenemos disponible una entrada proviniente del Primary Clock y que dividida por 4 llega también a FSEN y podemos utilizarla en lugar de la que le llega desde el canal directo/PLL

Como podeis ver es toda una maravilla cómo esta montado este tema de los osciladores, sobre todo por lo que respecta a las inmensas capacidades que tiene para hacer correr nuestro PIC a decenas de velocidades distintas siendo capaz, al mismo tiempo de tener disponibles los 48 Mhz imprescindibles para el USB 2.0.

Me descubro ante los ingenieros de Microchip y los aplaudo, se lo merecen.
 



 
Título: Re: Proyecto PicUSB
Publicado por: 5GTT en 01 de Septiembre de 2006, 21:17:40
Muy bueno, redpic, te voy a contartar para que me cuentes asi los datasheets, asi me entero mejor.

Como añadido, decir que en la pagina 31 y siguientes del datasheet viene explicado que PLL debemos poner segun que cristal, asi nos ahorramos sacar la calculadora para dividir por 4 xD.

Saludos.
Título: Re: Proyecto PicUSB
Publicado por: elmasvital en 02 de Septiembre de 2006, 00:11:27
red termina la carrera de iti y ponte a dar clases de inmediato :-P
Título: Re: Proyecto PicUSB
Publicado por: SimonMG en 02 de Septiembre de 2006, 21:05:10
perdonen las molestias pero me pudieran enseñar el programa que va en el PIC en asembler lo que pasa es que no C nada de C Mr. Green Mr. Green Mr. Green llorica pero si no es molestia les agradeceria q me eseñaran el programa en asembler  lol gracias y saludos

disculpen las molestias :mrgreen: :mrgreen: :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: elmasvital en 02 de Septiembre de 2006, 23:27:38
no hay nada en assembler simonmg... aqui normalmente todos programos en c estos cacharros... al menos en este hilo todo se hace con ccs visual c y delphi
Título: Re: Proyecto PicUSB
Publicado por: kalux en 06 de Septiembre de 2006, 05:24:32
Hola,

Respecto al DDk.

Tengo instalado el Service pak 2. En este proyecto se ha utilizado el SP1:
Microsoft Windows Server 2003 Service Pack 1 (SP1) Driver Development Kit (DDK)

¿Tendria proplemas si lo instalo?
¿Alguien con el SP2 ha instalado el DDK SP1?

Gracias y un saludo
Título: Re: Proyecto PicUSB
Publicado por: kalux en 06 de Septiembre de 2006, 07:21:51
Hola,

¿Alguien lo ha utilizado con el c++builder?

Voy perdido ...

Gracias y un saludo.
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 10 de Septiembre de 2006, 14:47:31
¡Dios santo! Me ha salido una verdadera novela ... pero creo que merece la pena.  :mrgreen:

El USB desencadenado : El Bulk USB (http://picmania.garcia-cuervo.com/USB_1_BulkTransfers.htm)

(Perdonad la repetición de posts pero no me he podido contener  :D)
Título: Re: Proyecto PicUSB
Publicado por: J1M en 10 de Septiembre de 2006, 15:25:47
Jode diego, a eso se le llama explicación y lo demás son tonterias! :p Profesores como tú son lo que debería haber en la universidad leche! Yo sigo de examenes, esto es inacabable, quiero jugar!!! buaaa!! ;)

kalux no confundas DDK con SP; DDK es el Driver Development Kit (Kit de Desarrollo de Drivers) y SP es Service Pack (Paquete de Actualizaciones (en una fantastica traducción e interpretación realizada por el menda! jeje)) Pues bien, cuando en el ejemplo PicUSB hablo de "windows_server_2003_sp1_ddk" en este parrafo:

"El último paso ha sido la edición del Driver suministrado por Microchip de tal forma que apareciera en el Administrador de Dispositivos una nueva clase con un icono personalizado. Para esto ha sido necesario crear una DLL que exporte ese icono. Se adjunta el código fuente de la DLL, PicUSB_Classinstaller.zip por si se desea recompilar para poner otro icono. Se necesita para ello la DDK (Development Driver Kit) de Microsoft, para este ejemplo se ha usado la windows_server_2003_sp1_ddk. Y el ejemplo llamado Toaster."

Ahí no me estoy refiriendo a 'crear' ningún driver, solo a editar el .inf suministrado por microchip, no sabría decir si el .inf se puede considerar driver... en cualquier caso, solo lo modifico para que lea una DLL creada por la DDK donde hay un icono con el fin de que aparezca en el panel de control (algo que no sabía hacer y utilize este proyecto para aprenderlo).

Respondiendote entonces, el "windows_server_2003_sp1_ddk", es la última versión disponible (en el momento de escribir el articulo) de la DDK de Microsoft, que como te digo, solo la vas a necesitar en el caso de que desees crearte un icono y ponerlo en el panel de control, en cualquier otra situación puedes usar el que se incluye en el proyecto o incluso descargar la versión sin modificar de microchip para adaptarlo a tus necesidades. Añadir también que ese SP1 va implicito a la DDK, y no al Sistema Operativo como estabas sugiriendo. Puedes tener el XP SP2, la DDK SP1, el Office 2K3 con el SP1, y el Visual Studio con el SP5... que cada SP corresponde a su programa, creo que me he explicado no? jejeje

Lo que es el Driver en sí (el .sys) no puede modificarse, hay gente que se ha creado su propio driver(de momento no está compartido) haciendo uso de esa misma DDK, ya que el de microchip parece ser que va limitado en cuanto a velocidad de transmisión (no se puede aprovechar al 100% el potencial de un FULL USB 2.0 como es el incluido en el PIC) pero vamos eso es otra historia de la que se bastante poco :S

A tú pregunta del C++ Builder no se exactamente que responderte, decirte que tienes varias páginas en internet en las que se explica como echar a andar un dispositivo USB (con PIC) y el C++Builder, en concreto puedes encontrar varios en la página wikki francesa que publica el amigo Diego al final de su peaaazo articulo.

saludos!
Título: Re: Proyecto PicUSB
Publicado por: 5GTT en 11 de Septiembre de 2006, 02:24:08
RedPic se que esto te va a gustar, lo malo es que esta hecho con C18. Yo lo he probado y funcina perfectamente, seguramente sepas adaptarlo a tu RRBOARD y a CCS.

http://www.geocities.com/dariuskrail20/USBUSART.html

Saludos.
Título: Re: Proyecto PicUSB
Publicado por: Nocturno en 12 de Septiembre de 2006, 03:25:24
¡Enhorabuena maestro Diego!, estoy de vacaciones y no puedo pararme a leer tu artículo so pena de perderme algunos paisajes y no menos monumentos, pero lo dejo en la recámara para leerlo en cuanto llegue. Tiene una pinta extraordinaria.
Título: Re: Proyecto PicUSB
Publicado por: kalux en 12 de Septiembre de 2006, 13:46:53
Hola,

Gracias J1M, ahora te he entendido perfectamente.
Lo que me falta por el momento, es compilar para obtener la dll del icono. Que por cierto me estoy volviendo loco y no lo consigo. Estamos con ello.

Muchas gracias por vuestros aportes.
Un saludo.
Título: Re: Proyecto PicUSB
Publicado por: kalux en 16 de Septiembre de 2006, 07:11:42
Hola,

No consigo generar la dll. Los pasos que sigo son:

1.- Ejecutar el "Windows XP free Environment". En el pongo:
2.- setenv [donde esta instalado el ddk] free WXP. Segun la ayuda. Seria para xp
3.- cd [donde estan los ficheros]
4.- make

Al ejecutar el comando make, me da los siguientes errores:
"jvc" no se reconoce como comando interno o externo,
programa o archivo por lotes ejecutable.
NMAKE : U1077: 'jvc' : return code '0x1'
Stop.

He probado a ejecutar tambien el comando build, tambien infrutuosamente, obteniendo 3 errores y parando. Los errores son:
     Compiling - objfree_wxp_x86\i386 for all platforms
     NMAKE : warning U4006: special macro undefined : '$<'
esto se repite 3 veces y a continuacion marca:
    BUILD: Compile errors: not linking .....
    BUILD done
   3 files compiled - 3 errors

Comentar que es sobre el fichero que paso j1m, es decir primero quiero compilar el suyo.

Por favor una ayudita.
Gracias.

Título: Re: Proyecto PicUSB
Publicado por: J1M en 16 de Septiembre de 2006, 09:04:38
kalux te pongo por aquí el como hacerlo y además 'legalmente', ya que microsoft ha liberado la DDK

En primer lugar vamos a la página de Microsoft de WDF (Windows Driver Foundation)
http://www.microsoft.com/whdc/driver/WDF/KMDF_pkgdwn.mspx?

Y descargamos el archivo WDFv11.iso, que son unos 300Mb

Una vez hayamos grabado la imagen o cargado con un programa tipo Daemon Tools, se abrirá la pantalla de instalación, seleccionamos 'Instalar DDK', se selecionan las opciones que quieras, en principio con marcar solo la opcion de los entornos 'enviroments' es suficiente.

Una vez instalado comprobamos que todo va bien ejecutando el siguiente comando en la linea de comandos de cualquier entorno (por ejemplo el del XP free), para cargar abrir la ventanita de la linea de comandos hay q ir a
inicio/programas/developmentkit/ddk/build enviroment/winxp/free build enviroment

y con eso aparece la linea de comandos para poner el comando
build –cZ

En principio debería compilarse sin ningún problema (si falla por lo que sea, vuelve a instalarlo y dejalo todo por defecto)

Volvemos a entrar a la linea de comandos para compilar el classinstaller del PicUSB, en ella escribimos la ruta dnd se encuentra la carpeta con los archivos:
C:\WINDDK\3790~1.183\src\picusb\classinstaller

Importante que esté dentro de la ruta de la DDK, a continuación compilamos escribiendo 'build' (sin comillas).

Deberá compilar sin fallos, entonces para cojer nuestra ansiada DLL vamos a la carpeta:
C:\WINDDK\3790.1830\src\picusb\disk\fre_wxp_x86\i386

Dnde la encontraremos nueva y reluciente para juguetear con ella ;)

Saludos!
Título: Re: Proyecto PicUSB
Publicado por: kalux en 17 de Septiembre de 2006, 07:25:10
Gracias J1M.

Ahora siiiiiiiiiiiiiiiiiiiiiiiiiiii.    :-/ :-/ :-/

Como dices, lo importante es que este dentro de la ruta del ddk:
.....\src\aqui

Yo lo tenia en otro directorio, y claro ... pinchaba.

MUCHISIMAS GRACIAS (estoy que me salgo).
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 21 de Septiembre de 2006, 16:53:11
Buenooooo .... yo sigo con mi experimentos.  :mrgreen:

Hasta ahora hemos estado trabajando con el método Bulk Transfers (Transferencia masiva) para conectarnos con el PIC vía USB 2.0. (Firmware, Driver y Aplicación+Dll) pero hay más ....  :D

Otro método posible es el CDC USB (Communications Device Classes) que logra utilizar el USB como si fuera u fuese un puerto COM serie, Virtual pero tan puerto COM como el implementado con una UART.  :shock:

Este método nos permite comunicarnos con el PIC mediante cualquier programa en el PC que pueda utilizar un puerto COM serie normal y corriente, como por ejemplo el HyperTerminal de Windows o el Siow del CCS C, además de cualquier aplicación que deseemos hacer en Delphi, Visual Basic u C++ que tenga la posibilidad de leer y escribir puertos COM.  :)

El firmware de nuestro PIC le dice al Windows que es un puerto serie y éste va y se lo cree, añadiendolo como un puerto normal y corriente entre sus dispositivos. Para ello utiliza el mismo driver que usa para los demás puertos serie, por lo que no tenemos instalar un nuevo driver como era el caso del método Bulk Transfer. Solo tenemos que suministrarle un fichero .inf que nos pone a nuestra disposición Microchip y que le va a servir al PC para reconocer como este tipo de dispositivo a nuestro PIC con el correspondiente firmware a través del VIP&PID correspondiente.

Si queréis todos los detalles lo tenéis disponible en EL USB DESENCADENADO : CDC USB (http://picmania.garcia-cuervo.com/USB_3_CDCTransfers.htm)

(http://picmania.garcia-cuervo.com/images/RRUSB_Complete_Cdc_Install_Driver_07.gif)
Título: Re: Proyecto PicUSB
Publicado por: Nocturno en 21 de Septiembre de 2006, 17:53:26
A sus pies, gran Cuervo Rojo.
Título: Re: Proyecto PicUSB
Publicado por: 5GTT en 21 de Septiembre de 2006, 22:00:47
RedPic se que esto te va a gustar, lo malo es que esta hecho con C18. Yo lo he probado y funcina perfectamente, seguramente sepas adaptarlo a tu RRBOARD y a CCS.

http://www.geocities.com/dariuskrail20/USBUSART.html

Saludos.

Cuando dije esto tampoco era un encargo eh!, jaja que prisa te has dado macho, tienes una media de mas de proyecto por semana. Quien pillara esa habilidad.

Enhorabuena.
Título: Re: Proyecto PicUSB
Publicado por: Joaquín en 29 de Septiembre de 2006, 16:03:19
Hola a todos.

Ahora que dispongo de algo de tiempo me he puesto también con el USB  y así voy adelantando trabajo, pues este año voy a aprender a manejar una FPGA.

Tengo alguna documentación traducida y algún programa hecho modificando el PicUSB de JIM, todo pendiente de adecentar, lo cual haré en breve (supongo que durante el fin de semana), y os lo haré saber por si a alguien le sirve de algo.

Al final lo de hacer el proyecto con Linux lo hemos dejado un poco aparcado puesto que casi todo lo que he encontrado está en Windows y así el invento funcionará en los dos sistemas.

Además craro está tengo varias dudas:

---- La que más me tiene quitado el sueño es respecto a la API de C#, y es si hay alguna forma de que cuando el Pic le
      envíe un dato al PC se genere un evento en el programa del PC y  así actuar en consecuencia.

---- Otra duda es el timeout que está por ejemplo en la API y que el amigo JIM le da un valor de 1000 ms, ¿a qué se
      refiere ese tiempo? ¿Es el tiempo que permanecerán los datos en el buffer del USB?

---- Por otra parte, en el programa del PIC, las líneas que definen el tamaño de los bufferes (#define
      USB_EP1_RX_SIZE ) de los enpoints, qué tamaño máximo puedo darles?

¿Alguien me ayuda?

Gracias y un saludo.
Título: Re: Proyecto PicUSB
Publicado por: zimanka en 06 de Octubre de 2006, 11:33:34
hola
me gustaria saber que velocidad puedo usar con el puerto virtual serial porque la velocidad de usb es 1.5 mbit/s como minimo mientras que la serial en 115kbit/s como maximo entonces a que velocidad iria este proyecto
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 08 de Octubre de 2006, 14:04:50
Another brick in the wall ....

El USB Desencadenado (http://picmania.garcia-cuervo.com/USB_0_Desencadenado.htm) continúa inexorable ganando batalla tras batalla hasta su derrota final.  :mrgreen:

En este caso le toca al HID USB Dispositivo de Interfaz Humana (http://picmania.garcia-cuervo.com/USB_2_HIDTransfers.htm) (Keyboard, Mouse y/o Joystick) el que ha rendido armas y bagajes.

(http://picmania.garcia-cuervo.com/images/USB_HID_KBD_Dump_03.gif)

En este caso, el HID, no necesita de driver alguno para Windows, ya que son tan furiosamente estándares que lo llevan puesto desde que pulsamos sobre aquello de F8 para aceptar al instalar el Windows XP, Home u Profesional.

Si el USB_DESCRIPTOR dice que es un teclado USB el Windows lo cree y lo añade como un teclado USB, si nuestro firmware no funciona como tal que dios nos coja confesados.  :D

El caso es que le he puesto a mi ejemplo un push-button por RB0 y cada vez que lo pulso se envía al PC un teclazo del estilo 'a' y lo incremento para que la siguiente pulsación se envie un 'b' y así sucesivamente ... El Windows lo interpreta como un teclado y lo escribe como si hubiesemos pulsado la correspondiente tecla en un teclado como dios manda.  :mrgreen:

Cuidadín con el tema del pulsador porque si se queda pillado .... inundará nuestro PC de teclazos abcdefghijklmnopqrtsuvwxyz1234567890 .... hasta el infinito.

(http://picmania.garcia-cuervo.com/images/USB_HID_KBD_Dump_02.gif)

(http://picmania.garcia-cuervo.com/images/USB_HID_KBD_Hardawre_in_WinXP.gif)

Título: Re: Proyecto PicUSB
Publicado por: 5GTT en 10 de Octubre de 2006, 01:22:30
Magnifico, ahora ya ni drivers son necesarios.

Una duda, los HID son exclusivamente para ratones teclados y joysticks (y dispositivos que lo emulen) ¿o podria hacerse algo del tipo a la suma  del PicUSB? Me refiero a si se pueden enviar datos del PC al Pic mediante este modo.

Muchas gracias por compartir RedPIC, nunca me cansare de daroslas.

 
Título: Re: Proyecto PicUSB
Publicado por: ma4826 en 12 de Octubre de 2006, 10:49:37
 Por si a alguien le interesa dejo una versión del programa PicUSB para linux usando libusb.

 El binario compilado en Ubuntu 6.06 picusb (http://webs.ono.com/ma4826/picusb) y las fuentes PicUSB-0.2.tar.gz (http://webs.ono.com/ma4826/PicUSB-0.2.tar.gz)

 Para hacerlo me base en Writing a Real Driver In User Space (http://www.linuxjournal.com/article/7466) y la documentacion de libusb.

 Saludos

(http://webs.ono.com/ma4826/Pantallazo-PicUSB.png)
Título: Re: Proyecto PicUSB
Publicado por: J1M en 12 de Octubre de 2006, 12:34:55
Muy bueno Miguel ;) con tu permiso en la próxima actualización de la web lo cuelgo ok??

Saludos y gracias por el programilla :)
Título: Re: Proyecto PicUSB
Publicado por: ma4826 en 12 de Octubre de 2006, 17:39:57
OK, gracias a ti por el PicUSB.

Título: Re: Proyecto PicUSB
Publicado por: Joaquín en 17 de Octubre de 2006, 11:27:55
Hola, he estado mirando el código de Miguel y me surje la misma duda que con Windows.

En la función de escritura o en la de lectura, me da lo mismo, el últmo número es un valor de timeout, ¿pero qué quiere decir ese timeout?

He mirado en el diccionario y parece ser interrupción, pero en algunos textos he visto que puede ser el valor que está el paquete en el puerto. ¿Podéis aclarármelo?

Támbién tengo una duda acerca del tamaño máximo de paquete que puede mandársele al PIC, pues estuve haciendo pruebas con Windows y con más de 64 bytes empezó a darme problemas.

Por último y aunque se sale un poco de este contexto. ¿Hay alguna forma de grabar el pic desde Linux con el GTPUSB+?

Gracias y un saludo.
Título: Re: Proyecto PicUSB
Publicado por: 5GTT en 17 de Octubre de 2006, 19:08:34
El la mpusbapi de microchip, que es la libreria( deberia decir biblioteca xD, que mal hablo) en la que nos basamos patra hacer estas cosas, dice:

- Specifies the time-out interval, in milliseconds. The function
returns if the interval elapses, even if the operation is
incomplete. If dwMilliseconds is zero, the function tests the
data pipe and returns immediately. If dwMilliseconds is INFINITE,
the function's time-out interval never elapses.

No soy muy bueno en ingles, pero con ayuda de algun traductor online y retocandolo, podemos sacar esto:

Especifica el intervalo de interrupción, en milisegundos. La función retorna si el intervalo termina, incluso si la operación es incompleta. Si dwMilliseconds es cero, la función testea los datos del pipe y retorna inmediatamente. Si dwMilliseconds es INFINITO, el intervalo de interrupción de la función nunca termina.

Por lo que deduzco que es una especie de perro guardian.

Saludos.
Título: Re: Proyecto PicUSB
Publicado por: ma4826 en 17 de Octubre de 2006, 19:41:34
Es el tiempo que espera como máximo para que se realice la accion, si no lo consigue en ese tiempo devuelve un error.

Saludos.


Título: Re: Proyecto PicUSB
Publicado por: Joaquín en 18 de Octubre de 2006, 03:03:22
De acuerdo Miguel, gracias por aclararmelo.

Un saludo.
Título: Re: Proyecto PicUSB
Publicado por: vdiazg en 28 de Noviembre de 2006, 19:02:00
Hola Foro, permiteme felicitarte por tu excelente pagina.
Me gusto los articulos sobre USB, he implementado los ejemplos y funciona, mi duda es la siguiente:
 
si el circuito esta emulando un puerto serie virtual (en USB) como haria para decirle a la PC que maneje las otras lineas de control del puerto serie, es decir si quiero manejar el RTS, DTR, o leer los estados del CTS o DSR (ya que en mis aplicaciones con puerto serial real puedo manejar esas lineas) como hago o que comando envio a la PC para que entienda que he manejado una de esas lineas en su puerto serie Virtual, te comento esto ya que como tengo varias aplicaciones en Pics y PC deseo migrar al USB pero me encontre con esa duda, antes era facil ya que el hardware estaba conectado a las lineas fisicas del puerto (las lineas de control del Puerto serie), pero ahora?

Bueno en el Software de la PC no hay problema ya que este continuaria con su funcionamiento normal, pero como hago con el PIC?
 
En otras palabras como puedo implementar un verdadero y completo adaptador de Serie a USB con los PIC18F.
 
Espero tu gran ayuda en esto.
 
Gracias
Título: Re: Proyecto PicUSB
Publicado por: 5GTT en 04 de Diciembre de 2006, 01:09:12
Mira el TUSB3410 de Texas Instruments, en el subforo de programadores lo usa SIspic en su GTP USB-232.

A traves de ese integrado adaptas el serie a USB en vez de emularlo, hay otros como el FTDI (http://www.ftdichip.com/Products/FT232BM.htm) tambien.
Título: Re: Proyecto PicUSB
Publicado por: vdiazg en 06 de Diciembre de 2006, 01:15:40
Bueno tienes razon, ya probe el conversor de TI, pero mi proposito era no usar un integrado externo, sino el mismo PIC, solo que pretendo tambien manejar las otra lineas de control del puerto serie al emularlo con USB.
Gracias de igual forma.
Título: Re: Proyecto PicUSB
Publicado por: kikesoft en 19 de Diciembre de 2006, 02:57:17
Hola a todos

Yo tambien me he montado el TUSB3410 de TI y funciona muy bien, pero como dice el amigo VDiazg, la idea es utilizar un 18F2550 que nos permita tener un USB completo con esas lineas de control (DTR,CTS,RTS,DSR) , desde mi punto de vista debe de tenerlas por alli el metodo CDC (USB - RS232) de microchip pero no he mirado ejemplos , si tienen un ejemplo en CCS o C18 porfavor les pido ke me lo hagan saver.

Gracias
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 12 de Enero de 2007, 12:07:18
Buenooooo .... yo sigo con mi experimentos.  :mrgreen:

Hasta ahora hemos estado trabajando con el método Bulk Transfers (Transferencia masiva) para conectarnos con el PIC vía USB 2.0. (Firmware, Driver y Aplicación+Dll) pero hay más ....  :D

Otro método posible es el CDC USB (Communications Device Classes) que logra utilizar el USB como si fuera u fuese un puerto COM serie, Virtual pero tan puerto COM como el implementado con una UART.  :shock:

Este método nos permite comunicarnos con el PIC mediante cualquier programa en el PC que pueda utilizar un puerto COM serie normal y corriente, como por ejemplo el HyperTerminal de Windows o el Siow del CCS C, además de cualquier aplicación que deseemos hacer en Delphi, Visual Basic u C++ que tenga la posibilidad de leer y escribir puertos COM.  :)

El firmware de nuestro PIC le dice al Windows que es un puerto serie y éste va y se lo cree, añadiendolo como un puerto normal y corriente entre sus dispositivos. Para ello utiliza el mismo driver que usa para los demás puertos serie, por lo que no tenemos instalar un nuevo driver como era el caso del método Bulk Transfer. Solo tenemos que suministrarle un fichero .inf que nos pone a nuestra disposición Microchip y que le va a servir al PC para reconocer como este tipo de dispositivo a nuestro PIC con el correspondiente firmware a través del VIP&PID correspondiente.

Si queréis todos los detalles lo tenéis disponible en EL USB DESENCADENADO : CDC USB (http://picmania.garcia-cuervo.com/USB_3_CDCTransfers.htm)

(http://picmania.garcia-cuervo.com/images/RRUSB_Complete_Cdc_Install_Driver_07.gif)


Esto del CDC es increible señores, y yo sigo flojeando y probando los codigos que ustedes exponen cada día, ahora le tocó el turno al USB DESENCADENADO : CDC USB  que creó RedPic, es que tienen que verlos con sus propios ojos para que se den cuenta, solo hay que seguir las indicaciones y listo, un puerto usart emulado, amigo Red debieras llamar a tu artículo: engañe a su PC, dele COM por USB :D :D
 
aquí unas imagenes:


(http://img248.imageshack.us/img248/9360/1xg8.th.jpg) (http://img248.imageshack.us/my.php?image=1xg8.jpg)

(http://img365.imageshack.us/img365/3553/imagen22yu5km3.th.jpg) (http://img365.imageshack.us/my.php?image=imagen22yu5km3.jpg)

(http://img405.imageshack.us/img405/2843/3za2.th.jpg) (http://img405.imageshack.us/my.php?image=3za2.jpg)

(http://img248.imageshack.us/img248/1108/4lm6.th.jpg) (http://img248.imageshack.us/my.php?image=4lm6.jpg)

(http://img405.imageshack.us/img405/4375/5sf2.th.jpg) (http://img405.imageshack.us/my.php?image=5sf2.jpg)



la cosa que me causó risa y sorpresa es que desconectaba el cable USB y desaparecía el COM, lo volvia a conectar y aparecia el COM de nuevo, eso habría que llamarlo COM en caliente  :D

ya estuve haciendo unas pruebas con el MSCOMM.ocx que se puede usar en el Visual Basic y basicamente se puede usar la típica transmisión USART que estamos acostumbrados ver.

Nota: se puede alimentar el circuito desde el propio Vusb, pero para mayor seguridad mejor es alimentarlo con una fuente externa, solo hay que desconectar el Vusb y meter el Vcc de la fuente de alimentación.

Salu2
Pedro
Título: Re: Proyecto PicUSB
Publicado por: LABmouse en 12 de Enero de 2007, 15:36:18
REDPIC Muchisimas gracias por estos grandes aportes. Realmente  :shock:

Es estupendo lo que se aprende con ustedes. De ahora en adelante para mi tienes el titulo de MAESTRO RedPic.
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 12 de Enero de 2007, 18:09:05
Ja, ja, ja  :D :D :D No, tanto, no tanto.

Te contesto con lo que contestó un gran genio de verdad, mister Thomas Alva Edison, que dijo que toda genialidad se componía de un 10% de inspiración y un 90% de transpiración.

Y para nosotros ese 90% de transpiración consiste en leer docenas de datasheets, cientos de páginas, miles de post ... y después cocinar a fuego lento nuestras pequeñas pócimas e invitar a los amigos a la cena que resulta.

Título: Re: Proyecto PicUSB
Publicado por: raus en 05 de Febrero de 2007, 07:21:00
Hola!!

He estado ojeando el código HID de RedPic, y me gustaría adaptarlo para un pequeño proyecto que tengo en mente: consistiría en una serie de pulsadores y palancas que, dependiendo de su estado, envíen diferentes combinaciones de teclas al PC y, a su vez, una aplicación en el pc debería enviar unos datos al pic, para que este gestione unos LEDS.

Como no manejo muy bien la forma de enviar teclas a una aplicación por software desde windows, me pareció una buena idea hacer que mi hardware sea reconocido como un teclado usb y que asi, envie directamente las pulsaciones de teclas a windows. De todos modos, esto me impediría recibir los datos sobre el estado de leds. Mirando el firmware de RedPic, encontré esto:

/////////////////////////////////////////////////////////////////////////////
//
// usb_keyboard_task()
//
// Sends a packet of keyboard data. The protocol was specified in the HID
// report descriptor (see usb_desc_kbmouse.h), and is:
// tx_msg[0] = HID report id (2)
// tx_msg[1] = modifier (an 8bit bitmap of shift, tab, alt keypress)
// tx_msg[2] = const 0
// tx_msg[3:7] = an array of held down keys. a=4, b=5, etc.
// if msg[2:7]={0} then no keys are held down
//
// rx_msg[1] = HID report id (2)
// rx_msg[0] = 5bit bitmap of led status
//
/////////////////////////////////////////////////////////////////////////////

Si vemos la línea en negrita, parece ser que podría recibir hasta 5 bits, que me da un total de 2^5=32 combinaciones posibles, con lo que ya podría manejar algunos LEDs, ¿no es asi?

El problema es que no sé que tendría que hacer en el programa del pc para poder enviar esos datos al teclado, ¿alguien puede arrojar algo de luz sobre mi ignorancia?

Quizás sea más fácil que haga 2 dispositivos separados, un teclado usb HID para los pulsadores y demás, y otro dispositivo usb CDC, que reciba los datos sobre estado de los leds, ¿no? Preferiría agruparlo todo (LEDS/Salidas y pulsadores/entradas) en un sólo dispositivo, pero como si hago un solo usb CDC, no sé como transformar los datos enviados en pulsaciones de tecla mediante un software (estoy usando C#, pero aun no lo domino), creo que esta será la mejor opción.

¿Qué opináis? Cualquier comentario es bienvenido (excepto insultos personales, jejeje)
Título: Re: Proyecto PicUSB
Publicado por: jra_666 en 15 de Febrero de 2007, 21:16:06
HOLA A TODOS, TENGO UN PROBLEMA CON EL PICUSB, ESPERO QUE ALGUIEN TENGA RESPUESTA A MI PROBLEMA PORQUE ESTO ME ESTA VOLVIENDO LOCO.

TODO COMENZO CUANDO ARME EL PROYECTO TAL Y COMO APARECE EN EL DIAGRAMA PUBLICADO EN http://www.hobbypic.com/index.php?option=com_content&task=view&id=14&Itemid=32, EL PIC 18F2550 LO PROGRAME USANDO EL PROGRAMADOR ART2003 Y TAMBIEN LOGRE INSTALAR LOS DRIVERS EN LA PC. MI PROBLEMA ES QUE EN OCASIONES CONECTO EL CIRCUITO A LA PC Y ME SALE UN MENSAJE DICIENDO QUE EL DISPOSITIVO NO PUDO SER INICIALIZADO O QUE EL DISPOSITIVO USB NO ES RECONOCIDO Y EL LED SE QUEDA EN COLOR ROJO Y DESPUES DE VARIOS INTENTOS LA PC LOGRA RECONOCER EL PICUSB Y EL LED SE PONE EN COLOR VERDE Y BUENO YA TODO FUNCIONA DE MARAVILLA. ALGUIEN SABE COMO PUEDO RESOLVER ESE PROBLEMA????

YA HE INTENTADO DESINTALANDO Y VOLVIENDO A INSTALAR LOS DRIVES, TAMBIEN EN EL FORO LEI QUE SE PODIA USAR DIFERENTES CRISTALES SIEMPRE Y CUANDO SE MODIFIQUE EL VALOR DEL OSCILADOR PARA LOGRAR GENERAR LOS 4MHZ, PERO NADA DE ESTO ME HA DADO BUENOS RESULTADOS, EL PROBLEMA SIGUE  :shock: :x

ESPERO QUE ALGUIEN ME PUEDA AYUDAR Y DE ANTEMANO GRACIAS :-/



Título: Re: Proyecto PicUSB
Publicado por: elmasvital en 15 de Febrero de 2007, 22:23:14
HOLA A TODOS, TENGO UN PROBLEMA CON EL PICUSB, ESPERO QUE ALGUIEN TENGA RESPUESTA A MI PROBLEMA PORQUE ESTO ME ESTA VOLVIENDO LOCO.

TODO COMENZO CUANDO ARME EL PROYECTO TAL Y COMO APARECE EN EL DIAGRAMA PUBLICADO EN http://www.hobbypic.com/index.php?option=com_content&task=view&id=14&Itemid=32, EL PIC 18F2550 LO PROGRAME USANDO EL PROGRAMADOR ART2003 Y TAMBIEN LOGRE INSTALAR LOS DRIVERS EN LA PC. MI PROBLEMA ES QUE EN OCASIONES CONECTO EL CIRCUITO A LA PC Y ME SALE UN MENSAJE DICIENDO QUE EL DISPOSITIVO NO PUDO SER INICIALIZADO O QUE EL DISPOSITIVO USB NO ES RECONOCIDO Y EL LED SE QUEDA EN COLOR ROJO Y DESPUES DE VARIOS INTENTOS LA PC LOGRA RECONOCER EL PICUSB Y EL LED SE PONE EN COLOR VERDE Y BUENO YA TODO FUNCIONA DE MARAVILLA. ALGUIEN SABE COMO PUEDO RESOLVER ESE PROBLEMA????

YA HE INTENTADO DESINTALANDO Y VOLVIENDO A INSTALAR LOS DRIVES, TAMBIEN EN EL FORO LEI QUE SE PODIA USAR DIFERENTES CRISTALES SIEMPRE Y CUANDO SE MODIFIQUE EL VALOR DEL OSCILADOR PARA LOGRAR GENERAR LOS 4MHZ, PERO NADA DE ESTO ME HA DADO BUENOS RESULTADOS, EL PROBLEMA SIGUE  :shock: :x

ESPERO QUE ALGUIEN ME PUEDA AYUDAR Y DE ANTEMANO GRACIAS :-/


Ante todo pedirte que te leas las normas del foro que encontrarás en la pagina principal, y que no escribas en mayuscula porque molestan y en internet es sinónimo de gritar.

Con respecto a la duda tiene toda la pinta de ser un problema del circuito mas que del programa que lleva dentro, enseña el diseño que tienes para hacer funcionar el circuito, pero todo parece que olvidaste algun condensador de filtro o desacoplo o que tienes algun mal contacto.

1 saludo.
Título: Re: Proyecto PicUSB
Publicado por: SavageChicken en 16 de Febrero de 2007, 00:45:15
Si vemos la línea en negrita, parece ser que podría recibir hasta 5 bits, que me da un total de 2^5=32 combinaciones posibles, con lo que ya podría manejar algunos LEDs, ¿no es asi?

El problema es que no sé que tendría que hacer en el programa del pc para poder enviar esos datos al teclado, ¿alguien puede arrojar algo de luz sobre mi ignorancia?

Hola raus:

No quiero desviarme del hilo, pero para responder a tu pregunta, el protocolo de comunicación entre el PC y el teclado es bidireccional, por ende, el PC puede enviarle varios comando al Teclado, por lo que podrías controlar mucho más de solo 32 combinaciones de leds.

Escribiendo en cierta direccion de memoria del computador, este se encargara de enviarle esa información al teclado.
Averigua un poco más al respecto. Te dejo esta direccion, aunque sale poco ahi, puede servirte de punto de partida:

http://www.zator.com/Hardware/H7_1_2.htm

Aquí hay algo mas: http://www.computer-engineering.org/ps2keyboard/ chequea la sección The i8042 Keyboard Controller:

Espero te sirva
Salud 8)
Título: Re: Proyecto PicUSB
Publicado por: Renatox_ en 17 de Febrero de 2007, 19:53:54
 Hola J1M quiero darte las gracias por el proyecto PIC-USB me ha servido mucho y ahora puedo manejar el puerto USB y hacer programas en LabView.

 Saludos.
Título: Re: Proyecto PicUSB
Publicado por: sepul en 29 de Marzo de 2007, 07:21:08
Hola!Antes de nada, gracias a todos y en especial a J1M por el proyecto del PicUSB.
Tengo un pequeño problema con el PicUSB y con el grabador GTP-USB Lite (es el unico que uso para programar los PICs)
Resulta que cuando conecto el PIC al ordenador me funciona, pero si luego conecto el grabador (aunque ya haya desconectado el PIC) no me funciona el grabador, y esto pasa también al revés, es decir, si en un principio conecto el Grabador y luego el PIC pues también me da error en el último.
Para poder complementarlos tengo que reiniciar el ordenador, si no nada.

en el administrador de dispositivos cuando me da error en uno u otro me pone el siguiente mensaje:
Citar
Windows no puede cargar el controlador de dispositivo para este hardware porque instancia anterior del controlador de dispositivo está aún en memoria. (Código 38)

Ah!decir también que los conecto en dos puertos distintos.
¿Sabeis como puedo solucionar esto?
Título: Re: Proyecto PicUSB
Publicado por: 5GTT en 02 de Abril de 2007, 01:29:25
Has probado a cambiar el vid y el pid, supongo que entrara en conflicto el del programador con el del PicUSB.

Título: Re: Proyecto PicUSB
Publicado por: sepul en 02 de Abril de 2007, 06:26:49
El vid es el mismo, pero el pid es distinto, me parece, claro.
Gracias, probaré a ver si lo arreglo.
Título: Re: Proyecto PicUSB
Publicado por: Shardik en 18 de Abril de 2007, 17:11:29
Tengo un PIC 18F4550 funcionando necesariamente a 40 MHZ (10 MHZ con HSPLL) hay alguna manera de trabajar con un usb?
Título: Re: Proyecto PicUSB
Publicado por: carlos7890 en 08 de Mayo de 2007, 09:19:08
Se adjunta un programa realizado en LabWindows/CVI que interactúa con el excelente proyecto de PICUSB realizado por J1M. Aprovecho para preguntar, si hay interesados en abrir un subforo sobre el programa de Labwindows, el cual es muy potente pero, a mi entender, muy amarrete en cuanto a la información.
El Link es:
http://www.4shared.com/file/78514274/c1b76cef/PicUSB.html
Título: Re: Proyecto PicUSB
Publicado por: Geo en 20 de Mayo de 2007, 15:23:36
HOLA A TODOS, TENGO UN PROBLEMA CON EL PICUSB, ESPERO QUE ALGUIEN TENGA RESPUESTA A MI PROBLEMA PORQUE ESTO ME ESTA VOLVIENDO LOCO.
(Aunque quizá ya lo arreglaste...) estoy casi seguro que tu problema está con la configuración del oscilador, muy probablemente estás usando un cristal de diferente valor al del cto. pero no lo has indicado en el código del firmware.

Por otro lado, un agradecimiento más para el autor de este proyecto, muy bueno (lo acabo de probar ayer :P).

Saludos,
JJ (Geo).
Título: Re: Proyecto PicUSB
Publicado por: Shardik en 23 de Mayo de 2007, 16:33:21
Ya he conseguido que el Pc me detecte el PIC, ahora tengo que hacer el driver con el DDK, sabeis si hay algun tutorial donde expliquen como hacerlo? He encontrado muchos ya hechos, pero ninguno explica como lo hace.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 23 de Mayo de 2007, 16:53:44
La DDK no la utilicé para crear el driver, sino la DLL que exporta el icono que se pone en el panel de control, simplemente, el driver es el mismo que suministra microchip, con algunas modificaciones, precisamente esas que hacen que aparezca el icono, pero son simplemente a nivel de .inf. Relee el texto de la página, verás como dice eso, es extraño que ya sois varios diciendo lo del tema del driver, creo que debe estar mal expresado, pero no tengo claro en que punto... si me dices que es lo que te ha llevado a pensar q tienes que crear el driver lo modifico para no llevar a confusiones a la gente.

un saludo!
Título: Re: Proyecto PicUSB
Publicado por: Geo en 23 de Mayo de 2007, 19:09:48
Creo que está claro para qué se usa el DDK, al menos me lo parece :P.

Este es el código que yo utilicé, es una aplicación de consola en C/C++, no me gusta usar mucho los tipos de datos de la API de Windows pero bueno, se entiende :P.
Lo compilé utilizando Dev-C++ (MinGW), y para enlazar tuve que hacerlo con la DLL que utilizó 5GTT pues me daba errores con la original de Microchip, aquí también me gustaría saber de dónde obtuvo 5GTT la versión que usa :).

Código: C++
  1. #include <stdio.h> // printf, system
  2.  
  3. #include <iostream>
  4.  
  5. using std::cout;
  6.  
  7. using std::endl;
  8.  
  9. using std::cin;
  10.  
  11. #include <windows.h>
  12.  
  13. // Cabecera API USB de Microchip
  14.  
  15. // Hay que incluírla después de windows.h
  16.  
  17. // (o agregar windows.h a _mpusbapi.h)
  18.  
  19. #include "_mpusbapi.h"
  20.  
  21.  
  22.  
  23. // Declaración de funciones
  24.  
  25. void openPipes();
  26.  
  27. void closePipes();
  28.  
  29. void sendPacket( unsigned char* sendData, DWORD sendLength );
  30.  
  31. void receivePacket( unsigned char* receiveData, DWORD receiveLength );
  32.  
  33. void sumaPIC( BYTE sumando1, BYTE sumando2 );
  34.  
  35. UINT resultadoPIC();
  36.  
  37. void ledPIC( UINT led );
  38.  
  39.  
  40.  
  41. int menu();
  42.  
  43. // Constantes para el menú
  44.  
  45. #define OPCION_SALIR    6
  46.  
  47. #define OPCION_APAGAR   1
  48.  
  49. #define OPCION_LEDVERDE 2
  50.  
  51. #define OPCION_LEDROJO  3
  52.  
  53. #define OPCION_SUMA     4
  54.  
  55. #define OPCION_DOSLEDS  5
  56.  
  57.  
  58.  
  59. // Variables globales
  60.  
  61. char* vidPid = "vid_04d8&pid_0011";
  62.  
  63. char* outPipe = "\\MCHP_EP1";
  64.  
  65. char* inPipe = "\\MCHP_EP1";
  66.  
  67. void* receiveData;
  68.  
  69. DWORD* receiveLength;
  70.  
  71. HANDLE myOutPipe;
  72.  
  73. HANDLE myInPipe;
  74.  
  75. BYTE sumando1 = 0;
  76.  
  77. BYTE sumando2 = 0;
  78.  
  79.  
  80.  
  81. int main() {
  82.  
  83.        
  84.  
  85.         int opcion = 0;
  86.  
  87.         do {
  88.  
  89.                 opcion = menu();
  90.  
  91.  
  92.  
  93.                 switch( opcion ) {
  94.  
  95.                         case OPCION_APAGAR:
  96.  
  97.                                 cout << "Apagando leds..." << endl;
  98.  
  99.                                 ledPIC( 0x00 );
  100.  
  101.                                 break;
  102.  
  103.                         case OPCION_LEDVERDE:
  104.  
  105.                                 cout << "Encendiendo LED verde" << endl;
  106.  
  107.                                 ledPIC( 0x01 );
  108.  
  109.                                 break;
  110.  
  111.                         case OPCION_LEDROJO:
  112.  
  113.                                 cout << "Encendiendo LED rojo" << endl;
  114.  
  115.                                 ledPIC( 0x02 );
  116.  
  117.                                 break;
  118.  
  119.                         case OPCION_SUMA:
  120.  
  121.                                 cout << "Primer sumando (0-99): "; scanf( "%d", &sumando1 );
  122.  
  123.                                 cout << "Segundo sumando (0-99): "; scanf( "%i", &sumando2 );
  124.  
  125.                                 sumaPIC( sumando1, sumando2 );
  126.  
  127.                                 cout << "Resultado: " << resultadoPIC() << endl;
  128.  
  129.                                 system( "pause" );
  130.  
  131.                                 break;
  132.  
  133.                         case OPCION_SALIR:
  134.  
  135.                                 system( "cls" );
  136.  
  137.                                 cout << "Saliendo..." << endl;
  138.  
  139.                                 break;
  140.  
  141.                         case OPCION_DOSLEDS:
  142.  
  143.                                 ledPIC( 0x03 );
  144.  
  145.                                 break;
  146.  
  147.                         default:
  148.  
  149.                                 cout << "La opcion no existe, intente de nuevo" << endl;
  150.  
  151.                                 system( "pause" );
  152.  
  153.                                 break;
  154.  
  155.                 }
  156.  
  157.         } while ( opcion != OPCION_SALIR );
  158.  
  159.        
  160.  
  161.         system( "pause" );
  162.  
  163.        
  164.  
  165.     return 0;
  166.  
  167. }
  168.  
  169.  
  170.  
  171. void openPipes() {
  172.  
  173.      DWORD selection = 0;
  174.  
  175.      myOutPipe = MPUSBOpen( selection, vidPid, outPipe, 0, 0 );
  176.  
  177.      myInPipe = MPUSBOpen( selection, vidPid, inPipe, 1, 0 );
  178.  
  179. }
  180.  
  181.  
  182.  
  183. void closePipes() {
  184.  
  185.      MPUSBClose( myOutPipe );
  186.  
  187.      MPUSBClose( myInPipe );
  188.  
  189. }
  190.  
  191.  
  192.  
  193. void sendPacket( unsigned char* sendData, DWORD sendLength ) {
  194.  
  195.      unsigned short sendDelay = 1000;
  196.  
  197.      DWORD sentDataLength;
  198.  
  199.      
  200.  
  201.      openPipes();
  202.  
  203.      MPUSBWrite( myOutPipe, (void*)sendData, sendLength, &sentDataLength, sendDelay );
  204.  
  205.      closePipes();
  206.  
  207. }
  208.  
  209.  
  210.  
  211. void receivePacket( unsigned char* receiveData, DWORD* receiveLength ) {
  212.  
  213.      unsigned short receiveDelay = 1000;
  214.  
  215.      DWORD expectedReceiveLength = *receiveLength;
  216.  
  217.      
  218.  
  219.      openPipes();
  220.  
  221.      MPUSBRead( myInPipe, (void*)receiveData, expectedReceiveLength, receiveLength, receiveDelay );
  222.  
  223.      closePipes();
  224.  
  225. }
  226.  
  227.  
  228.  
  229. void sumaPIC( BYTE sumando1, BYTE sumando2 ) {
  230.  
  231.      BYTE sendBuf[ 3 ];
  232.  
  233.      
  234.  
  235.      sendBuf[ 0 ] = 0x00;
  236.  
  237.      sendBuf[ 1 ] = sumando1;
  238.  
  239.      sendBuf[ 2 ] = sumando2;
  240.  
  241.  
  242.  
  243.      sendPacket( sendBuf, 3 );
  244.  
  245. }
  246.  
  247.  
  248.  
  249. UINT resultadoPIC() {
  250.  
  251.         UINT result = 0;
  252.  
  253.         BYTE receiveBuf[ 1 ];
  254.  
  255.        
  256.  
  257.         DWORD receiveLength = 1;
  258.  
  259.         receivePacket( receiveBuf, &receiveLength );
  260.  
  261.         result = receiveBuf[ 0 ];
  262.  
  263.        
  264.  
  265.         return result;
  266.  
  267. }
  268.  
  269.  
  270.  
  271. void ledPIC( UINT led ) {
  272.  
  273.         BYTE sendBuf[ 2 ];
  274.  
  275.        
  276.  
  277.         sendBuf[ 0 ] = 0x01;
  278.  
  279.         sendBuf[ 1 ] = (BYTE)led;
  280.  
  281.         sendPacket( sendBuf, 2 );
  282.  
  283. }
  284.  
  285.  
  286.  
  287. int menu() {
  288.  
  289.         system( "cls" );
  290.  
  291.         cout << "[ 1 ] Apagar LEDs" << endl;
  292.  
  293.         cout << "[ 2 ] Encender LED verde" << endl;
  294.  
  295.         cout << "[ 3 ] Encender LED rojo" << endl;
  296.  
  297.         cout << "[ 4 ] Realizar Suma" << endl;
  298.  
  299.         cout << "[ 5 ] Encender los dos LEDs" << endl;
  300.  
  301.         cout << "[ 6 ] Salir" << endl;
  302.  
  303.         cout << "Opcion: ";
  304.  
  305.        
  306.  
  307.         int opcion;
  308.  
  309.         cin >> opcion;
  310.  
  311.        
  312.  
  313.         return opcion;
  314.  
  315. }

Nos vemos y nuevamente gracias a J1M.
Título: Re: Proyecto PicUSB
Publicado por: Shardik en 24 de Mayo de 2007, 09:18:55
La DDK no la utilicé para crear el driver, sino la DLL que exporta el icono que se pone en el panel de control, simplemente, el driver es el mismo que suministra microchip, con algunas modificaciones, precisamente esas que hacen que aparezca el icono, pero son simplemente a nivel de .inf. Relee el texto de la página, verás como dice eso, es extraño que ya sois varios diciendo lo del tema del driver, creo que debe estar mal expresado, pero no tengo claro en que punto... si me dices que es lo que te ha llevado a pensar q tienes que crear el driver lo modifico para no llevar a confusiones a la gente.

un saludo!

Te agradezco mucho tu respuesta, veras he visto que hay 2 maneras de hacerlo, una es hacer tu mismo el driver y otra modificar el de microchip. Mi pregunta ahora es, donde viene explicado como y qué modificar del driver de microchip? Como usar las clases del DLL para comunicarte con el USb, etc... Mi problema es que he visto varios proyectos ya hechos, pero como es para un Proyecto final de carrera no puedo simplemente plantar el codigo, tengo que explicar como y por que lo hago, y esa informacion es la que no encuentro, por ej. como usar las clases del microchip, etc... Si hay algun sitio donde lo expliques (no he leido todo el tema) pues lo leo y ya esta, y si no pues lo hare a la vieja usanza, viendo codigo y razonando. Hasta ahora si no he entendido mal simplemento hay que usar las clases que da microchip en un programa que hayas creado tu en C++ por ej.
Título: Re: Proyecto PicUSB
Publicado por: Shardik en 25 de Mayo de 2007, 08:37:15
Weno ya he conseguido entender como funcionan las clases y crear mi propia comunicacion USB, con  el driver tuyo, solo necesito un poco de informacion teorica sobre como se crea el .inf y se modifica el driver y esas cosas.
Título: Re: Proyecto PicUSB
Publicado por: Geo en 31 de Mayo de 2007, 20:07:56
Escribo para agradecer nuevamente por compartir este proyecto, y a Miguel por el código para Linux con GTK, me basé en él para hacer lo mismo pero usando wxWidgets (me gusta esta librería :P), y también ya logré portarlo a Windows usando libusb-win32 (http://libusb-win32.sourceforge.net/), sólo tuve que cambiar algunas cosillas :).

Nuevamente, GRACIAS.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 01 de Junio de 2007, 05:33:18
Hola Geo, quizá la librería libusb-win32 sea un camino para conseguir compatibilidad con Vista ya que es código abierto... a ver! Respecto a linux, le pegaré un ojo al wx ... estoy muy pez con ese SO..!!... gracias por la info ;)
Título: Re: Proyecto PicUSB
Publicado por: Geo en 01 de Junio de 2007, 21:22:06
Cierto, me había olvidado de probarlo en Windows Vista. Mañana mismo lo intento :).

Título: Re: Proyecto PicUSB
Publicado por: J1M en 02 de Junio de 2007, 19:50:07
Bueno voy a ir posteando por aquí los avances que haga con el driver para Vista... es un campo muy nuevo este de los drivers asi que no aseguro un final feliz, pero se intentará!

En primer lugar, vamos a necesitar la DDK, si consultamos la página de Microsoft nos encontramos con dos distintas:
http://www.microsoft.com/whdc/driver/foundation/WhichDDK.mspx

Una es la "Windows Server 2003 Service Pack 1 DDK" que se utiliza para crear drivers para versiones de sistemas operativos anteriores a Windows Vista, es decir, (2k, XP, XP64, 2k3, 2k3 64) si teneis interés en ella se puede descargar de aquí (230Mb):
http://www.microsoft.com/whdc/devtools/ddk/default.mspx

La otra es "Windows Vista WDK", esta es la que nos va a interesar ya que el driver compatible con el XP ya lo tenemos, por lo que en el peor de los casos, si no tuviera retrocompatibilidad, le añadimos un par de lineas al .inf del driver nuevo que creemos para que lea el antiguo, es decir, el que proporciona Microchip. Bien, una vez sabemos que tenemos que bajar la WDK (Windows Driver Kit), vamos a ver de donde, se puede obtener por dos sitios distintos, la página de Microsoft siguiendo los pasos que indican en esta página, en el vínculo "How to Get..." y pinchando en este, despúes sobre "How to Participate..."
http://www.microsoft.com/whdc/DevTools/WDK/default.mspx

Otra forma más rápida y puesto que el software lo ofrecen de forma gratuita, aunque rebuscada, es descargarlo del eMule (2,3Gb):
ed2k://|file|Microsoft.Windows.Vista.Driver.Kit.RTM-XiSO.FSJ.iso|2492934144|59661A4054C50B6B0B59B3A3831CDEF5|/

Una vez, descargado, el siguiente paso es empezar a mirar ejemplos e intentar entender algo!, asi que, eso es lo que voy a estar haciendo hasta que os vuelva a pegar otro rollo como el que acabo de soltar!

saludos.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 03 de Junio de 2007, 07:48:59
Bueno he encontrado una pequeña luz, parece que la tendencia va a ser utilizar algo llamado WinUSB, es un driver que está integrado en Vista, y que es compatible con XP(aunque no lo lleva integrado, habrá que copiarlo). Lo particular de este driver es que se va a poder usar de una forma parecida a como se usa el puerto COM. Vamos a tener que crear un .inf q lo una todo y usar este driver y su dll en vez de la que teníamos de microchip. Os dejo con unos links por si quereis ir mirando cosillas, yo me pongo ya a estudiar! que siempre me pongo a cacharrear con los examenes a la 'vista' jejeje

http://www.osronline.com/ShowThread.cfm?link=108714
http://osdir.com/ml/lib.libusb.devel.general/2006-12/msg00027.html
http://blogs.msdn.com/peterwie/archive/2007/01/10/fixing-the-umdf-usb-samples-to-install-both-on-xp-vista.aspx
http://msdn2.microsoft.com/en-us/library/ms790696.aspx
http://66.102.9.104/search?q=cache:n_UmlO6BJokJ:forum.insanelymac.com/index.php%3Fact%3DPrint%26client%3Dprinter%26f%3D63%26t%3D39172+WinUSB.sys&hl=es&ct=clnk&cd=10&gl=es&client=firefox-a
Título: Re: Proyecto PicUSB
Publicado por: J1M en 03 de Junio de 2007, 09:43:18
Habemus driver compatible con Vista x86, x64 y XP!!!!!!! :D :D aún no lo posteo x aquí pq está por pulir y tengo q crear una aplicación para que realmente se vea que funciona.... pero el PicUSB ya se instala en Vista x64!!  :):):)
Título: Re: Proyecto PicUSB
Publicado por: Geo en 03 de Junio de 2007, 11:24:46
En cuanto a libusb-win32, todavía no tuve oportunidad de probar, en el foro comentan algunos que les funciona sin problemas en Windows Vista pero a algunos otros no, aunque se ha comentado por allí la posibilidad de utilizar WinUSB en alguna futura implementación.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 03 de Junio de 2007, 11:35:43
Hola Geo, a los que le funciona en Vista la libusb creo q es solo para la versión x86, es decir, la de 32bits. Con esto que ando haciendo va a servir también para la x64, ya que cambia en algunos aspectos el tema de drivers, pero bueno, la cosa está solucionada, e incluso con el iconito de marras en el Panel de Control! ahora tendré q pelearme un poco con el WinUSB a ver como se envian/reciben datos. En la página de las msdn q puse antes aparece. En fin, poquito a poco. La verdad estaría bien crear algo unificado y para todas las plataformas, es la idea del libusb. Mientras tanto, me conformo con unificar en windows con el WinUSB! :p
Título: Re: Proyecto PicUSB
Publicado por: Geo en 03 de Junio de 2007, 22:56:35
Ah, no había pensado en eso :).

Bien, lo que probé: PicUSB con la dll de Microchip en Windows Vista no funciona (sin modificar nada del proyecto que funciona en XP), solamente la primer instrucción enviada y después el PIC ya no hace caso. Con la libusb-win32 en Windows Vista 32 bits funciona igual que en Windows XP, no tuve ningún problema (solamente instalar el driver y listo). Lo que no sé es con respecto a la versión x64, no tengo a la mano para poder probar, aunque libusb-win32 incluye el driver para x64 también.

Lo de WinUSB, ¿lo estás manejando en C++ o con C#?
Título: Re: Proyecto PicUSB
Publicado por: J1M en 04 de Junio de 2007, 03:25:54
anda, el libusb incluye driver para vista x64??? jode, juraría haber leído en los foros que no daban soporte todavía! pues voy corriendo a leerlo, pq el trabajo podría estar hecho ya! XDDD

Gracias por el apunte

pd: el WinUSB aún no lo he tocado en lo que a programación se refiere, pero en principio lo haría con VC#, mas que nada, pq de VC++ ni idea! :p
Título: Re: Proyecto PicUSB
Publicado por: J1M en 04 de Junio de 2007, 06:28:17
malas noticias... el driver no es para Vista x64, sino para XP x64 :(:( ... bueno, seguiré con la romántica idea del WinUSB! :p ... aunque creo q hasta el finde no voy a poder volver a trastear (eso si logro controlar mi furia interior! jejej)
Título: Re: Proyecto PicUSB
Publicado por: softjad en 06 de Junio de 2007, 13:34:35
Hola a todos,

Tengo un problema con el usb,
¿Qué tengo que poner en la función de recibir en el  c# para recibir este dato:?


Código: [Seleccionar]
TX_array[17]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];
 usb_put_packet(1, TX_array, 17, USB_DTS_TOGGLE);

Saludos
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 07 de Junio de 2007, 21:34:14
Hola J1M, este proyecto es excelente!  :P 

Bueno queriendo avanzar mas cn esto tuve unos problemas el intentar mandar del PIC al USB letras. Ocea agrande el TExtBox y cambie resultado por:
Código: [Seleccionar]
resultado="PRUEBA"; cambiando int8 de envia[] por char pero ni asi funciono, enves se mostro los numeros 234.

Creo q el problema esta en q "ResultadoPIC()" no puede cambiar los numeros q manda el pic por letras, o algo asi. Nose q estare haciendo mal, podrias ayudarme ??


salu2  8) 8)
Título: Re: Proyecto PicUSB
Publicado por: juanpavela en 10 de Junio de 2007, 13:35:04
hola apenas vengo a entrar a este fantastico foro propuesto por J1M, empeze a leer pero sinceramente no entiendo nada, yo trabajo con pic y agradeceria que me dijeran que debo hacer primero, en mi picc tengo unos ejemplos que son el usb_mouse, usb_hid, usb_scope, deberia quemarlos asi como si nada e inmediatamente puedo tener un ejemplo de como empezar atrabajar con usb??, mi pic es un 18f2550, les agradazco de antemano y espero me puedan ayudar con este buen tema
gracias
Título: Re: Proyecto PicUSB
Publicado por: J1M en 11 de Junio de 2007, 08:48:39
Hola a todos, perdon por el retraso, ando de examenes...

En primer lugar, peleaos con el código, dadle vueltas, buscad ejemplos similares por internet y en último recurso, preguntad... que así es como se aprende! ;)

- softjad: Sigue el ejemplo PicUSBNUT, es lo mismo que lo que tratas de hacer, pero al revés, a ver si así tienes suerte. De primeras no veo el fallo en el código :S... supongo que has cambiado el tamñano de los buffer de escritura/lectura.

- jeremylf: Tengo mucho morro pero, la respuesta también te sirve la del compañero anterior. Para decirte algo que funcione tendría que hacer el código :S pq el visual c# y los 'cast' de funciones son 'muy suyos' ... intenta buscar ejemplos sobre el tema en páginas como csharpcorner.

- juanpavela: Lo mas sencillo que te vas a poder encontrar es el ejemplo PicUSB, dale vueltas y vueltas, verás que al final terminas viendo donde está "la parte superior y la inferior", de primeras, en esto como en todo, es dificil entender nada, dedicale un tiempo y verás q en nada le tienes el truquillo pillado!

Perdonad por las respuestas tan 'Fuzzy' ....

un saludo!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 11 de Junio de 2007, 21:05:41
Creo q lo de enviar desde el PIC al PC texto esta algo dificil y requiere de un nuevo codigo en el C# como mencionas J1M, es algo mas avanzado me supongo asique lo dejare por el momento de lado. Pues bien, ahora probando y entendiendo todo esto me dio un error al pasar mas de 1 byte del PIC al PC y pues lo mira y mira y no encuentro ningun fallo  :? ... Creo q es parecido al probema de softjad.

Esto tengo en el CCS:
Código: [Seleccionar]
//Definiciones para interactuar con el USB:
#define modo      recibe[0]
#define param1    recibe[1]
#define param2    recibe[2]
#define dato0      envia[0]
#define dato1    envia[1]


void main(void)
{
   //Variables:
   int8 recibe[3];
   int8 envia[2];   
               
   while (TRUE)
   { 
      if(usb_enumerated())          //si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //si el endpoint de salida contiene datos del host
         {
            usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe
           
            if (modo == 0) // Modo_Suma
            {
                  dato0=24;
                  dato1=4;
                  usb_put_packet(1,envia,2,USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
            }
         }
      }
   }
}

Y en el C#:
Código: [Seleccionar]
public uint Tiempo()
        {
            uint dato = 0;

            byte* receive_buf = stackalloc byte[2];

            DWORD RecvLength = 2;

            ReceivePacket(receive_buf, &RecvLength);
            dato = receive_buf[0];

            return dato;
        }

Para el envio de dato del PC al PIC uso SumaPIC().
Cuando esta asi: dato=receive_buf[0] Si funciona y devuelve 24, pero cuando pongo enves del 0 el 1... muestra 0, cuando deberia mostrar 4 :? :?.

Q estara pasando?? Ya vi tb el PicUSBNUT y no encuentro alguna falla (de lo poco q se) al enviar datos del PIC a la PC  :? 


salu2 8) 8)
Título: Re: Proyecto PicUSB
Publicado por: softjad en 12 de Junio de 2007, 12:22:19
A mi solo me recibe el primer byte, los otros no se para donde me van. Me deberiam quedar en el array dados pero me aparecen zeros.
O sea, el pic envia [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] e en el pc me recibe [1,0,0,0,0,0,0,0,.......].

Que hago mal?!  :?

Alguien lo ha conseguido?
Título: Re: Proyecto PicUSB
Publicado por: J1M en 13 de Junio de 2007, 10:05:27
softjad y jeremy, si solo te recibe un byte, estoy convencido que el fallo está en que no defines el tamaño de pipe adecuado, lo has cambiado para tus necesidades, o has dejado el que venía por defecto en el PicUSB???  Me refiero a estas lineas:

- En CCS:

#define USB_EP1_TX_SIZE    1                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    3                 //size to allocate for the rx endpoint 1 buffer

dice que desde el PIC se envía un byte, y se reciben 3. Si no cambiais estos valores, estais limitados a ellos, de ahí vienen vuestros problemas. El máximo que se puede establecer por endpoint de TX/RX es de 64bytes.

saludos
Título: Re: Proyecto PicUSB
Publicado por: softjad en 13 de Junio de 2007, 10:23:05
xiissss, poes es esso mismo que tengo. lo voy alterar e testar.
Muchas gracias!!!
Salu2
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 13 de Junio de 2007, 21:09:32
Yeee! era eso, gracias J1M !!!  :-/


Salu2 8) 8)
Título: Re: Proyecto PicUSB
Publicado por: Geo en 13 de Junio de 2007, 21:14:33
Lo más probable es que el problema sea lo que comenta J1M. Lo único que quería apuntar es esto, atención a la instrucción:

Código: [Seleccionar]
ReceivePacket(receive_buf, &RecvLength);en la variable RecvLength se guarda el número de bytes leídos, allí puedes verificar que hayas leído el número que esperas, que seguramente devolvió 1 en las ocasiones que no te ha funcionado como deseas (de allí ya puedes ver que la operación de lectura no es el problema :P).

Por otro lado, estoy haciendo una prueba para realizar una multiplicación en lugar de una suma. El resultado va en una variable de 2 bytes, así que la separo para meterla al vector de dos bytes que se envía, sin embargo, por más intentos que he hecho siempre recibo un 0 en el byte que representa la parte alta :(.
Código: [Seleccionar]
int16 mul;
mul = param1 * param2;
envia[ 0 ] = mul & 0xff;
envia[ 1 ] = ( mul & 0xff00 ) >> 8;
No importa lo que haga, al leer en la computadora el segundo byte siempre es 0 :(, ¿alguien conoce alguna particularidad del compilador CCS que sobre los corrimientos?
-----------------------------
Edit:
Ya lo arreglé, es sólo que el compilador me hizo pensar un poco. El problema es que al multiplicar dos int8 el resultado es un int8, no como en la PC ;), ni como en los Motorola :P, ya me iré acostumbrando al C en los PIC :D.
Código: [Seleccionar]
int16 mul;
int16 a, b;
a = param1; b = param2;
mul = a * b;

// o también
mul = ( int16 )param1 * ( int16 )param2;

Saludos.
Título: Re: Proyecto PicUSB
Publicado por: juanpavela en 18 de Junio de 2007, 13:50:35
Hola ok J1M voy adarle vueltas a este ejemplito, espero entenderlo al derecho y al reves pero tengo unas dudas que agradeceria que alguien me las aclarara
1. al principio estuve leyendo y no encontre para que sirve el PicUSB.h pq al unico que llamas es al usb.h
2.como puedo probar el programa del 2550 directamente desde el hyperterminal?
3. hablas de un driver que desafortunadamente no tengo, es un driver incluido en el picc??
Título: Re: Proyecto PicUSB
Publicado por: J1M en 18 de Junio de 2007, 14:12:12
1.- Son los Descriptores, los llama el picusb.c
2.- Tendrías que instalar el driver CDC, es otro de los tres modos de funcionamiento que tiene el USB, el ejemplillo picusb está preparado para el modo DLL. En la carpeta de ejemplos del CCS tienes como usar el CDC.
3.- Si has bajado el ejemplo PicUSB de mi página, encontrarás todo lo que necesitas en el archivo comprimido y organizado por carpetas ;)

saludos y suerte en el mundo usb! :)
Título: Re: Proyecto PicUSB
Publicado por: juanpavela en 18 de Junio de 2007, 14:38:00
listo, ya tengo todo para empezar pero me parece que probarlo con el hyperterminal no va a ser tan facil como creia, crei que simplemente podria ver que transmitia y si era posible enviarle un caracter, no es esto posible sin necesidad de ir a otro ejemplo?? o te refieres simplemente a que puedo utilizar tu ejemplo y cambiar el driver que viene con el CCS
gracias
Título: Re: Proyecto PicUSB
Publicado por: J1M en 18 de Junio de 2007, 14:47:05
no, no puedes simplemente ver que se transmite, son protocolos distintos y por lo tanto incompatibles entre sí.

Si que puedes usar el hyperterminal como interface de usuario, pero como te digo para ello debes usar el USB en modo CDC, que lo que hace es instalar un puerto serie (COM) virtual, y entonces puedes usarlo como tal. Por ello con este modo podrías usar el hyperterminal, ya que se conecta a un puerto COM.

Primero tendrás que definir que aplicación quieres usar, después decidirte por uno de los modos de funcionamiento (DLL, CDC, HID)... busca por el foro que hay info de como usar uno u otro, que ventajas e inconvenientes presentan, etc.

saludos
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 18 de Junio de 2007, 17:15:20
Hola. La otra ves J1M dijiste q solo se puede enviar 64 bytes por endpoint, no le tome mucha inportancia porq estaba en otra y ahora quisiera entenderlo un poco mas yaq es posible q necesite enviar mas datos del maximo q me dan.

Entonces, se que andas muy ocupado pero cuando tengas tiempo en pasarte por aca podrias decirme si puedo pasar mas de 64 bytes en un solo envio y como?, y q es eso de los endpoint q todavia no entiendo? Te agradeceria bastante.

Gracias.  :P

salu2 8) 8)
Título: Re: Proyecto PicUSB
Publicado por: Geo en 18 de Junio de 2007, 19:30:48
64 bytes es el límite por paquete para transferencias "bulk" en USB a full speed, por supuesto que se pueden enviar más, simplemente que tomarán más de una transacción. Pero de esto se encarga el controlador :).

Título: Re: Proyecto PicUSB
Publicado por: J1M en 20 de Junio de 2007, 07:53:15
Hola, perdona la tardanza, pero ayer tuve dos exámenes y esta tarde una exposición, asi que voy algo loco últimamente. Efectivamente 64 B/mS es el límite, pero el límite para un pipe o endpoint, supuestamente el PIC soporta hasta 16 pipes IN/OUT, estando uno de ellos dedicado exclusivamente al Control (en concreto el 0). De esta forma se consiguen los 1.5 MB/S que soporta nativamente el protocolo USB 2.0 FULL. Ahora bien, como activarlos (ya que la biblioteca de CCS solo lleva 2 activados (0 y 1)), la verdad no tengo ni idea, es algo que tengo pendiente en la pila de cosas que mirar. Quizá ahora que le meteré mano al driver para Vista aproveche para ver como se podría hacer.

Un saludo y a googlear... ;)
Título: Re: Proyecto PicUSB
Publicado por: manchaster en 21 de Junio de 2007, 01:05:05
Hola a todos
estoy empezando con la comunicacion Usb -Pc y he usado tu programa pero noto que existe un retraso de cuando doy click al boton de prender/apagar led, a que se debe esto? no existe una forma de que lo haga casi al instante sin este delay? ya cheque el codigo para el Picusb para vc++ el cual tiene un delay en la funcion de mandar datos al Pic pero ni modificando se elimina este delay

ojala me puedan ayudar  gracias
Título: Re: Proyecto PicUSB
Publicado por: juanpab1980 en 21 de Junio de 2007, 14:03:44
Hola Geo!! y Hola a todos!!

Primero que todo un saludo a J1M!! este proyecto es de gran ayuda para muchos.

soy nuevo en el foro, en estos momentos estamos empezando un proyecto usando comunicación USB desde el pc al picusb.
La aplicación de software la vamos a realizar en dev-cpp usando la libreria FLTK.
Me gustaria que me explicaras un poco mas la parte del enlace con la DLL que mencionas que te funciono y como la puedo conseguir.

Gracias

Juan Pablo
Título: Re: Proyecto PicUSB
Publicado por: juanpavela en 21 de Junio de 2007, 16:17:13
empeze hacer las pruebas con el ejemplo de redpic que es cdc usb, pero no me lo deja compilar me dice que la funcion "usb_request_get_data();" no esta identificada, si alguien tiene idea de que es lo que pasa espero me puedan ayudar.
gracias y seguire viendo que pasa
Título: Re: Proyecto PicUSB
Publicado por: juanpavela en 21 de Junio de 2007, 17:05:01
listo error corregido parece que era de la version del CCS, pero ahora cuando lo estoy instalando me pide el archivo usbser.sys??????, no tengo ni idea donde esta o si tambien es de la version del CCS
chao espero me puedan ayudar
Título: Re: Proyecto PicUSB
Publicado por: juanpavela en 21 de Junio de 2007, 17:31:12
perdonen tanta presencia, pero como es un tema tan desconocido para mi cualquier problema se me hace dificil, pero ya solucione lo del usbser.sys , este es un archivo necesario para el driver asi que simplemente lo baje y lo meti a la misma carpeta y listo, ahora necesito que por favor me digan ya que esta instalado como puedo ver que manda algo por el hyperterminal???
como hago para que el hyperterminal me diga que puedo utilizar ese puerto virtual #5
gracias
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 22 de Junio de 2007, 14:00:28
tienes que crear una nueva conexión telefonica (igual sirve modificar la que tengas) y buscar el puerto y seleccionar el com virtual que usa microchip para comunicarse con el dispositivo.

Título: Re: Proyecto PicUSB
Publicado por: juanpavela en 22 de Junio de 2007, 16:51:46
jaja ya lo habia hecho pero no quise poner mas mensajes, por ahora ando haciendo pruebas con el y estoy haciendo mi propio programa en este momento para ver si puedo convertir una comunicacacion serial a usb, lo intentare por ahora le agradeceria a alguno de ustedes si me pudiera explicar qeu diferencias hay entre: Bulk Transfers , HID, CDC, el ultimo lo entiendo pero agradeceria que alguien me pudiera ayudar en estas vacios de interes
gracias
Título: Re: Proyecto PicUSB
Publicado por: JProgram en 22 de Junio de 2007, 20:05:29
Hola amigos, soy nuevo en el foro pero ya he realizado todo lo que han publicado y me ha funcionado muy bien.

Quisiera saber saber como llegan los datos al PC o mejor quisiera visualizar todos los datos recibidos en el PC al estilo de Hyperterminal de windows, pero sin utilizar el USB desencadenado sino utilizando el proyecto de PicUSB es decir un programa que haga lo mismo del hyperterminal para dedicarlo solo a pruebas
Título: Re: Proyecto PicUSB
Publicado por: Geo en 22 de Junio de 2007, 22:04:57
jaja ya lo habia hecho pero no quise poner mas mensajes, por ahora ando haciendo pruebas con el y estoy haciendo mi propio programa en este momento para ver si puedo convertir una comunicacacion serial a usb, lo intentare por ahora le agradeceria a alguno de ustedes si me pudiera explicar qeu diferencias hay entre: Bulk Transfers , HID, CDC, el ultimo lo entiendo pero agradeceria que alguien me pudiera ayudar en estas vacios de interes
gracias
Checa aquí:
http://www.beyondlogic.org/usbnutshell/usb4.htm
Título: Re: Proyecto PicUSB
Publicado por: juanpavela en 24 de Junio de 2007, 17:47:00
alguna idea de porque estan dificil de que me reconozca el dispositivo???
tengo que resetiarlo muchas veces hasta que lo detecte sin errores, pq pasara esto
cualquier idea es bienvenida
gracias
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 24 de Junio de 2007, 19:11:24
Buscando por internet me topé con una nota de Atmel donde hay un programa en ASM para implementar un USB en dos de su micros que no lo incorporan (USB por hardware). También trae como crear drivers y aplicaciones en Delphi 7, así como documentación varia relacionada con el USB. Supongo que para los expertos en ASM podrían adaptar el código para los PIC.

http://www.4shared.com/file/18559399/e1c22071/AVR309.html

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: J1M en 24 de Junio de 2007, 19:37:19
juanpavela supongo que tienes el esquema montado tal y como aparece en el primer post del hilo no?? es decir, condensador en Vusb y otro en la alimentación del pic, cierto?? si es sí, la cosa es extraña, prueba a aumentar el valor de ambos.

saludos
Título: Re: Proyecto PicUSB
Publicado por: manchaster en 24 de Junio de 2007, 23:05:28
J1M me podrias decir porque existe cierto retraso en las comunicaciones de la Pc con el Pic en el programa de PicUsb?
Título: Re: Proyecto PicUSB
Publicado por: J1M en 25 de Junio de 2007, 04:32:39
De que retraso estamos hablando?? La transmisión es en modo Bulk, si no mal recuerdo, no se garantiza el tiempo, ya que va a depender de los cacharros 'extra' que tengas conectados a ese USB. De todas yo cuando clickeo el botón de actualizar leds por ejemplo tarda unos milisegundos (menos de medio segundo) en cambiar el estado de estos.
Título: Re: Proyecto PicUSB
Publicado por: manchaster en 26 de Junio de 2007, 00:26:42
a ese medio segundo es el que me refiero, porque tarda eso? como podria hacer para que el tiempo fuera de casi instantaneo?
Título: Re: Proyecto PicUSB
Publicado por: J1M en 26 de Junio de 2007, 02:37:15
Como se que preguntáis pq os gusta leer, te dejo la dirección del famoso USB in a Nutshell que habla del tema:

http://www.beyondlogic.org/usbnutshell/usb4.htm

Leete la parte que comenta la diferencia entre Bulk, Isochronous, Interruption, prestando especial atención a ese último.

saludos
Título: Re: Proyecto PicUSB
Publicado por: __ERoS__ en 27 de Junio de 2007, 08:07:25
Hola a todos

A ver si me podeis echar un cable, que llevo toda la mañana probadno y mirando cosas, y he llegado a la conclusion de que hago las cosas como la han hecho otros y a mi no me funciona del todo bien. Me explico:

Uso pic18f4550 y me comunico por usb con el pc. En el pc uso Linux, y la libreria libusb. La parte del pic la tengo lista, con el driver para transmision BULK, el pc me enumera correctamente el dispositivo y el main reducido del pic es:

char envia[3];
strcpy(envia,"con");
while(1)
{
      usb_task();
      usb_debug_task();

      if(usb_enumerated())  //Devuelve 1 si el dispositivo fue enumerado correctamente
      {
         Apaga(LEDROJO);
         Enciende(LEDVERDE);

         if(usb_kbhit(1))  //Devuelve 1 se hay un nuevo dato en buffer de recepcion
         {   
             printf("Tengo datos\n\r");
             i=usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe
             printf("%d\n\r",i);
             usb_put_packet(1, envia, 3, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 3byte del EP1 al PC
         }
     }

Los printf es para ver por el puerto serie por donde se va metiendo.

En el pc el programa quitando lo de conectarse y demas y restringiendonos al envio de datos el codigo es:

char envio[3];
char respuesta[3];
strcpy(envio,"con");
  if (usb_bulk_write(usb_handle,1,envio,3,200)<0)
   {
      sprintf(errormsg,"Fallo al ejecutar usb_bulk_write. \n");
      return -1;
   }
 
    if (usb_bulk_read(usb_handle,1,respuesta,3,100)<0)
   {
      sprintf(errormsg,"Fallo al ejecutar usb_bulk_read. \n");
      return -2;
   }

Como veis es la mayor tonteria del mundo, pero es para probar. Envio 3 bytes del PC ("con") y el pic los lee, y me envia 3 bytes tb (con lo mismo), el pc lee esos 3 bytes y luego los imprime.

Resultado, cuando ejecuto el programa, envio correctamente, ya que por el puerto serie recibo:

Tengo datos (esta bien, usb_kbhit me devuelve 1)
3 (bien ya que imprimo los bytes que el recibido y desde el pc he enviado 3)

Y luego el pic envia sus 3 bytes, y en el pc los recibo y hago printf de lo recibido y me escribe en pantalla:
con

Y direis, pues esta bien y no falla, y es verdad. Funciona perfecto, pero solo la PRIMERA vez. Si ha continuacion vuelvo a ejecutar el programa (sin resetear pic ni nada) ya no funciona!!!!.  Y pasa que usb_bulk_write no da fallo (si no imprimiria su error) y el que da fallo es usb_bulk_read ya que me imprime : Fallo al ejecutar usb_bulk_read. En el pic resulta que no recibo nada (como? si usb_bulk_write no ha fallado....) porque por el peurto serie no recibo lo de Tengo datos. Es decir, se queda en el bucle while y entra en el if de usb_enumerated, pero nunca entra en el if de usb_kbhit.

Se que es un poco rollo lo que conte, no se si entendisteis algo, lo que sea preguntar y trato de explicarme mejor, pero el resumen es: funciona solo la primera vez, y ya nunca mas hasta que reseteo el pic, entonces vuelve a funcionar la primera vez y otra vez deja de ir hasta resetear.

Gracias de antemano y saludos
Título: Re: Proyecto PicUSB
Publicado por: J1M en 27 de Junio de 2007, 09:12:15
Hola Eros,

Primero, enhorabuena pq así es como deben plantearse las dudas ;)

Creo que el fallo lo tienes aquí:

Código: [Seleccionar]
while(1)
{
      usb_task();
      usb_debug_task();

      if(usb_enumerated())  //Devuelve 1 si el dispositivo fue enumerado correctamente
      {

Si te das cuenta en mi código:

Código: [Seleccionar]
void main(void) {

   int8 recibe[3];                  //declaramos variables
   int8 envia[1];

   LED_OFF(LEDV);                   //encendemos led rojo
   LED_ON(LEDR);

   usb_init();                      //inicializamos el USB

   usb_task();                      //habilita periférico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host

   LED_OFF(LEDR);
   LED_ON(LEDV);                    //encendemos led verde

   while (TRUE)
   {
      if(usb_enumerated())          //si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //si el endpoint de salida contiene datos del host
         {
            usb_get_packet(1, recibe, 3); //cogemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe

Las tareas de inicialización:

   usb_init();                      //inicializamos el USB
   usb_task();                      //habilita periférico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host

Solo se realizan una vez, antes del bucle while(true), ponlo como en el que tengo y supongo que así se solucionará tu problema.

un saludo
Título: Re: Proyecto PicUSB
Publicado por: __ERoS__ en 27 de Junio de 2007, 09:44:53
Gracias por la rapida respuesta :)

Pues he probado eso, ero asi no me funciona ni la primera vez, falla al leer en usb_bulk_read....

Ademas, no quiero hacer lo de wait_for_enumeration ya que mi circuito puede no estar conectado por usb (puede usar tb conexion serie...).

Vaya, ahora estoi mas perdido que ***

Cualquier sugerencia es bienvenida

Saludos
Título: Re: Proyecto PicUSB
Publicado por: __ERoS__ en 27 de Junio de 2007, 10:13:35
Vaya, vaya, vaya....lo he solucionado de la manera menos esperada....

Habia descartado cualquier fallo en la conexion y desconexion con el pic desde el codigo del pc, y no se si es un fallo o no (copie codigo y venia asi, se ve que el que lo hizo le funcionaba), pero al cerrar la conexion hacia:

usb_release_interface()
usb_close()

Y buscando un poquillo por ahi encontre la funcion usb_reset y dije yo weno y si la meto? Ahora tengo puesto:

usb_release_interface()
usb_reset()

Y al cerrar la conexion fuerza la reenumeracion del pic, asi que si vuelvo a ejecutar el programa me vuelve a funcionar sin tener que resetear el pic. Tb me funciona si hago:

usb_release_interface()
usb_reset();
usb_close()

Weno esto para quien como yo, se esta peleando con la libreria libusb de la que tan poca info hay por ahi, le vale de algo si se encuentra un problema similar al mio

Un saludo y gracias por vuestro tiempo
Título: Re: Proyecto PicUSB
Publicado por: J1M en 27 de Junio de 2007, 12:21:17
me alegro que la cosa esté solucionada, no conocía esas funciones :S supongo que hay alguna diferencia respecto al driver del libusb y el mchusb...

saludos y suerte!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 28 de Junio de 2007, 16:44:26
Gracias por el dato de los endpoint J1M, disculpa q responda algo tarde esq ando algo ocupado  :lol:
Alfinal pude arreglarmelas y ya no es necesario q use "mas endpoint's" o q tenga q enviar/recibir mas de 64 bits por dato, lo solucione con un ciclo de enviar y recibir con While  :mrgreen:

Gracias de todos modos  :P


salu2 8) 8)
Título: Re: Proyecto PicUSB
Publicado por: J1M en 29 de Junio de 2007, 15:59:07
nada hombre, para eso estamos :)

Me alegro que funcione la cosa! ahora quemar bytes! ;)

saludos
Título: Re: Proyecto PicUSB
Publicado por: pulpin en 02 de Julio de 2007, 21:05:29
les cuento que no se si por casualidad  pude enviar hasta 127 paquetes por el pic, utilizando el vb, mi lectura me da unos 64kB/s con el endpoint1, pero la verdad estoy trabajando en conseguir la maxima velocidad posible por el puerto no se si estoy cmetiendo algun error con los 127 paquetes o si es suerte, o alguna cosa, la verdad en este momento solo me interesa velocidad, espero puedas ayudarme con alguna informacion sobre esto, pues e intentado hacer algunas cosas con uno de los ejemplo que vi en internet y no elogrado utilizar mas endpoint al tiempo solo el 1, pues ccuando cambio:

\MCHP_EP1 en la libreria por el \MCHP_EP2

me sale "error al cargar los pipes"

espero puedas ayudarme o indicarme donde encontrar algo, pues es para mi tesis y necesito los 1.5Mb/s.

 :-/
Título: Re: Proyecto PicUSB
Publicado por: empeco en 04 de Julio de 2007, 06:53:42
Hola amigos, he estado observando lo que estais haciendo y me pica la curiosidad. Soy profano en el usb y me gustaria comenzar a adatparme a los nuevos tiempos.

Para comenzar con el usb, me ha parecido buena idea empezar con el ejemplo de PICusb de J1M. me he descargado todos los porgramas que proponeis, el PICusb, el C#, el .NET framwork, etc. En principio estoy esperando el micro para probar el programa, aun no creo que tenga problemas para ponerlo en marcha, dado que ya temgo el gtp usb lite y me funciona correctamente. Mi problema es el siguiente:

Me gustaria ver el codigo fuente de l programita PICusb, pero al intentar abrirlo en el C# me dice que no es posible abrirlo; a demas, tengo orto archivo .ZIP que ni siquiera puedo descomprimir, el driverdll.zip. Por otra parte en el archivo PicUSB_Driver.zip  no me aparece ningun leeme.txt para saber como editar el driver.

Os agradeceria que facilitaseis el archivo picusb.zip para poder sacar el codigo y el leeme.txt.


Un saludito.
Título: Re: Proyecto PicUSB
Publicado por: omarchu en 02 de Agosto de 2007, 19:37:16
Hola J1M no se si me puedas ayudar , modifique tu programa , en al programacion del PIC quiero enviar todo una palabra de 10 bytes, y no estoy consiguiendo , no se como hacerlo, tengoq declar como el envio con
usb_puts(int8 endpoint, int8 * ptr, int16 len, int8 timeout); o como tengoq hacerlo favor me ayuden , por q cuando recepciono en c# me recibe solo lo siguiente a¿zôg favor alguien me puede ayudar
muchas gracias
atte rex
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 05 de Agosto de 2007, 05:08:56
Hola J1M.

Lo q sucede esq tengo unos problemas a la hora de enviar desde VC# al PIC un dato mayor de 255; y esque para ser exactos necesito hasta 16 bits porque estoy trabajando junto con el memoria eeprom externa 24LC256 y esta contiene esa cantidad de direciones.
Pues bien, quisiera saber si puedo enviar via USB, desde el VC# al PIC,  un dato mayor a 8 bits.

Estuve haciendo unas pruebas poniendo a "recibe
  • " en int16 y la transferencia se hacia eterna, demoraba mucho pero bastante y no llegaba a cojer el dato y hacer lo q debia, aveces se colgaba. Luego tb cambie en VC# en PICUSBAPI.cs en la parte de: private void SendPacket(byte* SendData, DWORD SendLength) por UINT16 para enviar esas direciones mayores a 255 porq sino se retorna denuevo a 0 y nada  :?


Podrias ayudarme porfavor ?  :mrgreen:


Gracias, salu2 8) 8) 8) 8)
Título: Re: Proyecto PicUSB
Publicado por: softjad en 23 de Agosto de 2007, 16:43:26
Alguien tiene el driver usb para Windows Vista? O como utilisar el de XP en el Vista?
Salu2
Título: Re: Proyecto PicUSB
Publicado por: J1M en 21 de Septiembre de 2007, 11:03:39
Acabo de experimentar una sensación igual a la que tuvo el hombre que envió el primer byte de un sitio a otro por un cable!... y es que acabo de enviar mi primer byte por USB en windows Vista x64 con el driver WinUSB para encender un led!!!!! :D:D:D:D  El usb vuelve a estar vivo!!! jejejeje En nada pondré algún ejemplillo.

un saludo!
Título: Re: Proyecto PicUSB
Publicado por: Sispic en 21 de Septiembre de 2007, 14:46:12
vienvenido al clup de GLADIADORES :-/
Título: Re: Proyecto PicUSB
Publicado por: Arceles en 30 de Septiembre de 2007, 16:25:36
Hmmmm... tengo una duda, el driver que viene de microchip funciona en Windows Vista x86?, si no es asi, he oido que con el LibUSB-win32 puedo usar el diagrama que esta al principio para el PIC18F2550.... si no funciona, como puedo usar el LibUSB-win32? de antemano gracias... exelente proyecto!
Título: Re: Proyecto PicUSB
Publicado por: J1M en 03 de Octubre de 2007, 03:26:27
Arceles el driver de microchip no es compatible con Vista (ni x86, ni x64). El LibUSB que yo sepa tampoco, solo con el XP de 64bits. Para Vista puedes usar la emulación CDC, o utilizar el WinUSB si quieres sacarle la máxima velocidad, en mi página he puesto un ejemplillo de uso del WinUSB llamado PicWinUSB, que viene a ser una evolución del PicUSB, para añadir compatibilidad XP y Vista (x86 y x64)

(http://img477.imageshack.us/img477/1180/winpicusbjx7.jpg)

http://www.hobbypic.com/index.php?option=com_content&task=view&id=31&Itemid=1


saludos!
Título: Re: Proyecto PicUSB
Publicado por: Sispic en 03 de Octubre de 2007, 13:58:18
(http://www.hobbypic.com/images/stories/articulos/comunicacion/picwinusb/yinyangpicwinusb.jpg)

Saviendo los quebraderos que te ha costado : EnHoraBuena Maestro jaime y has sido hasta mas rapido en publicar que los de microchip .
mira que dejarnos en bragas con el vista  :?

enga  :-/
Título: Re: Proyecto PicUSB
Publicado por: J1M en 03 de Octubre de 2007, 14:25:18
Viniendo de Vos es un Gran cumplido Maestro Sisco!! :) ... Creo que podemos decir que hemos llegado al final de internet, le hemos dado la vuelta y como no encontramos nada... engendramos un par de retoños....... pero sin mariconadas eh!! jajaja

Un saludillo!!! y a seguir guerreando!! :D
Título: Re: Proyecto PicUSB
Publicado por: Arceles en 06 de Octubre de 2007, 15:15:45
Hmmmm tengo una pregunta, he visto los tutoiales de como hacer enviar datos al pic y del pic al pc, pero como puedo hacer que la pc lea datos continuamente del pic?, estoy impresionado por este proyecto, es mi primer experiencia con el usb... Gracias de antemano.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 09 de Octubre de 2007, 09:28:11
Hola Arceles,

Que quieres leer continuamente? Ya que por ejemplo no es lo mismo leer continuamente imágenes de una cámara (sabes a priori cuantos bytes se van a enviar), que datos de un sensor analógico (tomas muestras cada 'x' tiempo) o incluso una tercera opción que sería leer datos cuando el dispositivo usb lo solicite.

Para el primer caso por ejemplo entrarías en un bucle for para i=anchoXalto. Para el segundo pondrías un timer en VC# (por ej.) para realizar lecturas cada milisegundo. Para el tercer caso, hay un modo de transferencia llamado Interrupt (que aún estoy 'tratando' de saber como funciona exactamente) pero se reserva un pipe para interrupciones, he de suponer que se comprueba cuando ese pipe se habilita y se procede a la lectura del pipe de datos..... este último aún no se como funciona, no he tenido aún la necesidad de hacer interrupciones y no me he metido con ello muy a fondo.

saludos!
Título: Re: Proyecto PicUSB
Publicado por: Arceles en 09 de Octubre de 2007, 19:25:45
Disculpa por no ser preciso, exactamente seria para estar leyendo el ADC del pic, (en este caso estoy haciendo un pequeño termometro que lea las temperaturas que el pic le manda a la pc continuamente), intente hacerlo directo sin timer y el resultado es que el unico valor que me manda es un 0 (no intente ponerle timer ni nada),  aunque por el tema de enviar bits y recibirlos si lo hace (no continuamente pero si lo hace), como podria poner un timer en VC#? gracias.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 09 de Octubre de 2007, 20:12:45
Hola Arceles,

Entonces si no tenemos que entrar con otros modos de transferencia la cosa se simplifica. Bájate el ejemplo PicUSBNut y verás que hay implementada una función como la que deseas realizar.

saludos!
Título: Conversor RS232-USB
Publicado por: Alejandro en 12 de Octubre de 2007, 21:51:42
Hola amigos,

Mil disculpas por las molestias causadas, acabo de borrar mi post anterior por que estaba ocupando mucho espacio, y el problema ya lo resolvi aunque me he quedado intrigado, les explico, como mensione anteriormente mi objetivo era implementar un Conversor de RS232-USB usando la modadlidad de CDC y un pic18f2550, para esto he usado el ejemplo "ex_usb_Serial" de CCS, cuando lo implemente funciono parcialmente es decir transmitia en un solo sentido del lado RS232 al USB pero cuando intentaba responder del lado USB al RS232 este no recibia ningun caracter y por mas vueltas que le daba al asunto nada de nada hasta que por casualidad nuevamente instale el CCS, el MpLab Ide y su plugin y nuevamente el mismo ejemplo y esta ves si funciona de maravillas, lo que no me explico es que sucedio, no se a alguno de ustedes les ha pasado lo mismo, lo que observo es que l MpLab Ide se me para reseteando  a cada momento a pesar de que lo he isntalado nuevamente , estoy usando el Mpab7.5, alguno de ustedes tiene algun comentario?
Título: Re: Proyecto PicUSB
Publicado por: J1M en 13 de Octubre de 2007, 01:11:11
La versión que instalaste de CCS era la misma? Quizá fuera algún bug con la versión que tenías y al instalar una posterior se solucionó.

saludos
Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 13 de Octubre de 2007, 17:45:43
Sip, la version es la misma
Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 17 de Octubre de 2007, 12:54:43
Hola PalitroqueZ,

Crei haber solucionado mi problema pero no es asi, y respondiendo a tu pregunta si,
la PC tiene un puerto Com1 y al conectar el puerto USB del PIC a la PC este me crea un puerto virtual COM4, usando el hipertermianal puedo enviar caracteres del Com1 al Com4 pero cuando trato de enviar una respeusta del Com4 al Com1 este no recibe nada.
cuando reisntale el compilador del CCS  y el MpLab crei haber resuleto el propblema por que podia enviar ey reciebir caracteres en ambas direcciones como deberia de ser, esto lo verifique en mi casa y en mi trabajo, todo estaba OK, inclusive use el SIOW y el hipertermianl, pero ahora despuesta de varios dia trato de hacer funcionar el mismo cuircuito sin ninguna modificacion y el  mismo programa y sin haber reprogramado el pic lo logro comunicarme en mabas direcciones OTRA VES VES TENGO EL MISMO PROBLEMA...
Título: Re: Proyecto PicUSB
Publicado por: J1M en 17 de Octubre de 2007, 15:01:40
Tienes algún otro dispositivo que instale un puerto COM?? Bluetooth, Mando, etc. Te lo digo por si el otro dispositivo te está causando cierta incompatibilidad con el puerto en cuestión. No recuerdo tu código, estás vaciando el buffer de 'residuos'?

saludos
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 22 de Octubre de 2007, 11:21:22
-Jaime- ¿a que no sabias que picusb ya se puede simular enteramente en el proteus 7.2SP2?  :-/

(http://img520.imageshack.us/img520/1710/picusbproteused5.th.jpg) (http://img520.imageshack.us/my.php?image=picusbproteused5.jpg)

aquí un videito (http://www.4shared.com/file/28605604/c25760eb/picusb_proteus.html)

omití los pasos de configuración del driver que son identicos que hacerlo fisicamente...

modificado: volví a subir el videito, porque el anterior daba error.

Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 22 de Octubre de 2007, 12:19:23
Mil disculpas por mi ignorancia pero a que te refieres  a vaciar el buffer de 'residuos', como hago esto?
Título: Re: Proyecto PicUSB
Publicado por: J1M en 22 de Octubre de 2007, 17:23:09
 :-/ :-/ :-/ Pedro no sabía que iba tan fina la emulación del USB!! Me alegro por los programadores de Proteus! otro pasito más! :) Gracias por enseñar el HowTo ;)

Alejando, para vaciar el buffer puedes usar esta función:
usb_cdc_flush_out_buffer();


saludos!
Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 22 de Octubre de 2007, 19:03:00
Si funciona  :-/ gracias J1M
Título: Re: Proyecto PicUSB
Publicado por: J1M en 22 de Octubre de 2007, 19:09:11
Me alegro! :)

Saludos!!
Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 28 de Octubre de 2007, 13:20:09
Hola, usando los driver del PicUSB  he generador el instalador con un icono personalizado usando el DDK, cuando lo instalo por primera ves funciona perfectamente pero cuando deseo cambiar de icono y modifico nuevamente este insalador con otro icono a pesar de que he desinstalo el driver anterior del administrador de dispositivos este se mantiene,  alguien me podria decir como elimino totalmente este icono.
Título: Re: Proyecto PicUSB
Publicado por: proclamer en 30 de Octubre de 2007, 11:58:42
colle e intentado instalar el proteus 7.2 y me da mensajes que la licencia no es conpatible o no es correcta, me podrian ayudar, gracias.
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 31 de Octubre de 2007, 07:26:55
La única posibilidad es comprar una licencia acorde con las necesidades de las simulaciones a realizar.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: J1M en 31 de Octubre de 2007, 07:57:35
Alejandro, debes borrar las claves del registro. Ejecuta el 'regedit', busca la clave que aparece en el .inf, te aparecerán varias, las borras todas. Después de eso, te recomiendo borrar el .inf de la carpeta de Drivers de Windows y vuelves a intentar la instalación.

Saludos!
Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 31 de Octubre de 2007, 10:22:00
Funciona  :-/, gracias J1M
Título: Re: Proyecto PicUSB
Publicado por: Hexapic en 05 de Noviembre de 2007, 17:14:50
Keria felicitar al artifice de este hilo por la información y soporte ke a facilitado a todos, me e animado a armar uno y comenzar las pruebas, ya les comentare mi pelea, aunke con todo lo ke lei, no creo ke me cueste tanto como pensaba.

Bueno foro, si señor, fecilidades una vez mas.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 05 de Noviembre de 2007, 18:57:16
Bienvenido al foro HexaPIC! muchas gracias por tú comentario :) Es todo un placer colaborar de vez en cuando con algún granito de arena!!

saludos!
Título: Re: Proyecto PicUSB
Publicado por: pulpin en 10 de Noviembre de 2007, 23:07:16
amigo j1M, queria saber si has trabajado con el modo isocrono, el cual si no me equivoco es el que nos puede llevar a la maxima velocidad del puerto, necesito que me ayudes ya que trato de hacer un osciloscopio usb en tiempo real, enviando datos "todo el tiempo", sin que la transmision tipo bulk me pare unos dos milisegundos necesarios en la misma. si puedes ayudarme te lo agradeceria. :-/ :shock:
Título: Re: Proyecto PicUSB
Publicado por: stk500 en 11 de Noviembre de 2007, 05:21:11
 :-/ Feliz cumpleaños Jim!
 :-/ que viejo te hace Jim :D
Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 11 de Noviembre de 2007, 11:11:09
Amigo J1M gracias por tu ayuda y tus sabios concejos....

¡ ¡ ¡ ¡ Feliz Cumplaños ! ! ! !
Título: Re: Proyecto PicUSB
Publicado por: MGLSOFT en 11 de Noviembre de 2007, 12:14:42
Feliz Cumple J1M !!!

Gracias por tus aportes!! :-/ :-/
Título: Re: Proyecto PicUSB
Publicado por: J1M en 12 de Noviembre de 2007, 12:02:37
Con respecto a la duda, la máxima velocidad la obtendrías con todos los PIPEs activos, el driver winusb de microsoft lo permite, el de microchip no. En cualquier caso creo que el bulk, aunque no asegure la llegada de todos los bytes es el óptimo,puesto que creo es el más rapido, en tu caso no pasa nada por que pierdas algún dato, ya que la frecuencia de muestreo si es lo suficientemente alta no influirá en lo que 'veas'. Otra cosa sería si estuvieras enviando archivos. Donde es importante hasta el último bit!! jejeje

Gracias por las felicitaciones amigos! Así da gusto 'trabajar' :)

saludos!!
Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 12 de Noviembre de 2007, 23:58:49
Hola, estoy realizando una aplicacion en labview partiendo del ejemplo de picusb en la que el pic envia datos a la PC, esto funciona perfecto pero cuando paro la aplicacion del labview tengo que resetear el pic para el este nuevamente vuelva e enviar los datos aparentemente se cierra la connecion usb cuando detengo la aplicacion del labview, saben si hay alguna menera de evitar esto?
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 16 de Noviembre de 2007, 16:41:49
Alejandro, acá te cargo un proyecto (los comienzos) que estamos realizando para capturar datos con LabVIEW mediante el USB. Al igual que vos y que todos los demás, creo, nos estamos basando en el ejemplo de J1M. Lo que estamos haciendo en un principio es leer constantemente un potenciómetro conectado a la entrada AN0 de un 4550 y con eso hacer girar un indicador de aguja del labview.

Estamos en los comienzos como te decía antes pero esta solucionado el problema que se te presenta cuando paras el VI. Fijate calculo que te va a servir para tu implementación y espero podamos trabajar en conjunto. El VI esta hecho con el LabVIEW 8.2. Saludos.

(http://img526.imageshack.us/img526/8532/poteyw6.jpg)
Título: Re: Proyecto PicUSB
Publicado por: Alejandro en 16 de Noviembre de 2007, 19:00:05
Hola Guitre, si seria interesante hacer una aplicacion con Labview y con  la colaboracion de todos nostros, dejame revisarlo pero si pudieras bajarlo de version yo tengo el 7.1 y el 8.0,  te lo agradeceria. 
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 16 de Noviembre de 2007, 19:18:56
Proba ahora, supuestamente lo guarde para la version 8.0 (reemplace el archivo del post anterior)
Título: Re: Proyecto PicUSB
Publicado por: pulpin en 28 de Noviembre de 2007, 23:42:40
espero no molestar por mi insistencia pero, como se puede realizar la comunicacion isocrona, alguien lo a logrado, igual aunque para mi osciloscopio no sirva me gustaria ensayar este tipo de comunicacion ya que he implementado las demas comunicaciones bulk,interrup. y me gustaria probar este metodo. Por ultimo alguien sabe por que microchip dice 12Mbps si  no he visto que alguien los consiga realmente.

gracias
Título: Re: Proyecto PicUSB
Publicado por: umalrovi en 29 de Noviembre de 2007, 11:48:38
Buenas el_Guitre,

Podrías publicar el código fuente del PIC para controlar POTE.VI.

Gracias.
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 29 de Noviembre de 2007, 17:54:37
Perdon, habia quedado convencido de que el codigo del PIC estaba en el archivo anterior, pero se ve que cuando lo cambie de version falto incluirlo. De todas formas es casi 100% el codigo original de J1M, tiene unas minimas modificaciones. Saludos.
Título: Re: Proyecto PicUSB
Publicado por: coromoto en 05 de Diciembre de 2007, 17:46:30
buenas, soy nueva en el uso de pics debo hacer adquisicion de datos con el pic 18f4550 para llevarlo a la pc por protocolo usb, si me podrian dar alguna informacion sobre el uso del usb del pic ya que no he entendido casi esta parte, estoy trabajando en mplab y veo que casi todos programan es en c   gracias a cualquier ayuda que me puedan dar . mi correo es maritzac_222@hotmail.com
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 05 de Diciembre de 2007, 18:35:17
Hola coromoto y bienvenida al foro.

Como dices que estas empezando, te sugiero que primero recopiles información sobre el funcionamiento, programación y montaje de los micros, empieza con algo básico, como encender o apagar un led, si ya has practicado esta parte, entonces debes leer un poco sobre la documentación de la arquitectura usb. a todo esto último lo tienes aquí en el foro; especificamente este hilo, que no se porque aún no le han puesto una chincheta, amigos moderadores please ...  :lol:

si, seguro te sonará aburrido, pero es la mejor manera de entrarle al módulo usb sin tener que después tener el poco de signos de interrogación en la cabeza preguntandose porque sigue sin funcionar.  :D

escribiendo en el buscador 18f4550 usb encontraras un mar de personas que lo han montado comentando sus experiencias con el usb, incluso yo escribí (http://www.todopic.com.ar/foros/index.php?topic=15208.msg98098#msg98098) un hilo por ahí donde hablo un poquito de transferencias usb, leyendo y aprendiendo de los maestros Jaime J1M y Diego RedPic.

un saludo paisana
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 06 de Diciembre de 2007, 08:38:15
que no se porque aún no le han puesto una chincheta, amigos moderadores please ... 

PalitroqueZ tus deseos son ordenes.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 06 de Diciembre de 2007, 16:54:13
muchas gracias Jesús, la verdad es que este hilo ha sido (y será) referencia para muchos y debe estar en un sitio visible.
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 06 de Diciembre de 2007, 16:56:43
Totalmente de acuerdo.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: crahun en 06 de Diciembre de 2007, 20:20:06
Hola a todos, soy nuevo en el foro. Estoy acabando mi proyecto fin de carrera y gacias al picusb he conseguido hacer toda la parte de usb en protoboard pero a la hora de pasarlo a pcb me surge el problema, windows no me reconoce el dispositivo usb, me sale el cartelito de windows dicendo que no ha podido ser reconocido. Uso el condensador de 100nF para la alimentación y otro de 470nF para el usb. Uso un cristal de cuarzo de 12Mhz y por si acaso lo he cambiado dos veces y nada. Hay alguna regla mas que se deba cumplir para el diseño? Estoy desesperado, si termino esta parte tengo el proyecto terminado. Por favor, agradeceré cualquier tipo de ayuda.
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 06 de Diciembre de 2007, 23:26:22
Pues parece ser un problema del conector. Comprueba la continuidad y que los hilos en el conector no estén cambiados.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 07 de Diciembre de 2007, 07:33:18
crahun dale una mirada a este (http://www.todopic.com.ar/foros/index.php?topic=19507.0) hilo, tambien me juego a que el problema es en el conector, tambien reviza la contuinuidad de las pistas y si todas estan conectadas a los pines correctos del PIC. Podes poner aca una foto del PCB para chequearlo. Saludos.
Título: Re: Proyecto PicUSB
Publicado por: crahun en 07 de Diciembre de 2007, 10:53:57
Vaya, viendo el equema de nuevo acabo de ver el error, las patillas de mi conector estan contadas en orden inverso en la pcb. Todas estan mal, las 4. Vaya desastre. Bueno, muchas gracias por las respuestas, si consigo que funciones lo posteo esta tarde. Gracias de nuevo.
Título: Re: Proyecto PicUSB
Publicado por: crahun en 07 de Diciembre de 2007, 12:31:04
Hola de nuevo, he intentado cambiar las patillas y nada, no me funciona. Os paso la pcb original para que me veaís como tenia el usb y si debo cambiarlo o no. A estas alturas y despues de haber probado tantas cosas yo ya no sé si esta bien o no.
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 07 de Diciembre de 2007, 13:48:17
hay algo que me confunde de tu PCB, vos tomas alimentacion del USB para toda la placa o la alimentas con una fuente externa? si no veo mal la salida del 7805 esta conectada al pin de Vcc del conector USB??
Título: Re: Proyecto PicUSB
Publicado por: crahun en 07 de Diciembre de 2007, 14:15:12
Esa es otra cosa que tengo mal, queria alimentarla solo desde alimentacion externa asi que el pin 1 no deberia estar conectado. Por lo demás que opinas? cambio la numeracion de los pines de mi conector y asi deberia ir, no?
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 07 de Diciembre de 2007, 15:31:21
Crahun, por un lado deberías desconectar la salida del 7805 del pin VDD del conector por que podes dañar el puerto de la PC, por otro lado según lo que estoy viendo tenes cambiados los pines en el conector

(http://img405.imageshack.us/img405/8885/usbpk7.png)

(http://img132.imageshack.us/img132/2553/pcbrn2.jpg)

Según lo que se ve en la imagen deberías cambiar el pin 2 por el 1 y el 3 por el 4 (lo tenes espejado al conector). Podes desoldarlo de la placa y soldarle cables para probar si asi se soluciona, acordate de no conectar VDD.
Título: Re: Proyecto PicUSB
Publicado por: crahun en 07 de Diciembre de 2007, 15:59:39
Muchas gracias por todo, espero que consiga arreglarlo cuanto antes. La librería para kicad que mebajé tenia ese patillaje y por eso lo he montado mal. Bueno, lo dicho, gracias por todo.
Título: Re: Proyecto PicUSB
Publicado por: cocu3 en 11 de Diciembre de 2007, 13:34:37
creo q el archivo que viene en la carpeta PicUSB_APP.zip esta dañado porque no me suman los dos datos y los leds no encienden :?

lo otro ya funciona en mi f4550 :-/

ups edito: si funciona... era problema de utilizar la version para xp y no para vista...

saludos...
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 12 de Diciembre de 2007, 08:23:58
crahun, que paso con tu placa? funciona? Saludos.
Título: Re: Proyecto PicUSB
Publicado por: cocu3 en 15 de Diciembre de 2007, 09:43:39
buenos dias amigos...

mi pregunta es: es posible utilizar el pic18f4550 como un "master" y no como "esclavo" para usb? es decir, se puede utilizar el 18f4550 para que sea capaz digamos de leer los datos de una memoria usb o de otro dispositivo similar?

vi los ejemplos mostrados aca, pero solo lo utilizan como esclavo, quisiera saber si este es capaz de funcionar como lo hace el compu, ser capaz de leer datos de dispositivos usb...

saludos
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 15 de Diciembre de 2007, 09:54:34
No, no se puede, todos los PIC que hay hasta ahora son esclavos. En un futuro seguro que los sacaran.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: crahun en 15 de Diciembre de 2007, 11:17:01
Hola Guitre. Si que me funciona la placa. He estado liado toda la semana volviendo a hacerla porque como ya sabes la primera versión fue todo un fracaso por culpa del usb. Ahora funciona de maravilla me queda debuggear un poco el software del pic y listo para terminar mi carrera. Por cierto, a ver si alguien del foro que haya experimentado mas con el usb me puede echar una mano: Alguna rara vez el puerto usb se vuelve loco y se desincroniza con el pic para lo cual le desconecto el cable usb y lo vuelvo a conectar y funciona pero es una solucion chapucera. Sabe alguien como hacer algo parecido pero a nivel software? es decir, una limpieza del buffer de recepcion del usb que es lo mismo que creo que se consigue quitando el cable, que windows limpie ese buffer. Gracias a todos, soys los mejores.
Título: Re: Proyecto PicUSB
Publicado por: cocu3 en 15 de Diciembre de 2007, 23:01:53
pero no se podra utilizar el micro a nivel mas mas mas pero mas basico, es decir, que uno con el micro pueda hacer lo mismo q hace el compu cuando uno le conecta la memoria, es decir, le pide el tipo de usb, la corriente de alimentacion, el tipo de class, el serial, el fabricante, ...?¿????????? :shock:

No, no se puede, todos los PIC que hay hasta ahora son esclavos. En un futuro seguro que los sacaran.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: El_Guitre en 16 de Diciembre de 2007, 01:15:40
Me alegro que funcione esa placa crahum, mucha suerte con tu proyecto de fin de carrera.
Título: Re: Proyecto PicUSB
Publicado por: Trino en 18 de Diciembre de 2007, 08:59:47
Hola a todos
Antes de nada daros las gracias porque sin la ayuda de este foro no habria sabido ni por donde empezar a trabajar con el pic usb, soys geniales ;)
Os comento un problema a ver si alguien me puede ayudar.
A la hora de instalar los drivers del pic usb (estoy usando el pic 18f4450), cuando conecto el cable usb al ordenador me sale el globo como que se ha encontrado un dispositivo nuevo pero no consigo instalarlo.
El ejemplo que uso es el de Ernesto Mozota que se encuentra el la pagina de J1M (hobbypic), es el ejemplo que está hecho con VB. y los drivers que uso son los del ejemplo de J1M de hobbypic (PicWinUSB_Driver).
Por si sirve de ayuda os comento que he usado el mplab y he tenido problemas con la compilación ya que me daba errores y lo que hice fue usar el compilador de CCS desde el mplab (gracias a Leon Pic por su ayuda). Con esto ya no me salieron errores pero si algunos WARNING. Lo hice con mplab porque uso el programador mplab icd2.
He intentado usar tambien los drivers de la pagina http://picmania.garcia-cuervo.net de la seccion del "USB DESENCADENADO" pero tampoco funcionan, él usaba el pic 18f4550.
Y la verdad es que no se que mas probar, puede ser que sea porque el pic que uso yo es distinto a los vuestros??

Muchas gracias a todos.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 18 de Diciembre de 2007, 11:38:37
Trino, estás mezclando Drivers. No es lo mismo el PicUSB que el PicWinUSB, el primero utiliza el Driver de Microchip (mchpusbapi.dll) (Compatible con Win98/WinXP) y el segundo hace uso del Driver de Microsoft (winusb.dll) (Compatible con WinXP/WinVista). Para el ejemplo de VB de Ernesto, utiliza el Driver del PicUSB, verás como así todo funciona correctamente (Si no hay algún error en la placa)

Saludos
Título: Re: Proyecto PicUSB
Publicado por: Trino en 19 de Diciembre de 2007, 12:32:41
Hola J1M:
He probador el driver picusb de tu primer ejemplo (picusb_driver.zip) y tampoco funciona.
Decidí entonces usar el programa de tu primer ejemplo (picusb) y tampoco consigo instalar el dispositivo. Cuando conecto el usb se enciende el LED rojo y me sale el globo diciendo que hay un dispositivo nuevo pero de ahí no paso. Que puedo estar haciendo mal??
lo unico que he modificado de tu ejemplo a sido #include <18F2550.h> y le he puesto #include <18F4450.h> que es el pic que yo uso, deberia de hacer mas modificaciones??
Puede ser que el problema proceda de usar el compilador de CCS con el mplab?? no me aparecen errores pero si algunos WARNING, te los pongo por si fueran importantes...

Executing: "C:\Archivos de programa\PICC\Ccsc.exe" "PicUSB.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
>>> Warning 203 "C:\ARCHIV~1\PICC\drivers\pic18_usb.h" Line 436(1,1): Condition always TRUE
>>> Warning 203 "C:\usb\PicUSB.c" Line 113(1,1): Condition always TRUE
>>> Warning 216 "C:\usb\PicUSB.c" Line 138(0,1): Interrupts disabled during call to prevent re-entrancy:  (usb_token_reset)
>>> Warning 216 "C:\usb\PicUSB.c" Line 138(0,1): Interrupts disabled during call to prevent re-entrancy:  (usb_flush_out)
>>> Warning 216 "C:\usb\PicUSB.c" Line 138(0,1): Interrupts disabled during call to prevent re-entrancy:  (usb_flush_in)
      Memory usage:   ROM=22%      RAM=39% - 43%
      0 Errors,  5 Warnings.
Loaded C:\borrar\PicUSB.cof.
BUILD SUCCEEDED: Wed Dec 19 16:12:15 2007

En cuanto al circuito lo he montado en una placa protoboard y parece estar todo OK, ya no se que mas probar...

Muchas gracias de antemano.
Título: Re: Proyecto PicUSB
Publicado por: Trino en 19 de Diciembre de 2007, 14:12:08
perdon, hay un error en los datos de la compilación, te lo vuelvo a poner bien...

Executing: "C:\Archivos de programa\PICC\Ccsc.exe" "PicUSB.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
>>> Warning 203 "C:\ARCHIV~1\PICC\drivers\pic18_usb.h" Line 436(1,1): Condition always TRUE
>>> Warning 203 "C:\usb\PicUSB.c" Line 113(1,1): Condition always TRUE
>>> Warning 216 "C:\usb\PicUSB.c" Line 138(0,1): Interrupts disabled during call to prevent re-entrancy:  (usb_token_reset)
>>> Warning 216 "C:\usb\PicUSB.c" Line 138(0,1): Interrupts disabled during call to prevent re-entrancy:  (usb_flush_out)
>>> Warning 216 "C:\usb\PicUSB.c" Line 138(0,1): Interrupts disabled during call to prevent re-entrancy:  (usb_flush_in)
      Memory usage:   ROM=22%      RAM=39% - 43%
      0 Errors,  5 Warnings.
Loaded C:\usb\PicUSB.cof.
BUILD SUCCEEDED: Wed Dec 19 16:12:15 2007

Es que me dejé por copiar la parte del final y la copié por error de otro proyecto. Disculpad por el error.
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 19 de Diciembre de 2007, 15:16:28
Hola trino.

es extraño que no te funcione con los driver de picusb_driver.zip,

en cuanto a los warning a mi siempre me han salido y no es motivo para que no funcione.

Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 19 de Diciembre de 2007, 16:43:58
Trino: Desinstalaste el driver de WinPic antes de instalar el de PicUsb ?? Nose si los VID&PID y eso q no entiendo muy bien son iguales pero te lo digo porsiacaso. Te recomiendo q reagas todo de nuevo. Esos Warnings nos aparecen a todos, esos no te dan problemas como dice PalitroqueZ.

cocu3: Si se puede hacer q el Pic sea un "master" pero hace falta de un integrado especial (q aora no recuerdo cual es) para hacerlo HOST al pic. Vere si lo encuentro. Tb me dijieron que habia un ejemplo en assembler de hacerlo sin necesidad de "algo mas", pero esto no lo creo hasta verlo.


salu2 8)
Título: Re: Proyecto PicUSB
Publicado por: Trino en 20 de Diciembre de 2007, 08:52:15
Gracias PalitroqueZ y jeremylf por contestar.
jeremylf cuando has dicho lo de desinstalar los drivers me ha hecho pensar, resulta que cuando conecto el usb creo que windows me instala algun controlador... os adjunto un zip con las imagenes para que lo veais.
Y el caso es que lo desinstalo pero al volver a conectar el cable se vuelve a instalar automaticamente, con lo cual no puedo instalar los drivers del picusb. He probado a decirle "actualizar controlador" pero no lo instala.

Si alguien tiene alguna solución se lo agradeceria...
Título: Re: Proyecto PicUSB
Publicado por: J1M en 20 de Diciembre de 2007, 09:57:37
Has recompilado el código de mi página? me refiero al .hex para el 18F2550, si no lo has recompilado, estás usando un cristal de 12Mhz y el condensador de Vusb?? Has respetado el orden en la conexión de D+ y D-??? Cuando conectas el dispositivo, te sale un cartelito en windows diciéndote el nombre que tiene (PicUSB)???

Saludos!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 20 de Diciembre de 2007, 14:57:20
No te aparecela pantalla para elegir el driver a instalar ? Entonces es tu computador creo. Has probado en otra?


salu2 8)
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 20 de Diciembre de 2007, 15:14:03
Trino.

cuando conectaste la primera vez el dispositivo te debió haber salido una asistente de configuración, cuando no lo consigue te avisa y además sale una checkbox (una cajita) diciendo que si deseas volver activar el asistente (algo asi no recuerdo bien) el asunto es que si lo activaste entonces no te aparecerá mas y cada vez que lo conectes, te aparecerá en administrador de dispositivos como desconocido.

Eso se arregla según lo explicó J1M editando el registro (tampoco recuerdo donde es  :()

Título: Re: Proyecto PicUSB
Publicado por: Trino en 20 de Diciembre de 2007, 15:28:59
Si, estoy usando el cristal de 12MHz (PLL3) y el condensador de Vusb. He conectado el cable verde a D+ y el blanco a D-, yo diria que todo esta correcto. Cuando conecto el dispositivo me sale el cartelito de nuevo hardware encontrado y seguidamente me dice que el nuevo hardware esta instalado y listo para usarse ¿?¿?
En el post anterior os he adjuntado unas imagenes de las propiedades del nuevo dispositivo.

Y claro, como ya esta instalado lo que hago es seleccionar la opcion de actualizar controlador. Yo selecciono la ruta de los drivers del picusb pero me dice que no ha encontrado otro software mas apropiado para el dispositivo... y supongo que será porque el otro que me instala (que no se yo cual será) tiene la firma de microsoft.

Jeremylf tambien lo he probado con un portatil pero me pasa exactamente lo mismo. No habria alguna forma de que windows no busque entre sus drivers para instalar el dispositivo y que me de a mi la opción de instalar el driver que yo quiera??

Es que no entiendo porque pasa esto, puede ser por el pic que estoy usando (18f4450)??

Muchas gracias a todos los que me estais ayudando!! ;)
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 20 de Diciembre de 2007, 15:41:30
He leido desde que posteaste el origen el problema y ahí va unos comentarios:

1.- cada driver está sujeto a una cadena de datos que hayas puestos en los descriptores del programa en el uC PIC.

2.- cuando todo va bien al conectar el pic al PC te debe aparecer el ícono del picusb que hizo el amigo J1M, es decir usar su driver porque puede haber otro programa donde le hayan cambiado los descriptores y entonces el .inf de ese driver no te servirá.

3.- si te aparece el cartelito cuando conectas el pic, supongo que no debe haber problemas con el hardware, porque de lo contrario no te saldría nada.

4.- las imagenes que pusiste slo dicen que no reconoce el device, que es el origen del punto 1 y 2

5.- desde la misma ventana de propiedades que muestras en el adjunto, prueba clicando desinstalar, y luego reconectas de nuevo.

6.- si al buscar el driver dice que no lo encuentra quiere decir que no lo reconoce, por lo tanto puede ser un problema con lo hablado en el punto 1 y 2.

Espero que puedas solucionar pronto el problema.
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 21 de Diciembre de 2007, 03:45:07
J1M, tengo una pregunta tonta  :lol: Y esq como no estoy del todo muy familiarizado con el Visual C# no puedo "copiar" el programa echo en C# del PicUsb. Despues de crear un nuevo proyecto y hacer un copy/paste a todo lo necesario (PicUSB.cs, PicUSB.designer.cs, PicUSBAPI.cs) al iniciar la depuracion me aparece el error: "El codigo unsafe solo puede aparecer si se compila con /unsafe". Y se refiere a este codigo del PicUSBAPI.cs que en mi caso se llama Program.cs (el VS lo define asi por default):

Código: [Seleccionar]
using PVOID = System.IntPtr;
using DWORD = System.UInt32;

namespace PicUSB
{
    unsafe public class PicUSBAPI
    {
        #region Definición de los Strings: EndPoint y VID_PID
        string vid_pid_norm = "vid_04d8&pid_0011";

        string out_pipe = "\\MCHP_EP1";
        string in_pipe = "\\MCHP_EP1";
        #endregion

        #region Funciones importadas de la DLL: mpusbapi.dll

Exactamente aqui:
Código: [Seleccionar]
unsafe public class PicUSBAPI
Puedes decirme q mas, aparte de un copy/paste, debo de hacer para reacer por mi propia cuenta, por asi decirlo, el programa echo en VC# de tu proyecto PicUSB ?


Gracias.
salu2 8)
Título: Re: Proyecto PicUSB
Publicado por: Tulkas en 29 de Diciembre de 2007, 16:00:45
Para jeremylf:

Creo que lo que puedes hacer es ir a tu proyecto de visual, ir a la pestaña proyecto, luego a "propiedades" y en "Build" activar la casilla de "allow unsafe code".

Para todos:

Por otra parte, si alguien me puede ayudar.  Estoy conectando un display alfanumérico por usb de 40x4 lineas y al conectarlo al pc todo funciona bien, cada vez que ejecuto alguna función relacionada con el usb lo envio al display, así que veo como al conectarlo al pc ejectua usb_init(), luego usb_task() y ahí se queda parado, luego windows me pide los drivers y al instalarlos en el display veo que se ha ejecutado wait_for_enumeration() y al final se mete en el blucle while(true), una vez ahí entra en la condición if(enumerated()), ahí dentro tengo puesto la condición if (usb_kbhit(1)), pues bien, me he dado cuenta que esta condición siempre se cumple, nunca se para ahí, entra siempre, sin tener ningún software en el pc, como si siempre detectara un dato recibido, a alguien le ha pasado esto.  Podeis ver que estoy usando como base el proyecto picusb.

Muchas gracias de antemano.
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 29 de Diciembre de 2007, 20:41:16
Gracias Tulkas! eso era.

Por tu problema, pues te digo q el usb_kbhit() siempre detecta un dato, que es el 0 (False) si esq no hay nada en el endpoint del pic y 1 (True) si lo hay. Aqui lo dice:
Código: [Seleccionar]
Fuete: usb.c
/****************************************************************************
/* usb_kbhit(endpoint)
/*
/* Input: endpoint - endpoint to check
/*
/* Output: TRUE if there is new data in RX buffer, FALSE if there is not.
/*
/* Summary: Similar to kbhit(), sees if there is new data in the RX USB buffers.
/*
/*****************************************************************************/

Ese 1 q se pone de parametro es para especificar el endpoint del pic a chekear.
Alemnos eso entiendo por tu pregunta.


Salu2, gracias  8)
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 04 de Enero de 2008, 14:14:41
Tengo una duda con el mchpusb.inf que usa el win para enumerar el nuevo dispositivo (llamese pic con módulo usb)

en la entrada Version siempre es el mismo GUID, independientemente del PID que se use

ClassGuid={4D36E97E-E325-11CE-BFC1-08002BE10318}

en cambio veo que el instalador que usa J1M (picusb.inf) es:

ClassGuid={4D36E911-E325-11CE-BFC1-08002BE10318}

¿existe algún patrón o fórmula para calcular el GUID a usar en estos drivers?, porque al fin y al cabo lo que se instala es mchpusb.sys que es el que usa el Win para acceder al usb





Título: Re: Proyecto PicUSB
Publicado por: J1M en 04 de Enero de 2008, 15:06:03
Hola Pedro, cambié el GUID con el fin de que no hubiera incompatibilidades con el original, la verdad no se si hay alguna fórmula para calcularlo e incluso ni si tan siquiera es necesario hacerlo, es decir, pueden convivir varios dispositivos bajo el mismo y sin incompatibilidades.

Saludos!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 17 de Enero de 2008, 17:15:21
Hola J1M.

Quisiera saber si se puede saber si hay algun dato por recibir en el endpoint del host pormedio del VC#. Esq necesito enviar datos del PIC a la PC continuamente y quiero hacerlo sin necesidad de enviar a cada rato de la PC al PIC un dato para decir q voy leer un dato ahi mismo.

Simulando SERIAL por USB, con la funcion usb_cdc_putc, podria ser un claro ejemplo de lo q quiero; el hiperterminal simplemente coje los datos q el pic le envia y los muestra, como si el hiperterminal leyera el endpoint de entrada y verificara si hay algun dato y si lo hay lo muestra.

Espero explicarme bien y puedan ayudarme.

Gracias.
salu2 8)
Título: Re: Proyecto PicUSB
Publicado por: J1M en 18 de Enero de 2008, 12:39:51
hola jeremylf, poder se puede, aunque no se si hay una forma 'mejor' o más adecuada de la forma en que lo hice. Descarga el proyecto PicUSBNut, ahí el programa en VC# mostraba cuando se había pulsado una tecla. Básicamente lo hice con un timer ya que no encontré la forma de 'tratar una interrupción' mediante C#.

saludos!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 18 de Enero de 2008, 19:06:59
 :o Vaya, buena forma de hacerlo. No sabia q podia recurir a tal timer. Pero eso tb hace q la compu se lagee puesto q esta constantemente revisando el bufer  :?

Porcierto, esto:
Código: [Seleccionar]
if (receive_buf[0] == 1)
{
       switchst = receive_buf[1];
}
Es porq siempre lee 0 verdad?

Creo q lo hare asi, yaq si se quisiera tratar una interrupcion alguien tendria q indicar que uvo alguna y no se en quien mas pensar q la mpusbapi.dll
Esto me lleva a confirmar (como ya me han dicho) que esta dll de microchip es muy limitada.

Aunq por ahi lei que habian enralidad 10 funciones y no 6 en la dll, quiza por ahi este la solucion para tratar interrupciones o algo. Estare altanto.

Gracias J1M.
Un saludo 8)
Título: Re: Proyecto PicUSB
Publicado por: J1M en 20 de Enero de 2008, 15:58:57
Exacto jeremy, es para detectar el cambio en el byte del pulsador. Entra en el IF si hay dato 'recibido' y dentro del IF se mira si se ha pulsado el switch.

La verdad no se si con el driver de Microchip se puede hacer eso, la verdad está algo limitado. Yo he usado la transmisión Bulk, hay otro modo que es la de interrupción, se que con el Driver del WinUSB se puede usar, aunque no lo he hecho nunca y tampoco sabría decir si con este modo se resolvería tu problema, que si bien es cierto, como te he dicho se puede 'solucionar', como me comentas y efectivamente el Sistema operativo se queda 'demasiado pendiente' de ese timer.

Un saludo!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 20 de Enero de 2008, 18:28:52
Hola J1M. Me referia a q cuando tu lees el buffer sin enviar nada previamente, para estar en una misma trama de transferencia, siempre leera 0. Por eso en "public float ConvADPIC()", en "if (receive_buf[0] == 0)", siempre se cumplira por eso mismo. Entonces enviar un 0 al Host es lo mismo q si no mandaramos nada, me dejo entender?  :lol:

Porcierto en "private void adconv_Click(object sender, EventArgs e)" llamas a ConvADPIC dos veces siendo la 1ra inecesaria (creo) y dentro de ella justo en la linea de "send_buf[0] = 0x02;" en el comentario pones "text mode" donde deberia ser "AD mode".  :lol:

Sobre como detectar/tratar la interrupcion por buffer ocupado que nos brinda el Host,  creo q el modo interrupcion del USB no es la solucion porq esta es mas para dispositivos de interacion humana, HID (si, e estado leyendo mucho  :lol:). Lo q si, es tratar esa interrupcion en modo bulk por VC# de alguna manera y aunq tampoco se como sea posible e buscado y buscado haber conq me encontraba y hay unos codigos que hacen funcionar el USB desde VC# y pues de algo pueden ayudar, los dejo aqui posiacaso:

http://www.componentsnotebook.com/notebooks/csharp/deviceio.aspx (http://www.componentsnotebook.com/notebooks/csharp/deviceio.aspx)
http://libusb-win32.sourceforge.net/#about (http://libusb-win32.sourceforge.net/#about)
http://libusb.sourceforge.net/ (http://libusb.sourceforge.net/)
http://primates.ximian.com/~lupus/corlib-cov/class-Microsoft.Win32.Win32RegistryApi.html (http://primates.ximian.com/~lupus/corlib-cov/class-Microsoft.Win32.Win32RegistryApi.html)
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=580712&SiteID=1 (http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=580712&SiteID=1)
http://www.codeproject.com/KB/system/DriveDetector.aspx (http://www.codeproject.com/KB/system/DriveDetector.aspx)
http://www.developerfusion.co.uk/show/4392/1/ (http://www.developerfusion.co.uk/show/4392/1/)

No estoy seguro si tratan el tema de la interrupcion que hay por dato alojado en buffer en modo bulk, yaq no estoy del todo familiarizado con el VC# en ese nivel. Pero si el tema de USB por VC# y pues, podria ayudar  :lol:


Gracias por todo J1M.
Un saludo 8)
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 26 de Enero de 2008, 22:59:13
Bueno, y yo sigo buscando como tratar tal interrupcion  :lol:

Y me tope con un forma que, no es precisamente eso, pero, deacuerdo a lo q quiero, se va acercando. Lo q hago es leer y leer siempre el buffer de una forma mas abreviada, por asi decirlo (luego pondre el codigo), como en el PicUSBnut. Pero ahora, ANTES verificando q se ha cojido un dato: Yaq la funcion _MPUSBRead devuelve un 1 si se a obtenido algun dato (y muchos numeros mas q creo q son errores y etceteras  :mrgreen:). Y asi hasta q se cumpla y recien procesar. Pero hay un error, y esq me coje un valor q no es  :?

Aqui el codigo en VC# (Esta todo bien explicado  :mrgreen:):
Código: [Seleccionar]
        public void Esperar_dato()    //Esto se produce cuando aprieto un boton en el Form1.
        {
            //Estas variables son para poder ejecutar _MPUSBRead
            DWORD int_ = 0;
            byte* recivi = stackalloc byte[1];
            DWORD reclen = 1; DWORD *lengt = &reclen;
           
            //Variables propias de mi xD!
            byte cont = 1, d1=0, d2=0, d3=0, d4=0;
           
            while (cont <= 4)    //Bien, esto porq quiero solamente cojer 4 datos.
            {
                int_ = 0;       //Esta varialbe indica "si uvo interrupcion" por simularlo de algun manera, espero se ntienda.
               
                OpenPipes();
                while (int_ == 0)        //Y esto se ejecutara infinitamente hasta q haya algun dato en el bufer y q se coja correctamente, entonces int_ cambiara a 1.
                {
                    int_ = _MPUSBRead(myInPipe, (void*)recivi, 1, lengt, 1);     //Pues eso, la revicion infita =)
                }
                ClosePipes();
               
                //Esto ultimo es para revisar los 4 datos q me llegan y luego mostrarlos por un mensaje.
                switch (cont)
                {
                    case 1: d1 = recivi[0]; break;
                    case 2: d2 = recivi[0]; break;
                    case 3: d3 = recivi[0]; break;
                    case 4: d4 = recivi[0]; break;
                }
                cont++;      //Aumento contador para q se cumpla lo de leer solamente 4 veces.
            }
           
            //Y pues finalmente, lo muestro todo.
            MessageBox.Show(d1.ToString() + " " + d2.ToString() + " " + d3.ToString() + " " + d4.ToString());
        }

El problema esq cuando me lee, lee valores q no son a los q yo envie desde el pic. Se supone q todos deben de ser iguales y si, en eso esta bien, todos son iguales. Pero no el numero correcto.

Esto es lo q esta en CCS:
Código: [Seleccionar]
#include <18F2550.h>
#fuses xtPLL, NOWDT, NOPROTECT, NOLVP, NODEBUG, USBDIV, PLL1, CPUDIV1, VREGEN
#use delay(clock=48000000)
#use rs232(baud = 9600, xmit = PIN_C6, rcv = PIN_C7)

/////////////////////////////////
#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    1                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    3                 //size to allocate for the rx endpoint 1 buffer

#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include "USB_extreme_descriptores.h"         //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports

/////////////////////////////////

#define dato_recivido_1    recibe[0]
#define dato_recivido_2    recibe[1]
#define dato_recivido_3    recibe[2]

#define dato_a_enviar_1 envia[0]

/////////////////////////////////
void main(void)
{
   int8 recibe[3];                  //declaramos variables
   int8 envia[1];
   int16 i;
   short enviado = 0;
 
   printf("\fJEREMY!");

   usb_init();                      //inicializamos el USB
   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host
   
   printf("\r\n%u", input(PIN_A0));
   while (TRUE)
   {
      if(usb_enumerated())          //si el PicUSB está configurado
      {
         //Cuando se pone a 0 el A0, por un boton.
         if (input(pin_a0) == 0)
         {
            dato_a_enviar_1 = 128;    //EL DATO Q VOY A ENVIAR ES 128.
           
            printf("%u", usb_put_packet(1, recibe, 1, USB_DTS_TOGGLE));   //Y envio y envio asta q se suelte el boton. Lo pongo printf porq luego me muestra si se
                                                             // cumplio con el envio o no, cuando no pulso el boton para chekear el bufer e VC# me pone 0, cuando captura
                                                             //los 4    q   quiero me pone algunos 1 y otros 0.
         }
      }
   }
}

El problema, como se ve, esq no lee 128 (q es lo q envio desde el pic en la variable dato_a_enviar_1), lee 23, cuatro veces seguida claro.

A q se debe? Solo estoy esperando un dato en el buffer y pues cuando lo cojo me deberia leer bien, nose porq lee mal  :?
Espero se me entienda.

Gracias.
Salud.
Título: Re: Proyecto PicUSB
Publicado por: gu1llermo en 27 de Enero de 2008, 02:14:42
Primero que todo quiero Felicitar a J1M, por abrir éste hilo y también agradecerle por compartir sus conocimientos, en especial acerca del picusb, que a tantas personas como yo les a servido, por eso muchas gracias  :-/ , también quería agradecer a todos los que han participado en el mismo, que por lo que veo hay muchos maestros  8) y también a los que preguntan porque son como la chispa que encienden la luz de las ideas y soluciones generadas por estos.

jeremylf, fíjate en la línea: printf("%u", usb_put_packet(1, recibe, 1, USB_DTS_TOGGLE));

creo que lo que quieres hacer es: printf("%u", usb_put_packet(1, envia, 1, USB_DTS_TOGGLE));

Prueba a ver.

En un Post anterior creo que Trino se llama el participante tenía problemas porque el windows no le deja actualizar el controlador y por lo tanto no podía instalar el que él quería, a mi me pasó lo mismo y lo solucioné de la siguiente forma:
Inicio --> Click derecho sobre Mi PC --> Propiedades --> Hardware --> Administrador de Dispositivos --> selecciono el de mi interés y le doy click derecho --> Actualizar controlador... --> No por el momento --> Siguiente --> Instalar desde una lista o ubicación específica (avanzado) --> Siguiente --> No buscar. Seleccionaré el controlador que se va a instalar --> Siguiente --> Utilizar disco... --> Examinar... --> Aquí finalmente selecciono el .inf que yo quiero y listo!

Si me extendí es porque quise dejarlo lo más claro posible, es lo menos que puedo hacer después de tanta ayuda que e recibido de todos uds. nuevamente gracias a todos.

Saludos.
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 28 de Enero de 2008, 15:17:30
jeremylf, fíjate en la línea: printf("%u", usb_put_packet(1, recibe, 1, USB_DTS_TOGGLE));

creo que lo que quieres hacer es: printf("%u", usb_put_packet(1, envia, 1, USB_DTS_TOGGLE));
Pero q descuidado (por no decir otra cosa) soy!  :mrgreen: Creo q fue por culpa d un copy/paste  :D

Gracias gu1llermo, ahora si tdo funciona bien :lol:


salu2 8)
Título: Re: Proyecto PicUSB
Publicado por: zana en 28 de Enero de 2008, 16:49:29
Hola,

 estoy intentado comenzar un proyecto con un Pic conectado por USB, llevo tiempo leyendo todo lo que hay hacerca de esto en internet y me surge un fallo que no he conseguido arreglarlo. Para empezar quise probar algun codigo ya hecho y uriliza el de hobbypic con el driver winUSB. Lo instale y todo funcionó a la perfeccion. Mi problema surge cuando intenté cambiar de driver ya que ese proyecto estaba hacho en C# y me interesaba hacerlo en C++ o visual basic. entoces cogui algun ejemplo en esos lenguajes y todo utilizan el driver de microchip, y como habia instalado primero el winUSB no ha manera de que funcione ninguno. He intentado desintalar el driver de todas las maneras posibles pero ya no funciona ninguno ecepto el que esta con el driver WINUBS.

Alguien sabe como puedo solucionar el problema? He intentado cambiar el ID tambien y nada.

Un ssaludo
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 29 de Enero de 2008, 00:05:02
Hola zana.

Veras, el driver de microchip (concretamente la mpusbapi) solo funciona en win xp y 98, EN VISTA NO. Creo q Jim lo comenta en el PicWinsUSB pero creo q no lo viste bien. Bueno, creo ese es el motivo porq no te funciona  :-)

Otra cosa, siquieres hacer trabajar los ejemplos de PicUSB en otro lenguaje, q no sea el VC#, q tb estan en Hobbipic (ESTOS (http://www.hobbypic.com/index.php?option=com_content&task=view&id=24&Itemid=27)), decirte q solo funcionaran en xp y 98 como te comento el xq arriba.

Suerte.
Salu2 8)
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 29 de Enero de 2008, 02:27:03
Hola denuevo.

Tengo una duda: Se pueden enviar/recibir datos de la PC al PIC de 16 bits ?? Porq creo q eso es lo maximo q puede soportar el PIC  (leyendo el pic18_usb.h, en su version history). Bien, pues hice pruebas y solo me recibio (el PIC) el 1er dato.

Para q me ntiendan mejor, aqui esta lo q hice en VC#:
Código: [Seleccionar]
        public void Ejecutar()
        {
            UInt16* send_buf = stackalloc UInt16[3];
           
            send_buf[0] = 1111;           
            send_buf[1] = 23;
            send_buf[2] = 56;

            SendPacket(send_buf, 3);
        }

Y, claro, cambie el tipo de variable del 1er argumento de SendPacket a:
Código: [Seleccionar]
private void SendPacket(UInt16* SendData, DWORD SendLength)

Bueno, es obvio q en el pic hay q tb cambiar algunas cosas, y pues, hice esto (CCS):
Decir antes q, como mi mayor prioridad es el recivimiento de datos desde el Pic, pues solo cambie eso de la variable recibe[].
Código: [Seleccionar]
.
.
.
void main(void)
{
   int16 recibe[3];        //AQUI
   int8 envia[1];
 
   printf("\fJEREMY!");

   usb_init();               
   usb_task();                     
   usb_wait_for_enumeration();     

   while (TRUE)
   {
      if(usb_enumerated())         
      {
         if (usb_kbhit(1) == 1)         
         {
            printf("\r\n%Lu ", usb_get_packet(1, recibe, 3));     //Aqui cojo y muestro por rs232 la cantidad q cojio (ocea 3).
            printf(" %Lu %Lu %Lu", recibe[0], recibe[1], recibe[2]);      //Y aqui muestro cada uno d los valores de recibe[].
         }
      }
   }
}

Y lo q me sale en hiperterminal, teniendo encuenta los valores q yo e mandado desde la PC, programadas en VC# (send_buf[]), me sale esto:
(http://img253.imageshack.us/img253/9017/dibujoqw4.jpg)
(El 3 es el 1er printf q hago, la cantidad de datos cojidos del bufer del pic)
Y, asi como se ve, solo el 1ro llega bien. Creo q tiene q ver con q enviar un dato de 16bits es lo maximo por mensaje, ocupando todo un paquete; y q a 8bits se pueden enviar muchos paquetes en un solo mensaje, o algo asi, q no ntiendo muy bien, porq hay diferencia entre mesajes y paquetes creo haber leido. Bien, pues tb vi el usb_gets pero leer la Nota q dejan, pues, como q uno no se siente muy seguro de usarla...
Citar
NOTE: NOT THOUROUGHLY TESTED.  I AM NOT EVEN SURE IF THIS IS A GOOD IDEA
Q cosas no?  :D. Aunq tampoco sabria como usarla.

Espero puedan darme una mano y q haya sido bien explicativo  :lol:

Hasta luego.
Salu2.

EDITO
Ehm... creo q no se puede:
Código: [Seleccionar]
int16 usb_get_packet(int8 endpoint, int8 * ptr, int16 max)
16 bits son el numero de datos cojidos del bufer y no puede ser la cantidad de cada uno de ellos, porque el puntero (variable) que contendra tal valor esta especificado en el 2do argumento de esa funcion y pues, ahi indica q solo es de 8bits. Pero es raro, porq:

1- ¿¿ Porq no me botaba error el compilador cuando ponia una variable de 16bits si esa funcion solo permite de 8 (int16 recibe[3]) en el puntero donde alojar los valores ??
2- ¿¿ Porq si podia leerme un valor (el 1111 y cualquier otro), el del 1er valor del buffer a enviar de la PC (send_buffer[]) ??

Todo se torna muy raro  :z).
Título: Re: Proyecto PicUSB
Publicado por: zana en 29 de Enero de 2008, 07:58:46
Hola zana.

Veras, el driver de microchip (concretamente la mpusbapi) solo funciona en win xp y 98, EN VISTA NO. Creo q Jim lo comenta en el PicWinsUSB pero creo q no lo viste bien. Bueno, creo ese es el motivo porq no te funciona  :-)

Otra cosa, siquieres hacer trabajar los ejemplos de PicUSB en otro lenguaje, q no sea el VC#, q tb estan en Hobbipic (ESTOS (http://www.hobbypic.com/index.php?option=com_content&task=view&id=24&Itemid=27)), decirte q solo funcionaran en xp y 98 como te comento el xq arriba.

Suerte.
Salu2 8)

Hola jeremylf

Gracias por contestar, el caso es que no utilizo Vista sino windows Xp, el problema fue que instale esos driver y ahora ya no hay manera que me coja los otros. Una cosa que se me ha ocurrido es cambiar el VID y Id para que cuando lo conecte al ordenador no me relaciones el micro con ese driver. Es esto posible??

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 29 de Enero de 2008, 10:53:33
Aquí tienes un hilo donde se explica (varios métodos) para desistalar los drivers:

Método manual para Desenumerar el dispositivo que usa mchpusb.sys del WinXP (http://www.todopic.com.ar/foros/index.php?topic=20212.msg149866#msg149866)

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: J1M en 30 de Enero de 2008, 20:58:10
hola zana, sigue los pasos que comenta Pedro en el link que te ha puesto Jesús, es decir, desisntala el dispositivo, borra la clave de registro asociada al dispositivo y por último elimina de la carpeta drivers el .inf del driver instalado. Con eso debería ser suficiente para que el SO te solicite de nuevo un driver.

saludos!
Título: Re: Proyecto PicUSB
Publicado por: zana en 01 de Febrero de 2008, 15:50:49
Hola

Gracias jfh900 y J1M por contestar. Lo he intentado  ya todo, realice los pasos que me comentan borrando los registros el driver etc pero nada. Cuando introduzco el pic me lo reconoce como un dispositivo desconocido con VID_0000&PID_0000 cosa que me parece muy raro. Y al intentar instalar el driver me dice que no hay driver para ese dispositivo.

He intentado tambien cambiando el Vid y PID a ver si de esa manera reconoce otro dispositivo, pero nada. Ya estoy pensado que solo me falta formatear el ordenador.

Alguien tiene alguna idea de como solucionarlo.

Gracias

Zana

P.D. J1M tu aplicacion con winUSB es infalible ya que aunque le quite el driver si le cargo el programa esa version siempre la detecta bien y funciona. El problema es que quiero hace la apliacacion en C++ y sin un ejemplo de codigo voi un poco perdido.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 01 de Febrero de 2008, 15:59:18
Me da que debe haber algún error en el programa que utilizas en el PIC... pruébalo tal y como aparece en la página.

Con respecto al WinUSB yo me basé en el artículo de las MSDN y este venía en VC++. Un usuario de los foros de Microchip publicó hace un tiempo un ejemplo también en VC++:
http://www.raccoonrezcats.com/soundcard.html

saludos!
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 01 de Febrero de 2008, 17:33:16
Tienes mal configurado en el PIC el VID y el PID estos valores son erroneos: VID_0000&PID_0000

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: zana en 01 de Febrero de 2008, 17:58:18
Tienes mal configurado en el PIC el VID y el PID estos valores son erroneos: VID_0000&PID_0000

Un saludo

La cuestion es que no he tocado el codigo, me he bajado los diferentes proyectos y los he probado directamente sin tocar el código. Y solo ha funcionado el que esta basado en WinUSB.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: J1M en 05 de Febrero de 2008, 18:56:44
Novedades!!!

Microchip ha sacado la versión 1.3 de su stack, en otras palabras, hay nueva versión del driver mpusbapi.dll, aquí las novedades:

What's New/Updated in Release v1.3
·         Microchip General Purpose USB Windows® Driver, mchpusb.sys v1.0.0.6, is updated to support Windows Vista™ and 64-bit Windows® Operating Systems. This version is WHQL certified.
·         CDC RS-232 emulation INF file, mchpcdc.inf, updated for supporting Windows Vista™ 32-bit and 64-bit.
·         Some bug fixes in USB library firmware (usb9.c).

http://ww1.microchip.com/downloads/en/DeviceDoc/Release%20Notes%20for%20MCHPFSUSB%20v1.3.htm
http://ww1.microchip.com/downloads/en/DeviceDoc/MCHPFSUSB_Setup_v1.3.exe

Ya se puede volver a jugar con el driver de microchip... ahora en Vista y versiones de 64bits de windows, voy a ojearlo a ver que tal va! ;)
Título: Re: Proyecto PicUSB
Publicado por: gera en 08 de Febrero de 2008, 23:34:04
Buenas gente!!! Primero q nada, mil gracias a todos los responsables de este proyecto y sus colaboradores, han hecho un excelente trabajo y nos han abierto muchas puertas a todos!!! la verdad q se pasaron! :) los felicito!!!!

Bueno, les comento lo q pasa. Uso Linux, y luego de superar una q otra complicacion, logre hacer funcionar el programa q subieron.
La cosa es q ahora quiero hacer mis propias aplicaciones, asiq para empezar quise usar el mismo codigo del pic, pero usando mi propio codigo en la PC. Asi que me puse a leer y leer el codigo a ver si entendia como trabajaba, pero sinceramente me perdio mucho el tema de las librerias de gtk y todo eso. Y queria pedir, si no es mucha molestia, q me expliquen un poco cuales son las partes escenciales del codigo, asi voy filtrando un poco la cosa.
La idea seria hacer un programa simple q se ejecute desde el shell, q haga titilar un par de veces los leds y me devuelva el resultado de una suma arbitraria. Una vez q entienda lo minimo q se requiere para enviar y recibir paquetes ya puedo seguir solo.

Nuevamente, muy agradecido a todos ustedes!!!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 09 de Febrero de 2008, 05:30:26
Hola zspikes.

A que te refieres con tu propio codigo para PC? A la programacion para el programa de usuario?, porq este esta echo en VC#, c++, delphi, etc.

Y tampoco se a q te refieres con las librerias gtk.

Quisiera ayudarte pero no entiendo q es lo q quieres enrealidad.

Citar
Novedades!!!
Microchip ha sacado la versión 1.3 de su stack, en otras palabras, hay nueva versión del driver mpusbapi.dll, aquí las novedades...
Q bien! Solo, lo q no me gusta esq no hayan cambiado en nada a la DLL. Precisamente lo q ando como loco buscando... Catch a la interrupcion en bulk  :lol:

De todos modos, es bueno saber q se podra usar la DLL en Vista.


Salu2  :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 09 de Febrero de 2008, 05:31:26
Bueno, y yo segui buscando la forma de tratar la interrupcion...  :lol:

Hasta ahora, solo e estado metido en la mpusbapi.dll (si, me baje el builder c++ 6 y todo). Y, por dar informacion, ahi usan las funciones del API de windows como ReadFile, WriteFile, CreateFile, etc. Tambien me encontre con formas para poder "esperar" a la interrupcion con funciones como WaitForSingleObject, WaitCommEvent,... que siendo este ultimo el q mas me llamo la atencion porq es muy utilizado para el puerto serie. Pero (si, siempre lo hay u.u'), no funciono.

Y esq, para los q conoscan sobre estas funciones API del Windows (yaq esto es un mundo nuevo para mi tb), usando el WaitCommEvent, siempre me debuelve FALSE (ese y toda su familia, ocea: SetCommMask (poniendo este antes, claro), ClearCommError, etc). Parece ser q al poner el handle, q me da CreateEvent(...) en MPUSBOpen(...), no lo reconociera o algo, porq GetLasError me devuelve  ERROR_INVALID_FUNCTION enves de ERROR_INVALID_HANDLE, y nose que pensar  :shock: Quiza falte especificar algo en el CreateEvent(...) como un flag pero nose que pueda ser.

Con WaitForSingleObject pasa lo mismo; pense en poner en su 1er parametro el handle de MPUSBOpen pero no es algo q se pueda señalar (como lo hace con el evento de la estructura OverLapped).

Estuve echando una mirada tambien a MPUSBReadInt y pues hay algo en la funcion q usa: DeviceIoControl que pueda ser de ayuda. Pero (u.u') probando con al handle normal (yaq, en la decripcion del paramtro pEP del MPUSBOpen dice que hay q cambiar este valor por otro, indicando que quieres la pipe del tipo de transferencia: Interrupcion) no funciono. Y, ahi si, me devuelve GetLastError: ERROR_INVALID_HANDLE... Lo q me hace pensar esto, esq si la transferencia por Interrupcion tiene un handle especifico (porq el de Bulk fallo), donde indica una espera (ocea interrupcion) de byte almacenado en el buffer del Host (IOCTL_MCHPUSB_WAIT_INTERRUPT), pues entonces el Bulk tb lo tendra. Pero nose cual, ademas q su 2do parametro lo hace mas complicado aun, porq hace llamado a un tal CTL_CODE q crea una nueva funcion para el DeviceIoControl, o algo en un nivel mas bajo aun permitido legalmente en el windows. Esto si ya es demasiado.

Con todo esto y arta compilacion en el builder c++ 6... Encontre una forma, muy poco elegante (yaq todo lo q intentaba con esas funciones de comunicacion(WaitCommEVENT, ... de la libreria Kernel32.dll, me fallaba) de esperar, por asi decirlo (porq realmente espera) a la interrupcion esta. Y es combinado con el VC#. Ocea, a de crear un Thread (un subprocedimiento) que se encarge de una espera, fuera del programa principal, del buffer del Host. Asi, cuando aya llegado un dato, aparte de guardarlo (porq es muy poco elegante ya dije  :lol:) realizara algun otro evento enviando este byte a procesarlo o lo q sea.

Bueno, todo esto ultimo en codigos es asi:

VC#:
Primero, agregar a algunas funciones y varaibles el static. Exactamente a: vid_pid_norm, out_pipe, in_pipe, myOutPipe, myInPipe, OpenPipes() y ClosePipes(). Esto devido a que el Thread, encargado de la tarea de esperar la interrupcion sin colgar nuestro programa principal, solo es creado con static y, por ende, solo puede llamar a funciones static (Open/ClosePipes()). Los demas string's y void's es porque estos son llamados desde un metodo, ahora, static, ocea OpenPipes y ClosePipes.

Luego, crear el Thread, fuera del main porque se necesitara luego para cerrarla desde otro evento (aunq hay errores con esto porq la DLL nunca se cierra). Pero, sera iniciada desde el Main, eso si.

Y, por ultimo, hacer lo que el Thread hara ni bien se inicia el programa. Este, llama a _MPUSBEsperarInterrupcionYLeer(...) (si, yo lo cree  :lol:), que, es muy similar a _MPUSBRead pero que en la funcion WaitFosSingleObject(...) se queda indefinidamente esperando hasta que el evento Overlaped sea señalado (ocea que haya un dato en el buffer). Asiq dejo tambien la DLL modificada con esa sola funcion que le puse para lograr tal cometido  :mrgreen:

Ahora, si. Todo esto en codigo es asi:
Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices; // Clase para importar DLL
using System.Threading; //Clase para subprocesos.

using PVOID = System.IntPtr;
using DWORD = System.UInt32;

namespace PicUSB
{
    unsafe public class PicUSBAPI
    {
        #region Definición de los Strings: EndPoint y VID_PID
        static string vid_pid_norm = "vid_04d8&pid_0011"; //AHORA ES STATIC.

        static string out_pipe = "\\MCHP_EP1"; //AHORA ES STATIC.
        static string in_pipe = "\\MCHP_EP1"; //AHORA ES STATIC.
        #endregion

        #region Funciones importadas de la DLL: mpusbapi.dll
.
.
.
        [DllImport("mpusbapi.dll")]
        private static extern void* _MPUSBOpen(DWORD instance, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved);
       
        //LA NUEVA n.n'
[DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBEsperarInterrupcionYLeer(void* handle, void* pData, DWORD dwLen, DWORD* pLength);
       
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBRead(void* handle, void* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds);
.
        .
        .
        #endregion
       
        static void* myOutPipe; //AHORA ES STATIC.
        static void* myInPipe; //AHORA ES STATIC.
       
        //Creo un nuevo subproceso.
        static ThreadStart clase = new ThreadStart(Work);
        static Thread subprocedimiento = new Thread(clase);

        static void Main()
        {
            //Inicializo el subprocedimiento.
            subprocedimiento.Start();

            Application.EnableVisualStyles();
            Application.Run(new PicUSB());
           
        }

        public static void OpenPipes() //AHORA ES STATIC.
        {
            DWORD selection = 0;

            myOutPipe = _MPUSBOpen(selection, vid_pid_norm, out_pipe, 0, 0);
            myInPipe = _MPUSBOpen(selection, vid_pid_norm, in_pipe, 1, 0);
        }

        public static void ClosePipes() //AHORA ES STATIC.
        {
            _MPUSBClose(myOutPipe);
            _MPUSBClose(myInPipe);
        }

//Lo q quieras hacer cuando halla llegado el mensaje
        public static void RutinaISR(byte DatoLeido)
        {
            MessageBox.Show("Aja! Encontre un dato x) \r\n" + DatoLeido.ToString());
        }

//Codigo del Subproceso:
        public static void Work()
        {
            while (true)
            {
                DWORD OcurrioInterrupcion = 0, LongitudDelDato;
                byte* BuferDeDatos = stackalloc byte[1];

                OpenPipes();
               
                OcurrioInterrupcion = _MPUSBEsperarInterrupcionYLeer(myInPipe, (void*)BuferDeDatos, 1, &LongitudDelDato);

                //Verifico si realmente es correcto si regreso con datos. Porq no regresara hasta que los tenga.
                if ((OcurrioInterrupcion == 1) && (LongitudDelDato != 0))
                {
                    RutinaISR(BuferDeDatos[0]); //Ejecuto lo q quiero hacer cuando es pase.
                }

                ClosePipes();
            }
        }
       
        public void CerarHilo()
        {
            subprocedimiento.Abort();
     
        }
    }
}
Cuando llamo a _MPUSBEsperarInterrupcionYLeer(...) el subproceso se queda dormido, yaq ReadFile devuelve ERROR_IO_PENDING y la estructura overlapped es la encargada ahora de esperar que se lea algo en el buffer de entrada del host. Esto hace que no se gasten recursos del sistema.

Y la funcion CerrarHilo, es pues, para terminar con el Thread que se esta ejecutando en segundo plano. Esto simplemente llamadola desde el evento cuando se cierra la aplicacion (PicUSB_FormClosing):
(Esto va en el PicUSB.cs)
Código: [Seleccionar]
private void PicUSB_FormClosing(object sender, FormClosingEventArgs e)
{
    usbapi.CerarHilo();
}

CCS C:
Aqui, nada. Solo envia un byte mientras el programa este abierto y lo detectara. Puede ser con un boton o lo q sea =)

Y nada mas. Decir que hay errores, y feos:
-Cuando cierro el programa, el subproceso (o mas bien dicho la DLL) sige ejecutandose en espera de algun dato, aunq le diga q cierre el hilo sige igual.
-No llega a encontrar una seria asincrona de datos enviados desde el PIC. Esto me molesta porque se supone que si se especifica en el ultimo argumento de ReadFile alguna estructura Overlapeed, es porque quieres una lectura asincrona y, como comentario, encima de esa funcion, el creador del codigo, pones: // attempt an asynchronous read operation.
-El nombre de ...YLeer(...) es por una limitacion, yaque no encontre la forma de ver antes cuantos bytes hay por lee. Pense hacerlo con ClearCommError(...) pero, como dije, esta familia de comunicacion me devuelve errores.
-Hay veces que se "autodesconecta" el dispositivo cuando intento capturar unos 10 datos enviados simultaneamente desde el pic a la PC.
-No se puede escribir, yaq el Thread esta manteniendo el handle de Read abierto y esperando :lol:
.
.
.

Si, lose. Es horrible. Pero como primer paso va bien, el programa detecta siquiera un dato y lo devuelve inmediatamente.

Por otro lado, me dijieron que para hacer tal "catch" a la interrupcion no es necesario de modifcar nada en el driver, yaq esta solo es para definir la comunicacion y esas cosas, ustedes saben... la pipe de control y eso. Y de que, es la DLL en si la q se dedica a ello.

Lo q podria ser de muy buena ayuda es, como ya dije, la funcion de la API: DeviceIoControl. Pero, hay algunos parametros que nose q especificar, yaq solo funciona para la pipe de interupcion y no reconoce el handle del bulk. Aunq encontre algunos ejemplos en la DDK que usa J1M para la instalacion de la clase y eso, donde hacen uso de esta funcion y trata, en esta misma, al usb y verificacion de alguna interrupcion (la testmcro.cpp, la funcion GetInterruptEvent (helper)). No la e visto mucho pero puede ser de gran ayuda. En si, creo q todo se torna a esta funcion pero nose que tanto se podria hacer.

Algo mas q me dijieron era usar unas funciones (o la verdad q nose q son) llamadas: BEGIN_MESSAGE_MAP y END_MESSAGE_MAP. Que sirven para rastrear algun evento en particular. Algo asi mas o menos estoy entendiendo, la verdad que es muy nuevo esto del API y sus funciones y todo, en si todo  :D

Bueno, espero q alguien mas se suba al carro porque ando solo en esto y ya me esta dando miedo  :mrgreen:


Un saludo para todos.

PD: En el archivo adjunto esta la DLL modificada y los 2 archivos (el .cpp y el .h) que tuve q agregarle la nueva funcion, esa si, la fea  :D... por si se quiere recompilar o lo q sea.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 09 de Febrero de 2008, 11:04:01
Enhorabuena por ese pedazo análisis que le estas haciendo a la mpusbapi!!! Seguro que finalmente lograrás lo que buscas!! Eso de pelearse con los 'hilos' y demás historias de C# me da 'yuyu'! jejeje

saludos y gracias por postear tus progresos! :)
Título: Re: Proyecto PicUSB
Publicado por: gera en 09 de Febrero de 2008, 12:22:54
Hola zspikes.

A que te refieres con tu propio codigo para PC? A la programacion para el programa de usuario?, porq este esta echo en VC#, c++, delphi, etc.

Y tampoco se a q te refieres con las librerias gtk.

Quisiera ayudarte pero no entiendo q es lo q quieres enrealidad.

Buenas jeremylf! Gracias por responder :)
Eso es exactamente a lo q me refiero, a un programa de usuario. Pero no olvides q uso Linux. La cosa es que la parte del código de la GUI me perdió bastante y no sé bien qué partes del código son las esenciales, osea, las que envían y reciben los datos.
Me gustaría hacer un programita de pocas líneas, que se ejecute simplemente desde la consola, se conecte, intercambie un par de datos vía USB y listo.
Espero haber sido claro, perdón si no lo fui antes. Saludos!!!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 09 de Febrero de 2008, 15:52:08
Si, tienes razon. Eso de los hilos no tenia ni idea; y C# y C++.. como q la cosa cambia, pero con su ayuda, poniendo Thread, me ayudo de mucho  :D
Gracias por el animo!  :)

zspikes, no trabajo en Linux y no sabria ayudarte en esto. Creo, que aqui postearon como hacer PicUSB en Linux. Quiza el te pueda ayudar, esta unas paginas mas arriba creo =) Intenta contactactar con el, podria ayudarte en el tema de Linux.


Salu2
Título: Re: Proyecto PicUSB
Publicado por: ma4826 en 09 de Febrero de 2008, 18:33:45
Hola Zspikes,

Los archivos fundamentales para el usb son el Picusb.c y el Picusb.h.

Saludos,

Miguel Angel.


Título: Re: Proyecto PicUSB
Publicado por: SimonMG en 09 de Febrero de 2008, 20:26:59
Saludos Zspikes, para linux es mejor y mucho mas versatil usar Python para interactuar con el USB, hay miles de ejemplos en internet, ademas de poder crear una interfase gtk basada en python con wxpython. Suerte
Título: Re: Proyecto PicUSB
Publicado por: gera en 09 de Febrero de 2008, 22:07:51
zspikes, no trabajo en Linux y no sabria ayudarte en esto. Creo, que aqui postearon como hacer PicUSB en Linux. Quiza el te pueda ayudar, esta unas paginas mas arriba creo =) Intenta contactactar con el, podria ayudarte en el tema de Linux.
Salu2
Hola Zspikes,
Los archivos fundamentales para el usb son el Picusb.c y el Picusb.h.
Saludos,
Miguel Angel.

Muchas gracias a ambos!!! Logré hacer lo q quería. Al final era agregar un "-lusb" al compilar, como bien dijo Miguel en su privado :)
Ahora voy a ver si hago una versión simplificada del programa, así otros usuarios q tengan las dudas q tuve yo se benefician de el ;)

Y ya q estamos, pregunto... el programa q va grabado en el pic, será muy dificil de hacer en ensamblador? Es q para mi proyecto me piden una parte en C y otra en ensamblador, y de principio tenia pensado programar un pic en ensamblador y sus "drivers" en C. Creo q la unica parte dificil seria la de recibir y enviar datos por USB... una vez teniendo el dato, el resto del programa es facil.

Nuevamente, muchas gracias muchachos! espero algun dia compensar todo esto y poder ayudarlos en algo :)

EDIT:
Saludos Zspikes, para linux es mejor y mucho mas versatil usar Python para interactuar con el USB, hay miles de ejemplos en internet, ademas de poder crear una interfase gtk basada en python con wxpython. Suerte
Lo sé, siempre q puedo trato de usar python, no cabe duda de q nos saca un gran peso de encima para poder dedicarnos de pleno al problema principal... pero como comentaba mas arriba, el proyecto debe contar con una parte en C y otra en ensamblador. De todos modos no descarto tu consejo para futuros proyectos ;)
saludos!!!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 10 de Febrero de 2008, 04:12:26
Y ya q estamos, pregunto... el programa q va grabado en el pic, será muy dificil de hacer en ensamblador? Es q para mi proyecto me piden una parte en C y otra en ensamblador, y de principio tenia pensado programar un pic en ensamblador y sus "drivers" en C. Creo q la unica parte dificil seria la de recibir y enviar datos por USB... una vez teniendo el dato, el resto del programa es facil.
Mira que es lo que hace las funciones de envio/recibo y demas, en su respectivo archivo .c o .h, entiendelo, y luego mira tb lo q el CCS te traduce eso a assembler (en el archivo .list q te crea). Y, con eso, ya tienes todas las partes q quieres en C y/o assembler. Hasta podrias "reducir" el codigo, si sabes lo que haces claro  :D

Suerte.
Salu2.
Título: Re: Proyecto PicUSB
Publicado por: gera en 10 de Febrero de 2008, 23:03:14
Gracias por el consejo jeremy ;) por ahora no cuento con el CCS porq no uso windows :( pero estoy viendo de instalarlo por lo menos en una VM, hasta q linux tenga mejor soporte con este asunto de los pic.

Mientras tanto les comento q estoy trabajando en una version de PicUSB para ejecutar en un shell unix, pero me ocurre algo muy extraño: La primera vez q se ejecuta el programa funciona bien, pero al ejecutarlo nuevamente da error. Supongo q el problema esta en q el dispositivo no se cierra como corresponde. Pero es curioso, porq tengo una version de prueba del mismo programa q funciona a la perfeccion :S alguien tiene idea de q pasa?

Adjunto ambas versiones con un LEEME que explica como compilar y los problemas
saludos!
Título: Re: Proyecto PicUSB
Publicado por: diogoc en 13 de Febrero de 2008, 17:13:12
Hi!
 i like to know it it is possible receive more than one byte with usb_receive. vi in labview? i receive more than one byte but the format is an integer and i dont know how separate the bytes of an integer. ist possible to recive the data in a array?
thanks and sorry for my english
Título: Re: Proyecto PicUSB
Publicado por: MGLSOFT en 13 de Febrero de 2008, 18:03:20
Estimado Diogoc.
Bienvenido al foro.
Porque no posteas en tu idioma original, el portugues??
Aqui hay muchos foreros que lo hacen, y de esa forma hacemos menos esfuerzos para entendernos, ya que tu lengua es del mismo origen Latino que el español, lo que hace que haya mucho mas gente disponible para poder ayudarte. :mrgreen: :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 13 de Febrero de 2008, 18:23:03
Hi!
 i like to know it it is possible receive more than one byte with usb_receive. vi in labview? i receive more than one byte but the format is an integer and i dont know how separate the bytes of an integer. ist possible to recive the data in a array?
thanks and sorry for my english

En portugués es mejor. Em portugues é melhor.  :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: J1M en 14 de Febrero de 2008, 00:41:35
Marcos, Diego, creéis que sería mejor que siguiera la duda en este hilo??
http://www.todopic.com.ar/foros/index.php?topic=2252.msg154304#msg154304

En cuanto leais esto borro este post :)

Yo creo que si. (MGLSOFT). :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: gera en 14 de Febrero de 2008, 00:55:13
vuelve el perro arrepentido... =(
gente, de nuevo yo... espero no molestar con tantas preguntas, me siento pesado ya u_u

les comento q ya instale win en una pc q tengo por aca, y ya tengo el mplab y el css v4.038 (q fea interfaz por cierto...). La cuestion es q parece q el CCS no tiene la libreria <pic18_usb.h> y estuve googleando un buen rato y no la puedo encontrar...
alguien me la podria facilitar por favor? estoy ansioso por generar mi propio codigo ^^

saludos!
Título: Re: Proyecto PicUSB <PC-PICUSB CDC-MAX485-MAX485-PIC>
Publicado por: huichoman en 14 de Febrero de 2008, 01:58:19
Hola, vengo del foro de Delphi, pues considero este hilo el lugar más  apropiado para mis dudas :mrgreen:.

Estoy tratando de hacer un puente algo así por el estilo: PC-PIC USBCDC-MAX485-MAX485-PIC

Para la simulación utilizo: PROTEUS ISIS, Virtual Serial Port driver y un programa hecho en delphi. Versión del compilador, CCS 4.065.

Al mandar un comando desde el programa en Delphi, el PIC que está al otro extremo recibe y contesta  correctamente, pero se muere en el instante. En un post anterior J1M comentó algo sobre "vaciar el buffer de residuos" utilizando la función
usb_cdc_flush_out_buffer();  que Alejandro le solucionó un problema similar. En que parte tendría que utilizar dicha función??. Otro detalle es que al cerrar el programa de lado de la PC, el proceso queda activo, y es imposible terminarlo, obligándome a reiniciar. Alguien con una  :idea: que me guíe??? :mrgreen:

Este es el código fuente para el PIC18F2550. Esta basado en el ejemplo del maestro Redpic para la comunicación USB CDC.

Código: [Seleccionar]
#use delay(clock=48000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,parity=N)        //Modificación
#include ".\include\usb_cdc.h"
#rom int 0xf00000={1,2,3,4}


#define enviar_on PIN_B0     //Modificación
#define STX 0x02
#define ETX 0x03

void enviar(void);
void recibir(void);

void enviar(void){
  output_high(enviar_on);
  delay_ms(5);
}

void recibir(void){
  delay_ms(5);
  output_low(enviar_on);
  delay_ms(1);}


void main() {
   BYTE i, j, address, value;
   char c;
   recibir();
   delay_ms(333);
   
   usb_cdc_init();
   usb_init();
   
   while(!usb_cdc_connected()) {}

   do {
      usb_task();
      if (usb_enumerated())

     {
     
      if (kbhit()) {
         c=getc();
         usb_cdc_putc(c);}
      }
      if (usb_cdc_kbhit()) {
         c=usb_cdc_getc();
         enviar(); putc(c); recibir();}
      }     
     
     }
   } while (TRUE);
   
 
}


Ganbatte kudasai.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 14 de Febrero de 2008, 10:50:47
Zspikes esa versión del CCS debería llevarlo incluido, busca en la carpeta de Drivers. Sino, reinstala el programa.
Huichoman te sucede lo mismo que a mí, pero con 232, aún no he consegguido encontrar el problema.. recibo 3 bytes de los 14 que debería recibir y el PIC se me cuelga... hasta que no lo reseteo no me hace ni caso. En cuanto encuentre solución te cuento por si fuera lo mismo que te sucede a tí...

mata ne! :)

Título: Re: Proyecto PicUSB
Publicado por: pocher en 14 de Febrero de 2008, 16:55:08
Hola J1M y huichoman, me habeis picao. Como todavía tengo la board con el USB montado voy a ver si le añado otro PIC (16F876) por 232.

Huichoman dices que en la comunicación PC <---> PIC1 <---> PIC2 el PIC que se te queda colgado es el PIC2 ¿no? , que raro, parece que fuera más lógico que el que se colgara fuera el PIC1 que es el que tiene el USB ... voy a ver si lo monto.
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 14 de Febrero de 2008, 17:10:26

Huichoman dices que en la comunicación PC <---> PIC1 <---> PIC2 el PIC que se te queda colgado es el PIC2 ¿no? , que raro, parece que fuera más lógico que el que se colgara fuera el PIC1 que es el que tiene el USB ...

Hola Pocher, disculpa fué error de redacción, el que se queda colgado es el PIC1, y tambien se queda colgado el proceso del programa en la PC (Rs485.exe) y no lo puedo terminar hasta que reinicie.  Ahora, estoy en fase de prueba, todo simulado este fin voy a hacer las pruebas físicas. Ahora mismo voy de salida al médico, regresando subo un video. El problema en si es el siguiente, Inicio la simulación en proteus, espero a que me cree el puerto virtual en mi caso el COM3, abro el programa que utilizo para mandar datos, me conecto al com3, espero a que proteus procese los datos (la compu al 100%), manda los datos, el PIC2 recibe los datos, despliega en un lcd lo correspondiente al comando recibido dentro de la cadena de caracteres enviada, responde con otra cadena, la cual se despliega en el programa de la PC. A partir de ahi espero un tiempo pertinente y vuelvo a mandar otro comando, pero naaaaada de naaaaaaada. osease que si funciona, pero solouna vez  :mrgreen:.

Saludos

Gabnatte kudasai.

matane
Título: Re: Proyecto PicUSB
Publicado por: pocher en 14 de Febrero de 2008, 17:59:34
La LCD quien la tiene ¿el PIC1 ó el PIC2? Manda el fichero de PROTEUS.
Título: Re: Proyecto PicUSB
Publicado por: pocher en 15 de Febrero de 2008, 03:40:02
Acabo de probar la comunicación PC <---> PIC1 ---> PIC2 y funciona bien.

He de decir que la primera vez funcionó mal: los LEDs del PIC2 no se encendian correctamente. Reseteé el PIC2 y a partir de aquí siempre a recibido bien.

Me falta hacer cambios en el programa para probar la comunicación bidireccional total: PC <---> PIC1 <---> PIC2

Voy a ello.
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 15 de Febrero de 2008, 05:15:25
Hola amigo Pocher. 

Te pongo el rar con el archivo en proteus, los programas para ambos pics y el programa que utilizo para la comunicación.  Saludos y gracias por toda la ayuda.

USBCDCRS485.rar (http://hostfile.org/USBCDCRS485.rar)

Ganbatte kudasai.

Título: Re: Proyecto PicUSB
Publicado por: pocher en 15 de Febrero de 2008, 09:35:13
 :-/ ¡¡¡ También FUNCIONA !!! :-/     :-/ ¡¡¡ Oeh, Oeh, Oeh !!! :-/

El único problema que sigue habiendo es que hay que resetear al PIC2 inicialmente, luego la comunicación bidireccional funciona perfectamente todo el rato. Me falta probar si añadiéndole al PIC2 un RESET_CPU() ya no sería necesario ir con el dedito a hacer un reset inicialmente.

La comunicación entre PICs la he hecho rapidito, únicamente con dos cables (transmisión y recepción)

Ahora que estoy "entusiasmato" voy a mirarme lo tuyo huichoman a ver si lo hechamos a andar.


Título: Re: Proyecto PicUSB
Publicado por: pocher en 15 de Febrero de 2008, 09:41:04
Lo siento huichoman pero me dá error al intentar descargar el archivo.
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 15 de Febrero de 2008, 11:22:13
Hola Pocher, acabo de probar el enlace y si funciona, pero por silas moscas te subí el archivo en rapidshare.

DESCARGAR ARCHIVO (http://rapidshare.com/files/92035291/USB_CDC_RS485.rar.html)

Saludos.


Ganbatte kudasai.
Título: Re: Proyecto PicUSB
Publicado por: pocher en 15 de Febrero de 2008, 15:26:17
Hola huichoman.

He estado mirando los archivos que has enviado y he visto varias cosas:

- En el PIC1 (el que tiene USB) utilizas para la recepción de caracteres c=getc() en el while. Esto no es recomendable, a mí en ocasiones no me ha funcionado bien. Debes de hacerlo siempre por interrupción RDA.

- En el PIC2 (esclavo) utilizas las rutina de interrupción de RedPic. Quizá seria aconsejable que dejaras una rutina de interrupción más pequeña sin tanto comando. Lo digo para que no te lies y una vez que te funcione pués añade lo que quieras, al fin y al cabo lo único que vas a recibir es un byte por interrupción.

- No veo las señales de control del 485. Sin el control de estas señales no te puede funcionar.

- En la parte del PC yo uso VB y en Delphi no te puedo ayudar.

Un saludo.

PD. Ya he solucionado lo de tener que hacer un reset al PIC2 al principio. Se ha solucionado haciendo que al arrancar el VB automáticamente al cargar el formulario mande un comando a cada PIC y que estos respondan. No lo tengo muy claro pero así funciona y si funciona prohibido tocar.
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 15 de Febrero de 2008, 16:11:31
Hola pocher .

Citar
En el PIC1 (el que tiene USB) utilizas para la recepción de caracteres c=getc() en el while. Esto no es recomendable, a mí en ocasiones no me ha funcionado bien. Debes de hacerlo siempre por interrupción RDA.

Ok. Realizaré el cambio.


Citar
En el PIC2 (esclavo) utilizas las rutina de interrupción de RedPic. Quizá seria aconsejable que dejaras una rutina de interrupción más pequeña sin tanto comando. Lo digo para que no te lies y una vez que te funcione pués añade lo que quieras, al fin y al cabo lo único que vas a recibir es un byte por interrupción.

La rutina funciona perfectamente, ya hice las pruebas pic-MAX485-MAX485-MAX232-PROGRAMA EN DELPHI. Va como la seda.

Citar
No veo las señales de control del 485. Sin el control de estas señales no te puede funcionar.
Las señales para el control 485 si estan, son las funciones enviar();   y recibir ();.


Podrias compartir lo que estas en el lado del pic con usb para checar el còdigo... porfaaaaaaaaa. :mrgreen:

Saludos, llegando a casa le sigo machetetando. Ahora mismo estoy en la uni. jeje

Saludos.

Ganbatte kudasai.


Título: Re: Proyecto PicUSB
Publicado por: pocher en 15 de Febrero de 2008, 16:30:16
Es cierto sí las tienes.

La aplicación que tengo es bastante larga. A ver si la recorto y te pego lo que me has pedido.

Un saludo.
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 16 de Febrero de 2008, 02:56:18
La aplicación que tengo es bastante larga. A ver si la recorto y te pego lo que me has pedido.

Sería de múchisima ayuda. Solo necesito un pequeño ejemplo para agarrar el camino.  :mrgreen:

Saludos y gracias por la ayuda.

Ganbatte kudasai.
Título: Re: Proyecto PicUSB
Publicado por: pocher en 16 de Febrero de 2008, 04:47:04
Hola huichoman, de nuevo por aquí.

He empezado a quitar de aquí y de allá y tanto he querido quitar para dejarlo sencillo que al final no me funcionaba. Llevo peleando unas cuantas horas y al final como casi todo el error era una chorrada, había borrado la puesta a 0 inicial de un array de caracteres.

He intentado adaptar la programación a lo que tú quieres.

Estos son los programas:

Para el PIC1:

Código: [Seleccionar]
#include <18F4550.h>
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN

#use delay(clock=48000000)

#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)

#use fast_io(B)

#include "usb_cdc.h"

char a[5];
int j,k;

#int_rda
void recepcion_serie()
{
if(kbhit())
{
a[j] = getc();
j++;
}
                                                                       

void main(void)                                                         
{
       char c;
       int x;                                         
 
  set_tris_b(0x00);
 
enable_interrupts(INT_RDA);
  enable_interrupts(GLOBAL);   

output_high(pin_b7);
output_low(pin_b6);

    usb_cdc_init();                                             
    usb_init();
   
    while(!usb_cdc_connected()) {}
     
  output_low (pin_b7);
output_high (pin_b6);

for (x=0;x<6;x++) //Fundamental inicializarlas, de lo contrario no va bien
a[x] =0;            
    while (1)                                                       
    {
      usb_task();
         
        if(usb_enumerated())                                 
        {
            if (usb_cdc_kbhit())                         
            {                             
                            c=usb_cdc_getc();
                            putc(c);                     
                        }                                           
                                                                                                   
  if(j==4)
    {
    disable_interrupts(INT_RDA);
   
    output_bit(PIN_B0,bit_test(a[0],0));
    output_bit(PIN_B1,bit_test(a[1],0));
    output_bit(PIN_B2,bit_test(a[2],0));
    output_bit(PIN_B3,bit_test(a[3],0));
                   
for (k=0;k<4;k++)
usb_cdc_putc(a[k]);

j=0;

  enable_interrupts(INT_RDA);  
    }   
}
}
}


Para el PIC2:

Código: [Seleccionar]
#include <16f876.h>

#fuses XT, NOPROTECT, NOWRT, PUT, NOWDT, NOLVP, NOCPD, BROWNOUT

#use delay(clock=4000000)

#use rs232(baud=9600, BITS=8, PARITY=N, xmit=pin_c6, rcv=pin_c7)

#use fast_io(B)

#byte port_b=6

int j=0,n;
char c;

#int_rda
void recepcion_serie()
{
if(kbhit())
{
c = getc();
j=1;
}


void main(void)
{
set_tris_b(0x00);

enable_interrupts(INT_RDA);
  enable_interrupts(GLOBAL);

output_b(0x00);

  while(1)
  {     
  if(j==1)
    {
      disable_interrupts(INT_RDA);
             
      if(c=='0')     
    output_bit(PIN_B0,1);   

      if(c=='1')   
    output_bit(PIN_B1,1);   

      if(c=='2')   
    output_bit(PIN_B2,1);   

      if(c=='3')   
    output_bit(PIN_B3,1);   

      if(c=='*')   
    output_b(0x00);   

      for (n=0;n<4;n++)
putc(bit_test(port_b,n) + '0');

j=0;

  enable_interrupts(INT_RDA);  
}
     
  }


Un saludo
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 16 de Febrero de 2008, 11:58:51
Hola Pocher.

Te  agradezco  muchísimo, y disculpa que te haya quitado un poquito de tu tiempo.  :mrgreen:  Sobre lo de que "Al final como casi todo error era una chorrada"  :D jajaja, creo que a todos nos ha pasado, pelearnos varias horas, revisando circuito, revisando código, golpearse la cabeza con el teclado  :z), hasta qué miras al cielo respiras hondo, cuentas hasta diez, le das un vistazo al programa y  :shock:  :shock:  :shock: encuentras el "fallito"  :mrgreen:.

Por lo demás amigo, de nuevo te agradezco, ayer mismo en la madrugada estuve haciendo el diseño de la pcb para comenzar con las prácticas físicas, probaré el código que amablemente me compartes, ahora mismo estoy analizando los códigos de ejemplo que trae el pcw, y buscando como sabueso toda la info en google. Lo que no se es si exista un manual de compilador sobre la comunicación usb. En cuanto realice las pruebas iré posteando los resultados.

Matane.

Ganbatte kudasai.

Título: Re: Proyecto PicUSB
Publicado por: Geo en 18 de Febrero de 2008, 01:01:09
Novedades!!!

Microchip ha sacado la versión 1.3 de su stack, en otras palabras, hay nueva versión del driver mpusbapi.dll, aquí las novedades:

What's New/Updated in Release v1.3
·         Microchip General Purpose USB Windows® Driver, mchpusb.sys v1.0.0.6, is updated to support Windows Vista™ and 64-bit Windows® Operating Systems. This version is WHQL certified.
·         CDC RS-232 emulation INF file, mchpcdc.inf, updated for supporting Windows Vista™ 32-bit and 64-bit.
·         Some bug fixes in USB library firmware (usb9.c).

http://ww1.microchip.com/downloads/en/DeviceDoc/Release%20Notes%20for%20MCHPFSUSB%20v1.3.htm
http://ww1.microchip.com/downloads/en/DeviceDoc/MCHPFSUSB_Setup_v1.3.exe

Ya se puede volver a jugar con el driver de microchip... ahora en Vista y versiones de 64bits de windows, voy a ojearlo a ver que tal va! ;)
Jaja, ahora que ya estaba usando WinUSB con C++, mmmm, bueno, al menos aprendí algo más :D. Por ahora estoy usando WinUSB con C++ (uso VC++ 2008 Express), también libusb-win32 (con wxWidgets se tiene una aplicación USB completamente portable :D).

zspikes: yo veo más sencillo que implementes las partes de manejo USB del PIC en C, y las rutinas de entrada/salida de los pines con algún periférico en ensamblador, así podrías cumplir con lo que te piden.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 18 de Febrero de 2008, 20:26:13
Pocher, se solucionó mi problema con interrupciones en la recepción del 232, es extraño pq teóricamente debería funcionar sin estas, quizá me fallaba algo con respecto a los tiempos y se 'colgaba' el PIC.

saludos!
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 19 de Febrero de 2008, 01:17:46
Hola  J1m. Puedes  enviar y recibir  sin problemas  en modo cdc????? Cual era el error???  Aun  no he  probrado el código que amablemente puso Pocher,  :?  Hasta este fin  podré hacerlo, (inches tareas de la escuela).  :mrgreen:

Por otro lado,  cual  es la diferencia en utilizar HSPLL  y  XTPLL???




Saludos.


Ganbatte kudasai.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 19 de Febrero de 2008, 01:28:23
En mi caso, el error era que en vez de obtener los caracteres de un dispositivo que me envía vía RS232 al PIC, mediante interrupción y envío al USB, lo estaba haciendo a 'pelo'... me metía en un bucle while(kbhit()) y obtenía caracteres. El problema es que ese bucle colgaba el PIC, supongo algo raro pasaba con el buffer de recepción del RS232. Ahora lo que tengo es una interrupción para el RS232 en la que un flag se pondrá a 1 cuando haya recibido todo el string q espero recibir, mientras tanto tengo al PIC en un while(!flag){} con un timeout para que en el caso de que algo falle con la recepción, no se me quede el micro en un bucle infinito.

La diferencia, si no recuerdo mal, es que el HS es para >=8MHZ y el XT para >8MHz, creo que lo ponía el DS del 18Fxxxx no?

saludos! :)
Título: Re: Proyecto PicUSB
Publicado por: pocher en 19 de Febrero de 2008, 04:21:43
J1M me alegra si te he podido ayudar en algo, sin tus aportes sobre USB esa pequeña ayuda no hubiera sido posible.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 20 de Febrero de 2008, 05:01:27
Nose si habra diferencia en XT y XTPLL o HS y HSPLL en lo que se refiere a que entrada de cristal soportan cada uno, aunque lo de PLL solo indica que la velocidad a la que correra el pic es dada por el mismo procedimiento para obtener los 48 mhz para el usb, por eso nose si J1M se esta equivocando. Pero, que yo sepa, XT es: <= 4MHZ. Y HS: >4MHZ.

Salu2.

Título: Re: Proyecto PicUSB
Publicado por: J1M en 20 de Febrero de 2008, 11:58:34
Gracias pocher, quizá esa sea una de las mayores genialidades de este foro, cada uno con su granito de arena hace q sea posible levantar montañas ;)

Pues creo que si estaba equivocado, efectivamente el XT es para cristales de 4Mhz o menores. Aun así, si la frecuencia a la que funcionará el micro se puede elevar hasta los 48Mhz (si no recuerdo mal) mediante un cristal de 4Mhz activando el XTPLL.

un saludo!
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 25 de Febrero de 2008, 01:44:04
Hola amigos. Gracias por las respuestas.

Como antes comenté, estaba haciendo pruebas con las comunicación USB_CDC y un max485, pero todo simulado, y se moría el pic. Ahora, necesito hacer las pruebas físicas. Hice una pequeña placa para probar la comunicación. Ahora el problema es que normalmente utilizo ARES para el diseño del PCB, pero a falta de librerias, me pasé a eagle. Ahora, es un poquito mas complicado de agarrarle pero aca posteo como quedo el esquemático guiándome de los diseños de Redpic y J1M, si hay algún fallo o si sepuede hacer alguna mejora les agradecería muchísimo que me lo hicieran saber.

(http://hostfile.org/usbrs485.png)

(http://hostfile.org/usb485pcb2.png)

(http://hostfile.org/usbrs485pcb.png)

En cuanto pase la prueba de calidad, posteo los archivos.

Saludos.

Ganbatte kudasai.

Título: Re: Proyecto PicUSB
Publicado por: bigarthur85 en 25 de Febrero de 2008, 02:08:05
hola, estoy desesperado, al conectar el pic a la pc, nunca me pide que escoja el driver, asi que en el device manager lo desinstalo el driver que automaticamente instala (que no sirve por cierto), pero cuando le pongo update driver no me reconoce los drivers que mando jim como validos, nunca logra instalarlo, que puedo hacer, de donde saco el driver correcto, estoy usando el pic18f4450, ayuda por favor.
Título: Re: Proyecto PicUSB
Publicado por: jjcblanco en 25 de Febrero de 2008, 13:41:18
hola tengo una pregunta, probe en xp el ejemplo de j1m  y anda barabaro pero cuando lo quiero probar en xp cambiando el driver (poniendo el de picwinusb) tendria que funcionar y no funciona , pero no estan el el zip los source de c# como estan en el otro y no se si ahi hay que hacer alguna modificacion de la libreria.

Gracias
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 25 de Febrero de 2008, 17:14:18
huichoman ¿y ese pic no va a tierra?, está volando  :D :D

Título: Re: Proyecto PicUSB
Publicado por: MGLSOFT en 25 de Febrero de 2008, 17:27:09
Si, le falta la alimentacion negativa, conectala a ambos pines VSS... :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 25 de Febrero de 2008, 19:53:52
Jejeje, Hola de nuevo amigos. Sobre los pines al aire del pic, pues no se los conecté en el esquemático, porqué en la PCB, automáticamente los conectaba (Es necesario? o es buena práctica hacerlo?). Sobre el diseño, pienso alimentarlo desde el puerto USB, espero no sea ningún problema. Alguna otra falla? sugerencia?  esperaré hasta mañana  :mrgreen: para fabricar el pcb  y probar el funcionamiento del mismo :-/. Ya les iré contando como va a el asunto.

Saludos a todos, ya gracias por todo.

Ganbatte kudasai.
Título: Re: Proyecto PicUSB
Publicado por: Sispic en 26 de Febrero de 2008, 08:45:27
Novedades!!!

Microchip ha sacado la versión 1.3 de su stack, en otras palabras, hay nueva versión del driver mpusbapi.dll, aquí las novedades:


Funciona perfecto con vista32 y vista64  :-/
Título: Re: Proyecto PicUSB
Publicado por: scorp_185 en 27 de Febrero de 2008, 16:55:28
Necesito comunicar el 18f4550 con la PC via USB
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 27 de Febrero de 2008, 18:33:10
Necesito comunicar el 18f4550 con la PC via USB

¿Y por donde piensas empezar?

Quizás podrías empezar por leer este hilo. En él tienes casi todo lo que necesitas.

Suerte.
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 27 de Febrero de 2008, 18:49:58
Alguna otra falla? sugerencia?  esperaré hasta mañana  :mrgreen: para fabricar el pcb  y probar el funcionamiento del mismo :-/. Ya les iré contando como va a el asunto.

No se si llegaré a tiempo de avisarte que los pad's que pone por defecto el Eagle son muy finos y si no tienes cuidado al taladrar se podrían deteriorar o alguno de ellos en el atacado podrían desaparecer.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: J1M en 27 de Febrero de 2008, 21:18:55
Sí Sisco! han tardado un año pero bueno, la espera ha merecido la pena :) ... Aunque nada como la experiencia de hacer nuestros propios drivers ehh!! jejeje vaya tardes de verano! :D
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 27 de Febrero de 2008, 22:10:11
No se si llegaré a tiempo de avisarte que los pad's que pone por defecto el Eagle son muy finos y si no tienes cuidado al taladrar se podrían deteriorar o alguno de ellos en el atacado podrían desaparecer.

Un saludo

Hola amigo, aun llegas a tiempo, este fin hago la placa, utilizaré como siempre el método de la plancha y papel pnp blue. Gracias por la sugerencia, despues del ruteo,  aumenté un pelín el grosor de todas las pistas. En cuanto esté terminada subo las fotos.

Mientras tanto acá una foto de la pcb impresa en papel normal y corriente con algunos de los componentes encima para checar que las dimensiones sean las correctas.

(http://hostfile.org/testpcb.png)


Al parecer todo bien   :mrgreen:

Saludos. y ha seguir dándole duro.

Ganbatte kudasai.
Título: Re: Proyecto PicUSB
Publicado por: Sispic en 29 de Febrero de 2008, 07:54:30
Sí Sisco! han tardado un año pero bueno, la espera ha merecido la pena :) ... Aunque nada como la experiencia de hacer nuestros propios drivers ehh!! jejeje vaya tardes de verano! :D

Asi es como se aprende y ya nunca mas iremos a caballo de ellos .

por cierto ya consegui hacer funcionar el USB HID con delphi , gracias por tu ayuda  :-/
Título: Re: Proyecto PicUSB
Publicado por: cactus_power en 29 de Febrero de 2008, 14:39:26
Buenas a todos, primeramente felicitaros a todos, J1M, Sispic, Nocturno, Red... y un laargo etcétera por vuestras explicaciones, que hacen de posts como éste auténticas joyas.

Os explico, he realizado mi propio programa para el PIC, la intención final (dónde ahora estoy enganchado) es conectarlo al PC mediante USB.

Realicé la programación / grabación de todo el PIC sin problemas, i me bajé el driver para xp y la mpusbapi.dll.

Logré conectar el PIC al puerto USB e instalar el driver sin problemas. Cada vez que lo conecto me lo reconoce sin ningún problema y me aparece en la lista de dispositivos del hardware del sistema.

El problema llega inusualmente con la aplicación Visual Basic (dónde esperaba no tener problemas).

Dispongo de proyecto VB que consta un formulario con los respectivos comandos, y con la VBMPUSBAPI (que és la que enlaza con la mpusbapi.dll, que a su vez va en busca del driver).

El problema llega en la ejecución de la instrucción MPUSBDeviceCount(vid_pid).

Aquí me debería retornar el número de dispositivos que tengo conectados con la misma VID&PID que el driver. Me retorna '0' :_(  :O

No entiendo dónde puede hallarse el problema, pues la VID&PID que he puesto en VB es la misma que puse en el PIC, la qual si que funciona ya que el driver me reconoce el dispositivo siempre que lo conecto.


Nos vemos. Gracias.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 29 de Febrero de 2008, 15:11:57
Ole Sisco! Me alegro que funcione la cosa :) De nada, para eso estamos ;)

Hola Cactus, primeramente, bienvenido al foro! Respecto a tu problemilla, has probado con el ejemplo en VB que tengo en mi página?? Funciona??
http://www.hobbypic.com/index.php?option=com_content&task=view&id=24&Itemid=27

Si ese hace lo que debe hacer intentamos encontrar el problema.


saludos
Título: Re: Proyecto PicUSB
Publicado por: cactus_power en 29 de Febrero de 2008, 15:35:50
Oh que velocidad de respuesta! Así da gusto hasta tener problemas.

Sí J1M, de hecho para hacer el mío me basé en ese.

Ahora he ejecutado la parte de VB de ese proyecto (con mi programa en el PIC, y este conectado al PC, que lo reconoce), y sigue diciendome que "NO HAY PERIFERICOS", és decir MPUSBDeviceCount(vid_pid) = 0

Creo que para la detección del perifèrico, será lo mismo mi firmware del PIC que el suyo, ya que ambos utilizan las mismas librerias i VID&PID del driver. Y el mío lo ha reconocido cada vez que conecto.

No sé por donde tirar...

Puede ser que el problema está en la comunicación entre mpusbapi.dll i Driver???

Gracias una vez más ;).
Título: Re: Proyecto PicUSB
Publicado por: Geo en 01 de Marzo de 2008, 00:26:11
¿Es la única función de la API de Microchip que falla?
¿Podrías poner el código que estás utilizando? Tanto la declaración de la función MPUSBGetDeviceCount como los parámetros que le pasas :).

Ánimo que todo tiene solución ;).
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 01 de Marzo de 2008, 01:43:22
Saludos de nuevo amigos.

Listo despues de pelearme con la plancha porque ya no regula, calienta muchísimo. Termine la placa. Hace apenas una hora.  :-/ .

Ahora mismo checo continuidad, y pruebo algun ejemplo.  ojalá funcione sin problema.  :mrgreen:

(http://hostfile.org/placausbrs485.png)


Saludos y gracias por todo. Iré reportando los avance que vaya teniendo y los azotes qye vaya llevando  :D.

Ganbatte kudasaiiiiiiiiii.
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 01 de Marzo de 2008, 03:09:21
Vaya! Te quedo bien. Aunque las resistencias algo "puestas al apuro"  :D

Suerte  :P
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 01 de Marzo de 2008, 03:29:53
Jajaja si, las pusé con poco esmero jeje.

Una duda, le puse un capacitor de tantalio, perooooooo para checar la polaridad me guíe del tamaño de las patas. La mas larga positiva y la corta negativa, pero me quedó la duda. Estuve leyendo y los capacitores de tantalio indican la polaridad positiva con un signo +. Pero el que utilicé no tiene ningún signo mas, al contrario parece un signo meno, pero está en la pata larga.  A cual le hago caso? ????????


Saludos.

Ganbatte kudasai.
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 01 de Marzo de 2008, 03:49:58
Prueba, y si "peta" ... ya sabes cómo no era. Ja, ja, ja  :D :D :D
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 01 de Marzo de 2008, 04:00:15
Jajaja, tendré que probarlo  :mrgreen:.   Perooooo, como se que está muerto?.

acá una imagen del protagonista de esta historia, si alguién lo conoce, que me diga de que pata cojea.  :D


(http://hostfile.org/tantalio.jpg)

Saludos.



Ganbatte kudasai.
Título: Re: Proyecto PicUSB
Publicado por: stk500 en 01 de Marzo de 2008, 04:27:16
aqui tiene una imagen su identificacion yo no creo que se identifique su polaridad con sus patas asi que miralo bien y asi esta seguro
(http://img352.imageshack.us/img352/9383/tantalumcapacitora89c9ccv6.th.jpg) (http://img352.imageshack.us/my.php?image=tantalumcapacitora89c9ccv6.jpg)
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 01 de Marzo de 2008, 05:33:22
Hola stk500, gracias por el dato, pero en la imagen que pones, si indica la polaridad, en la imagen que puse, no hay un signo mas pero si un signo que parece que es un signo - pero parado. El detalle es que está en la pata larga. Ahora estoy probando el ejmplo de J1M del picusb (que se encuentra al inico de este hilo), me reconoce bien el pic, instala bien el driver, se encendió el led verde. De hecho probé el programita y todo bien, hizo la suma, encendio el led rojo, el verde, apagó los dos, pero el detalle es que de repenté se apaga el pic, el led rojo queda encendido pero muy pero muy tenue, le tengo que dar reset, enciende el rojo y casi inmediatemante el verde, pero a los tres segundos se vuelve a apagar. Será eso síntoma de que tengo mal conectado el capacitor de tantalio, o algun problema de continuidad de pistas?. Heeeeeeelp.  :mrgreen:

Saludos y gracias por tooooooooooooooodo.


Ganbatte kudasai.

Título: Re: Proyecto PicUSB
Publicado por: stk500 en 01 de Marzo de 2008, 06:14:02
Hola Huichoman!
Yo iria con muchos cuidado porque eso maldito electrolitico explotan y tiran fuego  :D
yo te recomendaria no soldarlo pegado a la platina ya que si coge fuego te quemaria la platina, por otro lado yo veo una recuadro negro en tu condensador y ese deberia ser el positivo yo estoy mirando todos los mio que tengo y ninguno son como el tuyo  :D :D los mio pone un signo + en su pata
te aconsejo muchos cuidado, otras cosas es que no se si tu pusiste un Fusible al Bus USB en el + de entrada te recomiendo que lo ponga creeme un fusible de 500mA F que son rapido te salvaria de malo digusto. ya que hay muchas gente que no lo toman en cuenta y son alguna PC o laptop con el Bus USB defectuoso.
un Saludo suerte amigo  :-/ :-/ :-/
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 01 de Marzo de 2008, 07:01:34
Hola Huichoman!
Yo iria con muchos cuidado porque eso maldito electrolitico explotan y tiran fuego  :D
yo te recomendaria no soldarlo pegado a la platina ya que si coge fuego te quemaria la platina, por otro lado yo veo una recuadro negro en tu condensador y ese deberia ser el positivo yo estoy mirando todos los mio que tengo y ninguno son como el tuyo  :D :D los mio pone un signo + en su pata
te aconsejo muchos cuidado, otras cosas es que no se si tu pusiste un Fusible al Bus USB en el + de entrada te recomiendo que lo ponga creeme un fusible de 500mA F que son rapido te salvaria de malo digusto. ya que hay muchas gente que no lo toman en cuenta y son alguna PC o laptop con el Bus USB defectuoso.
un Saludo suerte amigo  :-/ :-/ :-/

Hola amigo. Pues... si explotan y tiran fuego, entonces deduzco que está bien conectado porque ta quietecito. Sobre lo de no soldarlo pegado a la platina,  en la foto anterior puede verse que ya está soldado  :D. Sobre lo del recuadro negro, pues... como está en la pata larga y como leí que los de tantalio indican la pata positiva, supongo que esa es la marca que implícitamente indica la pata positiva. Sobre lo del fusible, los que venden en mi ciudad están muy grandes, además si pasa una desgracia aprenderé de la experiencia  :mrgreen:.

Sobre lo del fallo que mencionaba anteriormente, como el dichoso capacitor no explotó ni se incendió, concluyo que está bien conectado, entonces volví a checar continuidad a conciencia, de repente me salta un pitido indicando un choque de pistas entre la pista que conecta el led rojo con rb3 y la que une el pin1-diodo. Pero desapareció al instante, alguna pelusa microscópica, pero al estar muy pegadas las pistas, le di un pasón con la punta de un desarmador, y listo. Probé de nuevo y  :-/ ajuuuuua   funcionando por el momento de maravilla, en lo que llevo escribiendo estas lineas sigue el led verde encendido como si nada le molestara, probé el programita, hace la suma, encendido de leds todo ooook.  :mrgreen:

Una imagen indicando donde se producía al parecer el choque indeseado de pistas. Lo que provocaba como dije anteriormente que el pic se apagara dejando el led rojo encendido pero muy tenuemente.


(http://hostfile.org/usb485pcb2.jpg)

Ahora una duda que me tiene atormentado toda la tarde, probé la programación icsp, y al parecer funcionó a la perfección. Ahora mi duda, referenciando mi circuito, puede estar conectado al usb  al mismo tiempo que se programa el pic?. por seguridad y por mello, desconecto el circuito del usb para programar por icsp, despues de programarlo, desconecto el cable icsp y conecto el circuito para probarlo.  :mrgreen:. Hay algun riesgo de tener conectado al mismo tiempo el programador al usb, el programador y el circuito por icscp, y el circuito al usb.????  :shock: heeeeeeeeeeeeelp.

 :mrgreen:  Saludos amigos y gracias por la valiosa ayuda.

Ganbatte kudasai. :-/


Título: Re: Proyecto PicUSB
Publicado por: RedPic en 01 de Marzo de 2008, 07:31:20
Si, huicho, se puede programar y reprogramar el PIC con el USB conectado. Lo hago "cienes" y "cienes" de veces, lo único es que oirás el "tocotlon" y "tacatlan" del USB al desconectarse al grabar y reconectarse cuando termina de "tostarse".

Título: Re: Proyecto PicUSB
Publicado por: huichoman en 01 de Marzo de 2008, 13:14:50
Si, huicho, se puede programar y reprogramar el PIC con el USB conectado. Lo hago "cienes" y "cienes" de veces, lo único es que oirás el "tocotlon" y "tacatlan" del USB al desconectarse al grabar y reconectarse cuando termina de "tostarse".

 :mrgreen: Gracias Maestro, pensaba de todos modos probar si funcionaba el asunto, pero ahora gracias a tí lo hare SIN MIEDO... ni equipo de seguridad :mrgreen:  :-/ :-/ :-/.

Saludos y ARIGATOOO.

Gambarimasu.
Título: Re: Proyecto PicUSB
Publicado por: cactus_power en 02 de Marzo de 2008, 15:19:54
Hola Geo, gracias por interesarte. A ver si con vuestra ayuda logro hacerlo funcionar.

La función de carga del formulario es:
-----------------------------------------

Private Sub Form_Load()
    myInPipe = INVALID_HANDLE_VALUE
    myOutPipe = INVALID_HANDLE_VALUE
    OpenMPUSBDevice
    shpInterna.Width = 0
End Sub
----------------------------------------
Y en la API tengo (he modificado, para incluir otra función, la que retorna la versión):
----------------------------------------
Sub OpenMPUSBDevice()
    Dim tempPipe As Long
    Dim count As Long

    tempPipe = INVALID_HANDLE_VALUE
    count = MPUSBGetDLLVersion
    MsgBox (count)                                                     //me devuelve 65536, que no se si es correcto, me parece extraño cuanto menos.
    count = MPUSBGetDeviceCount(vid_pid)               //vid_pid es: àPublic Const vid_pid = "vid_04d8&pid_0011"
    MsgBox (count)                                           //me devuelve 0, és decir que tengo conectados 0 dispositivos con el vid_pid indicados, cuando no es así, ya que tengo un dispositivo conectado con ese VID_PID al PC, i debidamente reconocido por el PC i aparece en la lista de dispositivos en la ficha de //hardware del PC (és decir, conecta con el driver)
            // Lo que parece es que el Driver y la mpusbapi no conectan, que veis vosotros?
    If count > 0 Then
        myOutPipe = MPUSBOpen(0, vid_pid, out_pipe, MP_WRITE, 0)
        myInPipe = MPUSBOpen(0, vid_pid, in_pipe, MP_READ, 0)

        If myOutPipe = INVALID_HANDLE_VALUE Or myInPipe = INVALID_HANDLE_VALUE Then
            MsgBox Str(myOutPipe) + " " + Str(myInPipe) + " Error al abrir los pipes"
            myOutPipe = INVALID_HANDLE_VALUE
            myInPipe = INVALID_HANDLE_VALUE
        End If
    Else
        MsgBox "No hay periféricos conectados"
    End If
End Sub

-------------------------------------------------------------
Hay que tener en un directorio específico la mpusbapi, el proyecto VB i driver? Puede ser debido a una instalación del driver con versión de Windows equivocada (me extranya, sinó no me lo reconocería por la parte del PIC, cuando sí lo hace)? Disponia de dos archivos ClassInstaller del PicWinUSB de J1M. Supongo que instalé el correcto pq sinó no me lo reconocería no?.

Perdón por mi ignorancia, pero cuando me salgo de la programación del PIC, me empiezo a perder ...
Gracias
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 03 de Marzo de 2008, 01:10:16
Hola amigos.

Acá de nuevo.

Haciendo las primeras pruebas.

(http://hostfile.org/pruebasusbcdc1.jpg)

Les comento, en la foto se puede apreciar la comunicación entre un pic18f2550, y un pic18f2525 mediante RS485. El envió desde la pc es excelente, recibo perfectamente desde el PIC18F2525, y despliega en el LCD dependiendo el comando enviado la cadena recibida. Ahora el detalle es que el 18f2550 no pesca la respuesta del 18f2525, nisiquiera se activa la interrupción RDA. Estoy pensando si es problema de hardware. Ahora mismo tengo que estudiar para uno examenes, en un momento le subo los archivos para checar al gun fallo. Saludos y a seguir trabajando duro.

Mataneeeeeeeeeeeeeeeeeeeeee

Gambarimasu.

Título: Re: Proyecto PicUSB
Publicado por: huichoman en 03 de Marzo de 2008, 03:33:34
Me respondo amigos, no pude con las ganas y tuvo haciendo otras pequeñas pruebas, para empezar cheque continuidad, y para mi sorpresa, el pin 1 del max485 estaba haciendo puente con masa. Lo raro es que la pista no está tan pegada a ninguna referencia a masa, de todos modos le di un pasón alrededor para quitar cualquier pelusa microscópica, pero seguía pitando el multíemtro. Lo siguiente fue quitar el 18f2550 de su base, para ver si había algo raro entre ella, pero nada, todo bien, proseguí a checar continuidad de nuevo y sorpresa ya no estaba el problema, entonces era el micro, estaba internamente puenteando masa al pin18 c7, lo cambié por otro nuevecito (un 18LF2550), chequé continuidad, y listo sin problema, le cargué el programa, chequé continuidad de nuevo y sin problema. Hice la prueba y listo, no me llegó la respuesta a la pc, pero por  lo menos se que recibió datos, porqué saltó la interrupción RDA, encendieron los tres leds tienen que encender cuando lo hiciera.  :-/ :-/ :-/.

Esta historia continuará. SEGUIREMOS INFORMANDO  :mrgreen:

Saludos


GAMBARIMASUUUUUUUUUUU
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 03 de Marzo de 2008, 03:49:13
Hola, acá de nuevo.

Con la novedad, de que al parecer el 18lf2550, recibe sin problema la respuesta del 18f2525, utilizando señales con los tres leds, me he dado cuenta de que simple y sencillamente no está mandando datos hacia la PC.

Seguiré haciendo pruebas.   :mrgreen:

Saludos.


GAMBARIMASUUUUUUUUUUUUUUUUUU
Título: Re: Proyecto PicUSB
Publicado por: huichoman en 03 de Marzo de 2008, 04:29:41
 :-/  :-/  :-/  :-/  :-/  :-/

Hola amigos, jeje. un lapsus jajaja, a modo de prueba envíaba un caracter cualquiera al momento de saltar la int, pero no mostraba nada la aplicación en delphi. perooooooooooooooooooooo jajaja, recordé que utilizo el caracter de inicio STX  y el de fin ETX para que delphi le haga caso, jajaja por eso no me desplegaba nada, haciendo las correciones pertinentes, listo recibió y desplegó el caracter, y mejor aun, ahora mismo recibe la respuesta del 18F2525, AJUUUUUUUUUUUUUUUUUUUUUUUUUUUUA.  :-/  :mrgreen:  :-) 

Ahora si puedo estudiar tranquilo para mis examenes  :mrgreen:

En un chance subo las fotos y algun videito.

GAMBARIMASUUUUUUUUUUUUUUUUUUUUUUUUUUUU.
Título: Re: Proyecto PicUSB
Publicado por: Geo en 03 de Marzo de 2008, 04:56:11
Hola Geo, gracias por interesarte. A ver si con vuestra ayuda logro hacerlo funcionar.

La función de carga del formulario es:
-----------------------------------------
...
-------------------------------------------------------------
Hay que tener en un directorio específico la mpusbapi, el proyecto VB i driver? Puede ser debido a una instalación del driver con versión de Windows equivocada (me extranya, sinó no me lo reconocería por la parte del PIC, cuando sí lo hace)? Disponia de dos archivos ClassInstaller del PicWinUSB de J1M. Supongo que instalé el correcto pq sinó no me lo reconocería no?.

Perdón por mi ignorancia, pero cuando me salgo de la programación del PIC, me empiezo a perder ...
Gracias

¿Qué driver instalaste? Es que mencionas el PicWinUSB de J1M, para que la aplicación en VB funcione, deberías haber instalado el driver de Microchip. ¿Puedes poner una captura de lo que te aparece en el administrador de dispositivos?
Título: Re: Proyecto PicUSB
Publicado por: stk500 en 03 de Marzo de 2008, 05:07:41
 :-/ :-/ :-/ :-/ Hurra amigo por fin los lograste  :-/ :-/ :-/ :-/ :-/
a ver cuando sube todos el projecto aqui para estudiarlo  :mrgreen: :mrgreen: :mrgreen:   :-/ :-/ :-/ Suerte con los Examen Huichoman
 :-/ :-/ :-/ :-/ :-/ :-/
Título: Re: Proyecto PicUSB
Publicado por: pablo_venezuela en 03 de Marzo de 2008, 14:52:05
hola antes que nada muy bueno este foro de verdad.. quisiera saber si alguien sabe de alguna pagina donde indique como hacer un driver para linux de este pic.. aunque e conseguido un trabajo muy importante de ma.. que me a ayudado pero algo mas de ayda en linx me haria bien gracias
Título: Re: Proyecto PicUSB
Publicado por: pocher en 03 de Marzo de 2008, 16:00:24
Para Linux también está hecho, busca en la pg. de J1M, allí hay un colega que lo hizo.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: diego_z en 04 de Marzo de 2008, 01:21:45
hola me e leido el post y me a gustado , e decidido cambiar mi viejo jmd por un lite pero al intentar conseguir el 18f2550 me han dicho que no que esto que bla bla bla la cuestion es que donde recido no lo traen ni pagandoselo por adelantado  :D pregunta hay posibilidad de cambiarlo por uno de la linea 16fxx que es que consigo? agradesco sus respuestas
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 04 de Marzo de 2008, 04:19:17
Solo los pics de la serie 18Fxx5x pueden trabajar USB 2.0 a modo Full Speed. Si quieres usar uno de la familia 16, solo trabajaras USB 1.1 a Low Speed. Si es asi, los pics de la serie que lo soportan son 16C7x5. La libreria pic_usb.h trabaja con este chip.
Salu2
Título: Re: Proyecto PicUSB
Publicado por: cactus_power en 04 de Marzo de 2008, 10:17:20
Olé!

Gracias Geo, cambié al Driver de Microchip y me funciona sin más problemas.. mil gracias!!
Título: Re: Proyecto PicUSB
Publicado por: Geo en 04 de Marzo de 2008, 15:32:51
Olé!

Gracias Geo, cambié al Driver de Microchip y me funciona sin más problemas.. mil gracias!!
Qué bien que ya esté funcionando  :-/, ahora a darle y que salgan proyectos interesantes :D.
Título: Re: Proyecto PicUSB
Publicado por: pablo_venezuela en 11 de Marzo de 2008, 15:11:46
bueno muchas gracias nuevamente.. a todos por este estpendo foro.. quisieraque me ayuden por fa.. porque necesito conectar este pic pero usando gambas en linux.. y e intentado varios metedos pero no me da.. por favor si alguin conoce un poco de ese programa medio fantasme se l agradeceria mucho.. saludos y estamos en contacto
Título: Re: Proyecto PicUSB
Publicado por: gera en 12 de Marzo de 2008, 17:52:48
pablo, podrias especificar bien tu problema? yo he hecho un par de experimentos en linux y quizas te pueda dar una mano, pero necesito saber bien cual es el problema
saludos!
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 25 de Marzo de 2008, 05:19:22
Hola.

Podrian decirme para que sirve especificar en el archivo .inf la ClassGuid?? Lei que era para diferenciar softwares y cosas asi, pero porque en el .ini ? Que pasa si se repite con alguno ya existe? Como se manifiesta en el administrador de dispositivos? Es necesario? Y, si, si, que tanto afecta? Esque aun no me cuadra bien este tema  :mrgreen:

Porcierto, J1M, tu cambias el PID pero dejas igual el VID (el de microchip). No es recomendable cambiar el VID porque solo el de microchip esta certificado? No pasa lo mismo con el PID? Que pasaria si alguien quiere vender algun producto y quiere utilizar el VID de microchip para que no tenga "problemas con la ley" XD?? Seria tan necesario obtener tu propio Vid&Pid ??

Son preguntas que me tienen y me tienen  :D  Espero puedan ayudarme.

Un saludo
Gracias.
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 25 de Marzo de 2008, 12:35:56
la definición del classguid lo puedes conseguir en la wikipedia http://es.wikipedia.org/wiki/Globally_Unique_Identifier

digamos que lo que hace es asignar un número "único" a un grupo de componentes que es registrado en el windows.

de repetirse, puede repetirse, aunque el algoritmo que implementan asegura que la probabilidad es muy baja

en el administrador no se manifiesta, pero lo necesita para mostrarlo correctamente, si quieres ver la laaarga lista, entra en win+R -> regedit y entra en las ramas USER o MACHINE

respecto a lo de certificarlo, si es por motivo comercial, hay que ir a la asociación del USB y pedir la licencia para que te asignen los VID_PID y si quieres usar los de microchip, recuerdo que en la web de ellos existe una clausula o algo así donde ellos te permiten usarla (no recuerdo si hay que pagar algo)

enlaces relacionados:

http://www.todopic.com.ar/foros/index.php?topic=20047.msg152798#msg152798

http://www.todopic.com.ar/foros/index.php?topic=20212.msg149866#msg149866

http://www.todopic.com.ar/foros/index.php?topic=2260.msg145641#msg145641

Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 25 de Marzo de 2008, 20:36:16
Hola Palitroquez. Ya me habia pasado por todos esos links y recien con esto ultimo entiendo lo del GUID  :mrgreen: Pero, que pasaria si se repitiera? Se remplazaria todo lo que hay por el nuevo? O solo se copiaria y causria problemas?  :? Es que da miedo saber que es lo que pasaria si los GUID's de un dispositivo completamente disitinto al tuyo se repitiera con el que tu asignaste.

Por lo de la licencia de los Vid&Pid te piden unos $2000 para obtenerla creo y pagar otros 1000 anuales para conservarla  :shock: Aunque, como se ha echo, solo seria usar la de MChip y cambiar el PID verda?  :lol:

Gracias por responder.
Un saludo.
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 26 de Marzo de 2008, 15:21:57
Hola jeremylf

En caso de repetirse el GUID, lo que sucedería es que la nueva clave se añadiría al GUID existente y formaría parte de esa agrupación de dispositivos y así lo reconocería el windows.

Recuerdo haber leido que existe una clasificación en los números del classguid, es decir, cada región de octetos pertenece a un tipo de componentes, eso formaría parte del estándar y no alteraría el funcionamiento del driver.

al programilla le coloqué esa opción de modificar el guid para darle mas flexibilidad y que todo sea personalizable. Lo recomendable es dejarlo en el mismo número (por eso lo coloqué en opciones avanzadas)

PD:

el documento de microchip para sublicenciarse vid_pid se llama en025058.pdf

De acuerdo a lo que leí, es gratiñango, pero ellos se reservan el "derecho de admisión" en cualquier momento y hasta 10 mil unidades.


Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 27 de Marzo de 2008, 00:15:53
Vaya! Gracias por la informacion PalitroqueZ.

Nos vemos.
Título: Re: Proyecto PicUSB
Publicado por: Desiderium en 29 de Marzo de 2008, 01:35:23
Hola!
Muchas gracias por toda la información vertida en este hilo, después de leer las 20 pag, puedo decir que he aprendido bastantes cosas, ahora sólo me falta meter las manos y comenzar a experimentar.

La cosa es que aún no me decido cuál libreria usar, si la nueva versión de Microchip o la WinUSB.

Cuál de estás dos me da más flexibilidad al momento de enviar y recibir datos a la pc?.

He leído que la libreria de WinUSB permite activar varios Pipes, no sé si la nueva libreria de Microchip también nos dé esta opción. Aunque no he visto a nadie usar más de un Pipe para la transmisión y recepción de datos vía bulk. Esto lo pregunto dado que quiero una velocidad optima de transferencia de datos, si alguien sabe como trabajarlos por favor comparta sus avances. De momento a experimentar con sus aportes y si encuentro algo referente a el uso de más de un Pipe se los haré saber.
Saludos.
Título: Re: Proyecto PicUSB
Publicado por: Geo en 29 de Marzo de 2008, 14:29:55
Hice unas pruebas sencillas con ambas librerías (también con libusb), el PIC reserva 64 bytes y los envía de regreso, considerando un ciclo de envío y recepción de 64 bytes, un programa en la PC ejecuta 1000 ciclos, esto lo ejecuté cinco veces.

Los tiempos resultantes fueron muy similares, en cuanto a tiempos de envío la librería de Microchip fué la más rápida, y la más lenta en recepción. De cualquier forma, en promedio, la de Microchip me dió mejores resultados.

Aclaro, fué una prueba muy sencilla, no exhaustiva, además, usé la anterior versión de la librería de Microchip, no la compatible con Vista.
Título: Re: Proyecto PicUSB
Publicado por: elflamen en 29 de Marzo de 2008, 15:20:37
Hola!

Es la primera vez que participo en un foro de electrónica y es un verdadero placer iniciarme en este por el excelente nivel que posee.
Van entonces mis más sinceras felicitaciones a todo el plantel de moderadores y participantes que hacen posible todo este intercambio de ideas, contribuyendo al conocimiento de temas poco difundidos que hacen al crecimiento profesional, personal y solidario.

Como he visto en los textos, el apasionante proyecto USB ha cautivado a mucha gente y yo soy uno de ellos, ansioso todavía por poder enviar el primer byte desde un PC hacia un PIC.
Les cuento que vengo de la vieja escuela del MS-DOS, cuando controlar periféricos desde el puerto paralelo usando el querido Borland C era un juego de gurises (nenes, en uruguayo). Las cosas han cambiado y todo esto “se fue al muere”. Apareció Windows y se terminó la tranquilidad!.

Hace menos de 2 años comencé a estudiar Visual Basic para entrarle al Windows y me dio muchas satisfacciones la  sencillez con que se diseñan aplicaciones que hacen cosas complejas. Con todas estas herramientas visuales, la obsesiva necesidad de poner a conversar una PC con periféricos diseñados por nosotros tomó mas cuerpo y mas aún ahora, con el puerto USB.

En este momento estoy desarrollando una aplicación en Visual Basic que debe enviar series de Bytes hacia un PIC, luego éste lo procesa y le pide al PC el próximo y así sucesivamente.
En un principio, implementé la comunicación por el puerto serial, no sin algunos problemillas de control de flujo.
Pero como este puerto “también va al muere” opté por centrar mi tiempo y energías hacia el misterioso USB.
Para aprovechar el software, conseguí un convertidor USB-Serial, pero no me dio resultados con los protocolos RTS/CTS, así que descarté el serial por completo.

He seguido de cerca en este foro todo el material publicado sobre el proyecto USB, que lo he adoptado como una Biblia y me dediqué a estudiar la versión en Visual Basic a los efectos de aprender la filosofía.
Sin embargo, me encontré con la dificultad de que el firmware del PIC está escrito en C y carezco del compilador con sus librerías.
Agradecería enormemente si alguien pudiera indicarme donde bajar el compilador CCS PCWH 3.227 y/o algún firmware en lenguaje ensamblador (asm de MPLab) que tenga rutinas de comunicación por USB para el PIC18F2550 o 4550 para sacar ejemplos.
Bueno, espero no haber sido demasiado extenso, los felicito nuevamente y los saludo afectuosamente,
Elflamen.


Título: Re: Proyecto PicUSB
Publicado por: Desiderium en 30 de Marzo de 2008, 14:29:55
Hola Geo, muchas gracias por la respuesta, también me gustaria saber qué software usaste en tu aplicación, para ver si es que influye. Si pudieras compartirlo para hacerle pruebas. De momento estoy consiguiendo el VC# 2005 o C#. Me servirá el Visual Studio 2008?. Thanks

Elflamen, puedes descargar una versión demo del CCS en su página (Aquí (http://www.ccsinfo.com/demopoll.php)).

Saludos.
Título: Re: Proyecto PicUSB
Publicado por: Geo en 30 de Marzo de 2008, 18:38:31
He seguido de cerca en este foro todo el material publicado sobre el proyecto USB, que lo he adoptado como una Biblia y me dediqué a estudiar la versión en Visual Basic a los efectos de aprender la filosofía.
Sin embargo, me encontré con la dificultad de que el firmware del PIC está escrito en C y carezco del compilador con sus librerías.
Agradecería enormemente si alguien pudiera indicarme donde bajar el compilador CCS PCWH 3.227 y/o algún firmware en lenguaje ensamblador (asm de MPLab) que tenga rutinas de comunicación por USB para el PIC18F2550 o 4550 para sacar ejemplos.
Bueno, espero no haber sido demasiado extenso, los felicito nuevamente y los saludo afectuosamente,
Elflamen.
Primero que nada, bienvenido al foro :), estoy seguro de que pasarás un buen rato por aquí e intercambiarás conocimientos :).
Después, comentarte que, además de trabajar con el compilador CCS (el preferido en este foro y en otros lugares), puedes también utilizar el compilador C18 de Microchip, quien proporciona una versión de prueba de 30 días (si mal no recuerdo), aunque la interfaz para el manejo de USB es bastante diferente :? a la del CCS. Por último, te animo a participar activamente en el foro, conforme vas enviando más mensajes más gente se interesa y puedes acceder a más información conforme la vas leyendo :).

Hola Geo, muchas gracias por la respuesta, también me gustaria saber qué software usaste en tu aplicación, para ver si es que influye. Si pudieras compartirlo para hacerle pruebas. De momento estoy consiguiendo el VC# 2005 o C#. Me servirá el Visual Studio 2008?. Thanks.
Usé Visual C++ 2008 en su versión Express. Trabajé con las librerías de MCHPUSB de Microchip, WinUSB de Microsoft y libusb-win32. El programa en si es muy sencillo, es una aplicación de consola que utiliza la función de la API de Windows para obtener la hora en milisegundos, más o menos trabaja así:
Código: [Seleccionar]
t1 = ObtieneMilisegundos
*Envía paquete de 64 bytes al PIC por USB
t2 = ObtieneMilisegundos
*Recibe paqute de 64 bytes del PIC por USB
t3 = ObtieneMilisegundos

TiempoEnvio = t2 - t1
TiempoRecepcion = t3 - t2
* Esta parte del código es la que varía un poco de acuerdo a la librería que se esté utilizando.
Yo trabajé en lenguaje C/C++, tú puedes hacer lo propio con C# sin problemas. Por el momento no me encuentro en mi casa, para el próximo fin de semana espero poder subir algo de código :).

Saludos.
Título: Re: Proyecto PicUSB
Publicado por: Desiderium en 31 de Marzo de 2008, 12:37:00
OK, está semana estaré probando código, lo lamentable es que se acabaran las vacaciones. Ya les contaré cómo me fue.

Saludos.
Título: Re: Proyecto PicUSB
Publicado por: Geo en 31 de Marzo de 2008, 15:21:12
Esto es la mayor parte del código del programa usando la librería de Microchip, la idea se entiende :).

Código: C++
  1. printf( "Dispositivos encontrados: %d\n", MPUSBGetDeviceCount( VID_PID ) );
  2.         if ( MPUSBGetDeviceCount( VID_PID ) > 0 ) {
  3.                 abrirPipes();
  4.                 if ( ( !miPipeSalida ) || ( !miPipeEntrada ) ) {
  5.                         printf( "Error al abrir pipes.\n" );
  6.                         exit( 1 );
  7.                 }
  8.         }
  9.         else {
  10.                 printf( "No hay dispositivos conectados.\n" );
  11.                 exit( 1 );
  12.         }
  13.  
  14.         // Rellena búfer de datos a enviar
  15.         for ( int i = 0; i < NUM_BYTES; i++ ) {
  16.                 datos[ i ] = i;
  17.         }
  18.  
  19.         //DWORD aRecibir = NUM_BYTES;
  20.         DWORD aRecibir = 64;
  21.  
  22.         printf( "Ejecutando %d pruebas de envío y recepción...\n", NUM_PRUEBAS );
  23.  
  24.         // Envío y recepción
  25.         // (envía y recibe N veces)
  26.         for ( int i = 0; i < NUM_PRUEBAS; i++ ) {
  27.                 t1[ i ] = GetTickCount();
  28.                 enviarPaquete( datos, NUM_BYTES );
  29.                 t2[ i ] = GetTickCount();
  30.                 recibirPaquete( recibidos[ i ], &aRecibir );
  31.                 t3[ i ] = GetTickCount();
  32.         }
  33.         printf( "Fin pruebas de envío y recepción\nCalculando resultados...\n\n" );
  34.  
  35.         // Cálculo de tiempos y verificación de errores
  36.         int totalErrores = 0;
  37.         double sumaEnvio = 0;
  38.         double sumaRecepcion = 0;
  39.         double promedioEnvio = 0;
  40.         double promedioRecepcion = 0;
  41.  
  42.         double tasaEnvio = 0;
  43.         double tasaRecepcion = 0;
  44.         for ( int i = 0; i < NUM_PRUEBAS; i++ ) {
  45.                 // Calcula tiempos
  46.                 tiemposEnvio[ i ] = t2[ i ] - t1[ i ];
  47.                 tiemposRecepcion[ i ] = t3[ i ] - t2[ i ];
  48.  
  49.                 sumaEnvio += tiemposEnvio[ i ];
  50.                 sumaRecepcion += tiemposRecepcion[ i ];
  51.                
  52.                 // Verifica errores
  53.                 for ( int j = 0; j < NUM_BYTES; j++ ) {
  54.                         if ( datos[ j ] != recibidos[ i ][ j ] ) {
  55.                                 // Errores en la transmisión i
  56.                                 errores[ i ]++;
  57.                                 // Errores totales
  58.                                 totalErrores++;
  59.                         }
  60.                 }
  61.         }
  62.  
  63.         // Promedios
  64.         promedioEnvio = sumaEnvio / NUM_PRUEBAS;
  65.         promedioRecepcion = sumaRecepcion / NUM_PRUEBAS;
  66.        
  67.         printf( "Errores: %d\n", totalErrores );
  68.         printf( "Promedio de tiempo de envío: %f, %f milisegundos\n", sumaEnvio, promedioEnvio );
  69.         printf( "Promedio de tiempo de recepción: %f, %f milisegundos\n", sumaRecepcion, promedioRecepcion );
  70.  
  71.         cerrarPipes();
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 31 de Marzo de 2008, 16:01:41
... algún firmware en lenguaje ensamblador (asm de MPLab) que tenga rutinas de comunicación por USB para el PIC18F2550 o 4550 para sacar ejemplos.
....


escribiendo usb en el buscador de microchip

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1999&ty=&dty=&section=&NextRow=&ssUserText=usb

en la sección: Firmware Drivers tienes

 USB Device Embedded Host Software Stack (http://ww1.microchip.com/downloads/en/DeviceDoc/pic32mx_usb_v1_0_01.zip)

 USB Firmware (Assembly Version 1.25) (http://ww1.microchip.com/downloads/en/DeviceDoc/usb125asm.zip)

 USB Firmware (Assembly Version 2.00) (http://ww1.microchip.com/downloads/en/DeviceDoc/usb200as.zip)

son las rutinas para manejar el usb del 16c765 , pero bien podría estudiarse para hacer una adaptación al 18f




Título: Re: Proyecto PicUSB
Publicado por: RICHI777 en 31 de Marzo de 2008, 16:30:12
Hola Geo, mi comentario no tiene nada que ver con USB, pero viendo el código que posteaste
Código: [Seleccionar]
// Cálculo de tiempos y verificación de errores
int totalErrores = 0;
double sumaEnvio = 0;
double sumaRecepcion = 0;
double promedioEnvio = 0;
double promedioRecepcion = 0;
No es como mucho seleccionar un tipo float para estas operaciones ?
Saludos !
Título: Re: Proyecto PicUSB
Publicado por: Geo en 02 de Abril de 2008, 03:11:07
Para el número de pruebas, estoy de acuerdo que si es mucho.

En un principio decidí declararlas así porque primero pensé en hacer pruebas en el orden de millones, sin embargo, después me dí cuenta que no era necesario hacer tantas, y además decidí separar las pruebas en distintas ejecuciones del programa :).

Título: Re: Proyecto PicUSB
Publicado por: nestorfabio en 02 de Abril de 2008, 17:27:04
Hola a todos.  Necesito ayuda urgente sobre como capturar datos por el puerto usb usando un microcontrolador y graficar los datos en el pc con ayuda de c#.

Si alguien puede ayudarme por favor enviarme un correo a: nestormontoya@hotmail.com

Muchas gracias y bendiciones a todos.
Título: Re: Proyecto PicUSB
Publicado por: Geo en 03 de Abril de 2008, 02:52:24
Hola a todos.  Necesito ayuda urgente sobre como capturar datos por el puerto usb
¿Y este tema del foro no sirve precisamente para eso? Dale una leída al menos.
Título: Re: Proyecto PicUSB
Publicado por: Desiderium en 04 de Abril de 2008, 20:57:08
Hola a todos de nuevo, he estado un poco ocupado con la universidad, además de tener problemas con Internet, sólo para agradecer a Geo por el código que ha puesto, esperemos que nos ponga el proyecto completo, sirve que me meto con VC++, yo he programado mi programa en VB6, es exactamente lo mismo, luego les paso el proyecto y resultados. Saludos
Título: Re: Proyecto PicUSB
Publicado por: loranca en 12 de Abril de 2008, 13:04:16
Buenas!!
En primero agradecer la gran ayuda que me ha aportado este foro y a todos sus colaboradores, ya que me está sirviendo de gran ayuda para realizar proyectos con PIC.

Mi caso es el siguiente, para mi proyecto utilizo un PIC18F2550 con el que realizo una conversión A/D, para empezar a trastear me descargué el proyecto pisusbnut de la pagina de J1M de www.hobbypic.com (buenisima pagina por cierto), sé que está hecho para un PIC18F4550 pero cambié algunas cosillas en los puertos y todo bien, programé con el GTP-USB Plus y monté el circuito. Lo he probado y me funciona todo correctamente a excepción de la conversión A/D, por más que regulo el potenciometro no hace nada siempre está en el cero.

Alguién me puede decir porque puede ser?!

Muchas gracias de antemano.
Título: problema con proteus
Publicado por: DPP0881 en 26 de Abril de 2008, 23:09:58
hola oye hazme un favor es que tengo un problema, yo antes tenia una version anterior de proteus y ya la elimine para instalar otra la 7.2 pero he intentado y intentado con artisimos diferentes y me sale error de licencia y ya hize lo que dices hay de eliminar el .inf y todavia me sale.. ayuda porfavor
Título: Re: Proyecto PicUSB
Publicado por: manuelroin24 en 02 de Mayo de 2008, 01:19:30
bueno alguno de ustedes vio esto???

MCHPFSUSB Framework v2.1 – MCHPFSUSB  is a distribution package containing a variety of USB related PIC18 and PIC24F firmware projects, along with other USB related drivers and resources intended for use on the PC. The USB embedded host stack is API compatible with the USB Device and Embedded Host Stack for PIC32. All release notes are included in the .zip file bundle.

Bueno por lo que veo microchip saco una actualizacion de su driver, la descargue pero no llego a comprender como trabajar con ella, alguien tiene experiencia en esta nueva actualizacion ???
Título: Re: Proyecto PicUSB
Publicado por: Geo en 02 de Mayo de 2008, 13:28:35
En cuanto al driver genérico, se trabaja igual ya que según leí se mantienen los nombres de las funciones de la anterior versión.
Título: Re: Proyecto PicUSB
Publicado por: manuelroin24 en 02 de Mayo de 2008, 23:13:35
Mi duda es la siguiente, instale ese nuevo driver pensando que el driver mpusbapi se instalaria en mi PC pero busque y busque y no consegui encontrarlo, entonces la pregunta es la siguiente de donde se descarga la nuva DLL de microchip alguien puede poner el enlace ???
Título: Re: Proyecto PicUSB
Publicado por: Geo en 03 de Mayo de 2008, 01:35:06
¿Qué driver instalaste? Lo que descargas de la página de Microchip es el archivo "Microchip MCHPFSUSB v2.1 Installer.zip", este incluye un instalador que crea la carpeta C:\Microchip solutions (por defecto, lo puedes colocar donde tú quieras), dentro de la cual vienen ejemplos y las herramientas necesarias para utilizar con los PICs que soporta USB. En una de esas carpetas viene el archivo mchpusb.dll, también el driver genérico que tienes que instalar (normalmente te lo pide Windows cuando insertas tu dispositivo).
Título: Re: Proyecto PicUSB
Publicado por: MiCrOtRoNiC en 05 de Mayo de 2008, 18:27:45
Mi duda es la siguiente, instale ese nuevo driver pensando que el driver mpusbapi se instalaria en mi PC pero busque y busque y no consegui encontrarlo, entonces la pregunta es la siguiente de donde se descarga la nuva DLL de microchip alguien puede poner el enlace ???


aqui el enlace

http://ww1.microchip.com/downloads/en/DeviceDoc/MCHPFSUSB_Setup_v1.3.exe

salu2
Título: Re: Proyecto PicUSB
Publicado por: manuelroin24 en 06 de Mayo de 2008, 03:31:30
Y entonces la version 2.1 para que sirve ya que en la pagina de microchip dice que la 1.3 no se recomienda para nuevos proyectos.
Título: Re: Proyecto PicUSB
Publicado por: cocu3 en 01 de Junio de 2008, 02:32:31
amigos como estan, tengo un problema con el picusb, estoy usando un 18f4550 y quiero recibir datos seriales de otro dispositivo y enviarlos por usb al computador utilizando este pic, pero no se que pasa que cuando corro la aplicacion del computador este se bloquea y toca reiniciar, creo q es un error del pic ya que en algun momento este pareciera que se queda bloqueado o algo parecido y deja de trabajar, asi que ni idea que hacer, debe ser que no puede tener funcionando el uart y el usb al tiempo o algo parecido..

alguien le ha pasado esto????? la verdad que no tengo la menor idea del problema

saluds y gracias al que me pueda ayudar

aqui esta el codigo q estoy usando, lo del uart estaba por interrupcion pero se lo quite para poner esto:

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL6,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    240                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    1                 //size to allocate for the rx endpoint 1 buffer

#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>         //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports

#define LEDV    PIN_B6
#define LED_ON  output_high
#define LED_OFF output_low

int contadorusb = 0;
int8 envia[240];
int8 recibe[1];
int i = 0;
int bandera = 0;

void main(void) {
   for( i = 0; i <=239; i++ )
   {
      envia = 0;
   }
   i = 0;
   LED_OFF(LEDV);                   //encendemos led rojo
   usb_init();                      //inicializamos el USB
   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host
   LED_ON(LEDV);                    //encendemos led verde
   while (TRUE)
   {
      if(usb_enumerated())
      {
         if( bandera == 0X00 )
         {
            envia[contadorusb] = getc();
            if( contadorusb < 239 )
            {
               contadorusb++;
            }
            else
            {
               setup_uart(FALSE);
               contadorusb = 0;
               bandera = 0XFF;// se pueden enviar datos por usb
            }
         }
         if( bandera == 0XFF )
         {
            usb_put_packet(1, envia, 240, USB_DTS_TOGGLE);
            bandera = 0X00;
            contadormuerto = 0;
            setup_uart(TRUE);
         }
      }
   }
}
Título: Re: Proyecto PicUSB
Publicado por: defsoia99 en 05 de Junio de 2008, 18:24:37
Hola J1M y Hola a todos...
De ante mano muchas gracias por el apoyo que me han brindado en este foro...

Trabaje con el driver que habias hecho para USB llamado PIC USB y lo integre con la version Visual C++ 6.0 del proyecto PICUSBStuf de tu pagina.

Ahora necesito miigrar el proyecto a Windows Vista y XP 64 bits pero manteniendo la plataforma en Visual C++ 6.0, porque ya tengo desarrollado la otra parte de mi tesis en esta version de Visual.

He estado en los foros y he descargado el driver PICWIN USB, pero no ha sido compatible con las librerias y DLL de lo que tenia anteriormente.

Me puedes por favor ayudar a integrar este driver para visual C++ 6.0, o si hay otra manera de hacerlo con otras librerias. La verdad he encontrado muchos drivers con varios programas del pic y otros programas en C#, pero esto implicaria cambiar todo mi proyecto de lenguaje......

Muchas Gracias por la ayuda que me puedas o me puedan brindar, quedo a la espera de sus respuestas.
Título: Re: Proyecto PicUSB
Publicado por: cocu3 en 05 de Junio de 2008, 22:16:56
una pregunta, cual es el tamaño maximo de datos que se pueden enviar desde el micro 18F4550 al computador??? o sea con la funcion usb_put_packet(...)?????????

saluds
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 06 de Junio de 2008, 00:32:48
Como es FS (Full Speed), solo puedes enviar 64 Bytes en un paquete.

Salu2.
Título: Re: Proyecto PicUSB
Publicado por: cocu3 en 06 de Junio de 2008, 19:42:57
pero para datos de control, para el endpoint 1 he podido enviar hasta 255, pero se que el usb soporta hasta mil, asi que como hago para enviar estos mil datos?????
Título: Re: Proyecto PicUSB
Publicado por: fernando busi en 07 de Junio de 2008, 13:28:08
Hola como estan.

Podrian por favor decirme donde averiguo en este foro u otro lugar, como usar la interupción con el modulo USB en CCS...?

Gracias amigos.

Fernando Busi
Título: Re: Proyecto PicUSB
Publicado por: kerbekus en 10 de Junio de 2008, 15:46:48

mi correo es ferrojose_2008@hotmail.com
quisiera que me expliqen paso a paso como debo borrar el registro y el .inf para poder instalar el proteus 7.2
Título: Re: Proyecto PicUSB
Publicado por: Geo en 15 de Junio de 2008, 14:12:16
Hola J1M y Hola a todos...
Trabaje con el driver que habias hecho para USB llamado PIC USB y lo integre con la version Visual C++ 6.0 del proyecto PICUSBStuf de tu pagina.

Ahora necesito miigrar el proyecto a Windows Vista y XP 64 bits pero manteniendo la plataforma en Visual C++ 6.0, porque ya tengo desarrollado la otra parte de mi tesis en esta version de Visual.
Descarga la nueva versión del driver de Microchip, es compatible con Windows Vista y mantiene compatibilidad a nivel API, por lo que portarlo a este sistema operativo debería significar sólo recompilar el proyecto utilizando la nueva versión del driver.
Título: Re: Proyecto PicUSB
Publicado por: Jorge_79 en 21 de Junio de 2008, 15:02:13
Olá

Será que me podem ajudar.

Descarreguei o projecto PicUSBNUT fiz o compile com o  PCH version 3.249 e não dá erro, gravo-o no pic18f4550 com o WinPic800 usando o gravador JDM e não dá erro no entanto quando ligo ao pc simplesmente não detecta nada.

Que configuração normalmente usam para programar o pic18f4550 com o winpic800?

Sugestões aceitam-se

Jorge
Título: Re: Proyecto PicUSB
Publicado por: gera en 23 de Junio de 2008, 12:24:12
y la pregunta que todos nos hacemos es: Es necesario tanto codigo para enviar 3 bytes unicamente? No hay una forma mas simple? No me imagino hacer todo esto en ensamblador :S
Título: Re: Proyecto PicUSB
Publicado por: Geo en 24 de Junio de 2008, 01:09:41
Es una característica de la arquitectura USB: transparente al usuario pero complicado en sus interiores (imagínate implementar un HUB).
Título: Re: Proyecto PicUSB
Publicado por: gera en 24 de Junio de 2008, 04:56:18
pero tiene q haber una manera mas facil... si no de q sirve q el pic soporte usb? para eso hacemos todo por software y listo...
bah, no se... me llama mucho la atencion q sea tan complicado...
Título: Re: Proyecto PicUSB
Publicado por: Geo en 25 de Junio de 2008, 01:02:30
Esto es lo fácil, ahora hazlo en ensamblador para ver lo que no lo es :P.
Título: Re: Proyecto PicUSB
Publicado por: cerebro en 26 de Junio de 2008, 00:19:26
 8) hola gente hace como un mes que arranque a investigar el usb y la verdad que este proyecto ayudo mucho ya estoy haciendo varias cositas gracias j1m.. :-/
Título: Re: Proyecto PicUSB
Publicado por: J_jOsE en 28 de Junio de 2008, 12:56:02
Hola a todos, decirles que siguan adelante y que pues yo aprendi mucho en este foro,
pero ahora me tope con una deficultad, estoy trabajando en un proyecto donde necesito
enviar desde la PC 10 bytes en uno y almacenarlos en el PIC 18f4550 en variables
basandome en el ejemplo de RedPIC de EL USB DESENCADENADO : BULK USB Transferencia bidireccional masiva de información
el problema esta en el PIC que no se si recibe aca les dejo el pequeño programa
estoy trabajando con el compilador CCS_PCWHD_v4.065 y el proteus 7.2SP6
Hechenme una mano porfa que ya no se que hacer  :(

///////////////////////////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#define USB_HID_DEVICE     FALSE             // deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   // turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   // turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    32                // size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    32                // size to allocate for the rx endpoint 1 buffer

///////////////////////////////////////////////////////////////////////////////////////////////////
#include <pic18_usb.h>                      // Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include ".\include\rr2_USB_Monitor.h"      // Configuración del USB y los descriptores para este dispositivo
#include <usb.c>                            // handles usb setup tokens and get descriptor reports

#define RecCommand recbuf[0]

///////////////////////////////////////////////////////////////////////////////////////////////////
// Defines y otras zarandajas
#byte PORTC =0xF82

#define LED_VERDE    PIN_E0
#define LED_AMARILLO PIN_E1
#define LED_ROJO     PIN_E2

#define Enciende     Output_High
#define Apaga        Output_Low
#define Conmuta      Output_Toggle

#define COMMAND_LED          1
#define COMMAND_FIRMWARE     2
#define COMMAND_STRING_RS232 3

///////////////////////////////////////////////////////////////////////////////////////////////////
// RAM, RAM, RAM
///////////////////////////////////////////////////////////////////////////////////////////////////
int V1;
int V2; 
int V3;   
int V4;
int V5;   
int V6;   
int V7;
int V8;
int V9;
int V10; 


const int8 Lenbuf = 10;
char Version[] = "v.1.0";
int i;


int PM1,PM2;
int c=0;
int8 recbuf[Lenbuf];
int8 sndbuf[Lenbuf];

///////////////////////////////////////////////////////////////////////////////////////////////////
// M A I N
///////////////////////////////////////////////////////////////////////////////////////////////////

void main(void)
{
      SET_TRIS_C(0x00);

   delay_ms(500);
   Apaga(LED_VERDE);
   Apaga(LED_AMARILLO);
   Enciende(LED_ROJO);

   delay_ms(100);
   usb_init();
   usb_task();
   usb_wait_for_enumeration();
   enable_interrupts(global);
   
   while (TRUE)
   {
      if(usb_enumerated())
      {
         Apaga(LED_ROJO);
         Enciende(LED_VERDE);
         if (usb_kbhit(1))
         {

            usb_get_packet(1, recbuf, Lenbuf);
               /*
               que o como debo agarrar los datos "recibidos"??
               hasta donde yo se, es que usb_kbhit(1) retorna TRUE si recibe un byte
               ahora, si usb_kbhit(10) db. retornar TRUE si  recibe 10 byte osea hasta q llegue el 10  byte
               
               recbuf,apunta al primer byte recibido?
               si es asi, => es correcto lo sgte.?
               
                     V1=recbuf[0];
                     V2=recbuf[1];
                     V3=recbuf[2];
                     .
                     .
                     .
                     V10=recbuf[9];
                     
               y asi tendria los 10 bytes que envie guardados en el PIC??
               */
           
         }
      }
      else{
         Apaga(LED_VERDE);
         Enciende(LED_ROJO);
      }
   }
}




Título: Re: Proyecto PicUSB
Publicado por: amartis en 07 de Julio de 2008, 12:20:15
Me he descargado los proyectos que usan para comunicar el PIC i el PC y tengo un problema.

Concretamente he descargado el que està implementado en CCS para el PIC i en VB6 para el PC. En el programa del PIC no hay problema però cuando intento arrancar el programa de VB6 me sale el siguiente error:

"No se puede encontrar el punto de entrada de la DLL MPUSBGetDeviceCount en mpusbapi.dll"

Alguien sabe lo que puede passar. No se exactamente de donde viene el error.

Gracias.
Título: Re: Proyecto PicUSB
Publicado por: cerebro en 11 de Julio de 2008, 20:04:23
como cargas la dll load o run time?  si es load tenes bien cargada la libreria (.lib) o de ultima cuando ejecutas tenes todo en la misma carpeta o bien ruteado?    saludos!
Título: Re: Proyecto PicUSB
Publicado por: Flugplatz en 16 de Julio de 2008, 12:40:28
Hola.

Alguien ha conseguido hacer funcionar un dispositivo CDC en Windows Vista.

He probado con el archivo INF que viene en la última versión que habéis puesto, y sigue dando el mismo error.

Error 10... algo así como que como el software suministrado no está firmado digitalmente, pues no anda y punto.

Se supone que en los últimos drivers hay algo de que CDC debe funcionar, pero entre tanto archivo y el inglés, me pierdo.

El PIC lee datos de un programa que manda información por el puerto serie, por lo que no puedo rehacerlo usando otro protocolo.

J1M, he visto lo de WinUSB.sys, pero tampoco me aclaro.

Que conste que no pretendo que nadie haga el trabajo por mí, solo pido una ayudita o pista  :shock:. Parece que se puede hacer de alguna manera. Entiendo que la cosa está en definir un INF que enumere un puerto serie y tire de winusb.sys, pero no se por donde meterle mano. ¿debería haber una forma de que se hiciera automáticamente, NO?, o algo como lo que estoy usando ahora, un INF genérico que llama a usbser.sys.

He estado mirando por la WWW, y parece que la cosa trae cola. Hay muchos sitios en los que se habla de ello, pero hay mucha información cruzada.

NO ENTIENDO A MICROSOFT!!! ... Con lo bien que funciona todo en XP, y ale, a fastidiar sacándose cosas de la manga para hacer todo lo viejo incompatible, y encima, con información sesgada para que haya que hacerse un experto en el Windows Vista para cacharrear.  :?

Gracias y un saludo
Título: Proyecto PicUSB
Publicado por: sc_snader en 06 de Agosto de 2008, 20:18:44
holas a toda la gente... primero agradecer a J1M, por su aporte.. y por su puesto a toda la gente que anda colaborando con este tema..... bueno les comento que ya tengo trabajando el usb, pero en los ejemplos que tengo siempre se escribe y luego se lee.... cuando he intentado solo leer, me sale un error que dice : INTENTO LEER O ESCRIBIR EN UNA MEMORIA PROTEGIDA....

PD. el pic tiene una rutina que envia un dato cada 1 seg.


Atte.
Snader
Título: Re: Proyecto PicUSB
Publicado por: cocu3 en 11 de Agosto de 2008, 13:05:41
Es una característica de la arquitectura USB: transparente al usuario pero complicado en sus interiores (imagínate implementar un HUB).

oye men, como seria esto de implementar el hub de usb????? :shock: :shock: :shock:
Título: Re: Proyecto PicUSB
Publicado por: martincasalis en 13 de Agosto de 2008, 23:44:57
Hola amigos!!!! hace rato que vengo siguiendo este foro porque esta por demas interesante. Me decidi a largar con el USB. Estoy programando en CCS y en Visual Basic.

Desde el PIC puedo enviar y recibir todos los datos que quiera.

El problema aparece desde la PC, puedo enviar todo lo que quiera, pero recibir solo puedo recibir 1 solo byte.  :(
Ya he probado las mil y una maneras de recibir mas de un byte y no me es posible. Alguien tiene una idea que es lo que me puede estar pasando?

Agradezco todo tipo de comentarios.  8) 8) 8) 8)
Título: Re: Proyecto PicUSB
Publicado por: jjcblanco en 03 de Septiembre de 2008, 09:59:21
hola estoy cprobando el picusb y me pasa lo mismo que a trino en la pag 14 pero como que quedo sin solucionar, mi placa tiene con jumpers 3 formas de alimentar : externa , por usb y por el gtp(programador) en todas sus formas me dice que no reconoce el dispositivo y si se lo pongo desde agregar hardware me dice que picusb no se puede iniciar. ya instale el mcphusb y tampoco  ayuda  por favoooor.

gracias
Título: Re: Proyecto PicUSB
Publicado por: sc_snader en 05 de Septiembre de 2008, 18:40:30
Hola amigos!!!! hace rato que vengo siguiendo este foro porque esta por demas interesante. Me decidi a largar con el USB. Estoy programando en CCS y en Visual Basic.

Desde el PIC puedo enviar y recibir todos los datos que quiera.

El problema aparece desde la PC, puedo enviar todo lo que quiera, pero recibir solo puedo recibir 1 solo byte.  :(
Ya he probado las mil y una maneras de recibir mas de un byte y no me es posible. Alguien tiene una idea que es lo que me puede estar pasando?

Agradezco todo tipo de comentarios.  8) 8) 8) 8)

puedes leer directamente al pic, sin necesidad de primero enviar previamente ???
Título: Re: Proyecto PicUSB
Publicado por: WOOD_girl en 12 de Septiembre de 2008, 17:05:02
holaaa, a alguien le ha funcionado el picUsb, con un 18f2450, llevo como 3 semanas tratando de comunicarlo, pero me ha sido imposible, me sale dispositivo desconocido, y le tengo los dos condensadores, c7 y cusb, les agradeceria su ayuda.
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 13 de Septiembre de 2008, 16:20:08
holaaa, a alguien le ha funcionado el picUsb, con un 18f2450, llevo como 3 semanas tratando de comunicarlo, pero me ha sido imposible, me sale dispositivo desconocido, y le tengo los dos condensadores, c7 y cusb, les agradeceria su ayuda.

por lo general es problema de conexión, sino tendras que probar con otro pic.

Título: Re: Proyecto PicUSB
Publicado por: Nocturno en 14 de Septiembre de 2008, 03:29:53
Yo usé una vez ese PIC y hay que recompilar el código porque no le cabe, tiene mucha menos capacidad que el 18F2550.
Según la versión de CCS que utilices, incluso te tocará modificar cosas en los .H que trae por defecto.
Suerte con eso Jennyfer.
Título: Re: Proyecto PicUSB
Publicado por: WOOD_girl en 14 de Septiembre de 2008, 23:48:33
gracias nocturno y palitrokez por sus ayudas, voy a recompilarlo y ya les estare comentando, un saludo.
Título: Re: Proyecto PicUSB
Publicado por: marioquartz en 21 de Septiembre de 2008, 17:18:08
No sabia que existia un hilo sobre esto todavía "vivo". He realizado un codigo basandome en el que venia y me da una gran cantidad de errores. Si pudierais decirme que es lo que esta mal.
Tema en otro lado del foro. (http://www.todopic.com.ar/foros/index.php?topic=23141.0)
Título: Re: Proyecto PicUSB
Publicado por: Trino en 30 de Octubre de 2008, 09:56:42
Hola a tod@s:

Tengo una duda y quisiera saber si me podriais ayudar, he establecido una comunicación usb entre el pic (18f2550) y el pc (visual basic) basandome en el ejemplo de J1M (picusb) (que grande eres J1M!!  :)) y lo que quiero conseguir es que el pic realice un bucle un determinado tiempo y a continuación le mande una instrucción al pc. para ello el programa en visual basic debe estar testeando continuamente si recibe o no recibe datos, y ese es precisamente mi problema. Como hago para testear si recibe o no recibe datos el visual basic??

Gracias a todos de antemano!!.

Un Saludo.
Título: Re: Proyecto PicUSB
Publicado por: Geo en 30 de Octubre de 2008, 13:46:29
Checa el valor devuelto por la función Read. Esto lo puedes hacer en un ciclo o cada cierto tiempo.
Título: Re: Proyecto PicUSB
Publicado por: Trino en 31 de Octubre de 2008, 09:21:28
Muchisimas gracias Geo!! La verdad es que me ha costado un poco encontrar la funcion receive y saber como funciona (es lo que tiene ser novato en esto) pero bueno, al parecer a funcionado bien.

Mil gracias  :)
Título: Re: Proyecto PicUSB
Publicado por: mecatrvm en 02 de Noviembre de 2008, 02:39:21
HOLA QUE TAL, SOY NUEVO EN ESTE FORO. HACE DOS SEMANAS ECHE ANDAR EL PIC18F4550, CON BOOTLOADER, PROGRAMANDOLO EN MPLAB 8.1 Y CON EL COMPILADOR DE CCS, BAJE EL BOOTLADER USB_Bootloader_Setup 1.0. GRACIAS A LA AYUDA DEL MAESTRO JIM, TAMBIEN HICE LA COMUNICACIÓN EN C# CON SU PROGRAMA PICUSB. DESPUES TAMBIEN LO COMUNIQUE CON VISUAL C++, PERO ME INCLINO MAS A PROGRAMAR EN VISUAL C# 2008, PERO CUANDO CORRI EL PROGRAMA PICUSB, NOTE QUE TARDABA EN HACER LA SUMA, MI PREGUNTA ES ¿COMO PUEDO CORREGIR ESTE PROBLEMA?, YA QUE LA RESPUESTA NO ES INMEDIATA , EN VISUAL C++ NO EXISTE ESTE PROBLEMA.

HICE UN PROGRAMA DESDE C# QUE CONSISTE CAMBIAR EL PWM, ESTE PROGRAMA CONSTA: DE UN BOTON Y UNA CAJA DE TEXTO, PRIMERO COLOCAMOS EL VALOR (0-1023) EN LA CAJA DE TEXTO, DESPUES DAMOS UN CLICK, ENVIA DOS BYTES DE LA PC AL PIC(PWM 10 BITS), Y FUNCIONA, PERO EL PROBLEMA ES QUE SE TARDA EN DAR ESE CAMBIO.

LA OTRA COSA SERIA INSTALAR EL MCHPFSUSB_Setup_v1.3, que contiene otro driver mas actual para WINDOWS XP, o el winusb(prefiero quedarme en xp).
NO SE SI ESTE ES EL PROBLEMA,  QUE EL DRIVER NO ESTE ACTUALIZADO.
 
OJALA ME PUDIERA AYUDAR MAESTRO JIM.
Título: Re: Proyecto PicUSB
Publicado por: Medusa en 04 de Noviembre de 2008, 20:45:45
Hola a todos,

Estoy tratando de implementar una interfase grafica usando Labview para contralar 10 lamparas incandesentes a traves del puerto USB, para esto se me basado en el magnifico trabajo de J1M, he logrado controlar 8 lamparas en forma independiente pero no puedo tener el control con los dos ultimos  :5], aparte de esto  este control es muy basico es decir solo puedo controlar una lampara a la ves, yo necesito poder controlar cualquier convinacion de lamparas, alquien podria decirme como puedo hacer esto? :?: 
Título: Re: Proyecto PicUSB
Publicado por: mosquera_x en 06 de Noviembre de 2008, 01:28:10
Hola a todos, soy "nuevo" por aqui, comillas pq me la paso leyendo el foro y ps aprovecho en primer lugar para agradecerles a todos los foristas, por compartir sus conocimientos. De este proyecto picusb me he estado agarrando para sacar adelante mi proyecto de grado. Les cuento q por motivos de hardware (un adc paralelo a 5mhz) debo emplear la comunicacion usb, y la unica manera que me da el pic (un 18f4550) de transmitir la info del adc es empleando el puerto SPP. Después de haber leido el datasheet unas 10000000000 veces (las secciones de usb y spp), pude sacar mis conclusiones y creo que ahi mal que bien logré configurar la vaina. Sin embargo, no he podido dar con algun driver o analizador de protocolo capaz de mostrarme si las cosas estan funcionando o no; use por ahi un demo del advanced usb port monitor y me mostró correctamente configurados mis endpoints (uso 3, control (el "por default"), bulk (para mandar ordenes sencillas al pic) y el isocrono, en sentido out -no puede ser bidireccional-)
El labview, que era mi última esperanza, no soporta comunicacion isocrona (el visa solo soporta bulk, control e interrupciones). Alguien tiene idea de cómo puedo ver esos datos??
Alguien interesado en lo mismo? Compartamos experiencias...
 :shock:
Título: Re: Proyecto PicUSB
Publicado por: Geo en 06 de Noviembre de 2008, 11:40:22
Hola a todos,

Estoy tratando de implementar una interfase grafica usando Labview para contralar 10 lamparas incandesentes a traves del puerto USB, para esto se me basado en el magnifico trabajo de J1M, he logrado controlar 8 lamparas en forma independiente pero no puedo tener el control con los dos ultimos  :5], aparte de esto  este control es muy basico es decir solo puedo controlar una lampara a la ves, yo necesito poder controlar cualquier convinacion de lamparas, alquien podria decirme como puedo hacer esto? :?: 
¿De qué forma estás enviando/recibiendo los comandos?
Bien podrías enviar una cadena de bits donde cada uno de ellos indique el estado de una lámpara( p. ej.: 0-apagado, 1-encendido), en el PIC tendrías que separar los bits para poder ejecutar la acción. Esto mismo puedes hacer transmitiendo por bytes, aunque usarías más recursos pero te evitarías la parte de separar cada bit.
Título: Re: Proyecto PicUSB
Publicado por: Medusa en 10 de Noviembre de 2008, 23:17:13
Estoy enviando byte por byte, de este modo si logro enviar y recibir los comandos pero quisiera enviar 2 o 4 bytes por vez,
Título: Re: Proyecto PicUSB
Publicado por: jfh900 en 28 de Noviembre de 2008, 08:20:55
Tengo un problema con el USB y es que necesito implementarlo en un PIC18F2553 y en los ficheros de configuración no aparece este PIC. ¿Que hay que modificar para que funcione correctamente el USB con este PIC?. Lógicamente ya he probado a probado a cambiar el fichero de cabecera y le he añadido en el fichero pic18_usb el nombre del pic para que no de el error.

Un saludo
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 28 de Noviembre de 2008, 13:29:26
Ese pic es identico al 18f2550 a diferencia de q su ADC tiene una precision de 12bits, nada mas que yo sepa. Y no creo que eso este afectando el funcionamiento del usb....  q raro  :?

Suerte.
Título: Re: Proyecto PicUSB
Publicado por: aleb08 en 03 de Enero de 2009, 00:56:58
 :-/ Hola a todos!
Estoy trabajando con un PIC18F2550 para adquisicion de datos, lo comunico por USB gracias al trabajo de J1M y la modificacion de Carlos7890, y analiso los datos con LabWindows. Ahora quiero saber si se puede trabajar el USB con una funcion callback, osea que al recibir un dato se ejecute una funcion automaticamente y mientras tanto se pueda hacer otras cositas, como se hace con el puerto serial  :? .
Y de donde se puede bajar USB_Bootloader_Setup 1.0?
Título: Re: Proyecto PicUSB
Publicado por: ALE1973 en 12 de Febrero de 2009, 02:33:15
Buenas, estoy haciendo unas pruebas con un 18F4550, tratando de implementar un dispositivo HID tipo joystick, para arrancar, tome el ejemplo de Diego (redpic), del teclado HID, el cual funciona 10 puntos, lo que hice fue cambiar la tabla USB_CLASS_SPECIFIC_DESC[], con una generada por la herramienta HID Descriptor tools, el dispositivo se conecta, lo reconoce el sistema, lo toma como joystick, pero al enviarle los datos no recibo nada en la pc, baje e instale un sniffer USB para ver la trama, y efectivamente la trama llega al dispositivo pero siempre con el mismo valor (yo realizo una conversion AD y envio el dato), ahora bien, aparte de este problema, el sniffer me dice que no puede leer la tabla del descripor, y se cierra el programa, para saber si era error del programa o del pic, cargue el programa de Diego en el pic, y el sniffer lee correctamente la tabla... aparte de modificar esa tabla USB_CLASS_SPECIFIC_DESC[], hay otras modificaciones que hacer? encontre un proyecto de un joystick en mikroC y copie dicha tabla y tengo el mismo error, estoy trabajando con el CCS 4.068.

Esta es la tabla como queda

Código: CSS
  1. const char USB_CLASS_SPECIFIC_DESC[] = {
  2.     0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
  3.     0x15, 0x00,                    // LOGICAL_MINIMUM (0)
  4.     0x09, 0x04,                    // USAGE (Joystick)
  5.     0xa1, 0x01,                    // COLLECTION (Application)
  6.     0x05, 0x02,                    //   USAGE_PAGE (Simulation Controls)
  7.     0x09, 0xbb,                    //   USAGE (Throttle)
  8.     0x15, 0x81,                    //   LOGICAL_MINIMUM (-127)
  9.     0x25, 0x7f,                    //   LOGICAL_MAXIMUM (127)
  10.     0x75, 0x08,                    //   REPORT_SIZE (8)
  11.     0x95, 0x01,                    //   REPORT_COUNT (1)
  12.     0x81, 0x02,                    //   INPUT (Data,Var,Abs)
  13.     0x05, 0x01,                    //   USAGE_PAGE (Generic Desktop)
  14.     0x09, 0x01,                    //   USAGE (Pointer)
  15.     0xa1, 0x00,                    //   COLLECTION (Physical)
  16.     0x09, 0x30,                    //     USAGE (X)
  17.     0x09, 0x31,                    //     USAGE (Y)
  18.     0x95, 0x02,                    //     REPORT_COUNT (2)
  19.     0x81, 0x02,                    //     INPUT (Data,Var,Abs)
  20.     0xc0,                          //   END_COLLECTION
  21.     0x09, 0x39,                    //   USAGE (Hat switch)
  22.     0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
  23.     0x25, 0x03,                    //   LOGICAL_MAXIMUM (3)
  24.     0x35, 0x00,                    //   PHYSICAL_MINIMUM (0)
  25.     0x46, 0x0e, 0x01,              //   PHYSICAL_MAXIMUM (270)
  26.     0x65, 0x14,                    //   UNIT (Eng Rot:Angular Pos)
  27.     0x75, 0x04,                    //   REPORT_SIZE (4)
  28.     0x95, 0x01,                    //   REPORT_COUNT (1)
  29.     0x81, 0x02,                    //   INPUT (Data,Var,Abs)
  30.     0x05, 0x09,                    //   USAGE_PAGE (Button)
  31.     0x19, 0x01,                    //   USAGE_MINIMUM (Button 1)
  32.     0x29, 0x04,                    //   USAGE_MAXIMUM (Button 4)
  33.     0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
  34.     0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
  35.     0x75, 0x01,                    //   REPORT_SIZE (1)
  36.     0x95, 0x04,                    //   REPORT_COUNT (4)
  37.     0x55, 0x00,                    //   UNIT_EXPONENT (0)
  38.     0x65, 0x00,                    //   UNIT (None)
  39.     0x81, 0x02,                    //   INPUT (Data,Var,Abs)
  40.     0xc0                           // END_COLLECTION
  41.    };

Desde ya gracias por alguna idea de que puede estar mal

Saludos.
Alejandro
Título: Re: Proyecto PicUSB
Publicado por: ekud en 14 de Febrero de 2009, 23:02:02
ya conocia estos links...  y me han sido de mucha ayuda, pero yo lo que quiero es implementarlo en mikrobasic... por eso en este mismo momento estoy trabajando en ello... haber si logro tener avances hoy y publico alguito para k los ususarios de este lenguaje podamos tener una idea mas clara
Título: Re: Proyecto PicUSB
Publicado por: ekud en 15 de Febrero de 2009, 03:54:59
Hola a todos!

bueno lo que pasa es ps soy nuevo con esto de los micros de la serie 18f y queria comenzar con una comunicacion usb muy basica.

pues bien leyendo y leyendo tengo entendido que la frecuencia con la que trabajan estos micros para el usb 2.0 es de 48Mhz, que esta frecuencia es independiente de la frecuencia de trabajo del micro pero que aun asi su fuente es el oscilador externo que siempre se pone, solo que con un pll se amplifica hasta los 48Mhz.. y en fin...

y pues bien siempre he programado micros en el mikrobasic que ya va por la version 7.2 (7.3 en beta), en el mikrobasic hay un alibreria que me permite comunicarme con el pc via usb, tambien en l mikrobasic se incluye una aplicacion (muy parecida a lo que hace el EasyHID) que me genera un archivo con los descriptores para el microcontrolador. y asi las cosas uno pensaria que este tema esta en bandeja de plata.. listo para usarlo y ya...

pues bien... a mi no me ha kerido dar resultado el dichoso ejemplo que se plantea en este lenguaje... el ejemplo lleva un micro 18f4550 trabajando con un crytal a 8Mhz y ya... es asi de basico...

el codigo es el siguiente

(archivo USB_HID_test.pbas)

Código: [Seleccionar]
' * Project name:
'     HIDtest (Testing the USB HID connection)
' * Copyright:
'     (c) MikroElektronika, 2005 - 2008
' * Revision History:
'     20050502:
'       - initial release;
' * Description:
'     This example establishes connection with the HID terminal that is active
'     on the PC. Upon connection establishment, the HID Device Name will appear
'     in the respective window. After that software will wait for data and
'     it will return received data back.
' * Test configuration:
'     MCU:             PIC18F4550
'     Dev.Board:       EasyPIC5
'     Oscillator:      HS 8.000 MHz  (USB osc. is raised with PLL to 48.000MHz)
'     Ext. Modules:    -
'     SW:              mikroBasic v7.1
' * NOTES:
'     - Be VERY careful about the configuration flags for the 18F4550 - there's
'       so much place for mistake!
       
program USB_HID_test

include "USBdsc"

dim
 k, i, ch       as  byte
 userWR_buffer  as  byte[64]
 userRD_buffer  as  byte[64]

'******************************************************************************
' Main Interrupt Routine
'******************************************************************************
sub procedure interrupt
'** this is a way to call a procedure from interrupt
  HID_InterruptProc
end sub
'******************************************************************************


'******************************************************************************
' Initialization Routine
'******************************************************************************
sub procedure Init_Main
'--------------------------------------
' Disable interrupts
'--------------------------------------
INTCON = 0                             ' Disable GIE, PEIE, TMR0IE,INT0IE,RBIE
INTCON2 = 0xF5
INTCON3 = 0xC0
RCON.IPEN = 0                          ' Disable Priority Levels on interrupts
PIE1 = 0
PIE2 = 0
PIR1 = 0
PIR2 = 0

ADCON1 = ADCON1 or 0x0F                ' Configure all ports with analog function as digital
'--------------------------------------
' Ports Configuration
'--------------------------------------
TRISA = 0xFF
TRISB = 0xFF
TRISC = 0xFF
TRISD = 0
TRISE = 0x07

LATA = 0
LATB = 0
LATC = 0
LATD = 0
LATE = 0
end sub



'******************************************************************************
' Main Program Routine
'******************************************************************************

main:
  Init_Main()
 
  HID_Enable(@userRD_buffer, @userWR_buffer)
  Delay_mS(1000)
  Delay_mS(1000)

  while true
      k = HID_Read()
      i = 0
      while i < k
          ch = userRD_buffer[0]
          userWR_buffer[0] = ch
          HID_Write(@userWR_buffer, 1)
          inc(i)
      wend
  wend
  HID_Disable()
 
end.


el archivo del inlude (USBdsc.pbas) que es el que se genera con la aplicacion de mikrobasic para generar los descritores HId  contiene el siguiente codigo:

Código: [Seleccionar]
module USBdsc
include "HIDconstant"
' File Version 1.01
'
'******************************************************************************

'******************************************************************************
' The number of bytes in each report,
' calculated from Report Size and Report Count in the report descriptor
'******************************************************************************
 const HID_INPUT_REPORT_BYTES      = 1
 const HID_OUTPUT_REPORT_BYTES     = 1

 const HID_FEATURE_REPORT_BYTES    = 2
'******************************************************************************
' Byte constants
'******************************************************************************
 const NUM_ENDPOINTS               = 2
 const ConfigDescr_wTotalLength    = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS * USB_ENDP_DESCRIPTOR_LEN)
 const HID_ReportDesc_len          = 47

 const Low_HID_ReportDesc_len      = HID_ReportDesc_len
 const High_HID_ReportDesc_len     = HID_ReportDesc_len >> 8

 const Low_HID_PACKET_SIZE         = HID_PACKET_SIZE
 const High_HID_PACKET_SIZE        = HID_PACKET_SIZE >> 8



'******************************************************************************
' Descriptor Tables
'******************************************************************************
 const DescTables as byte[USB_DEVICE_DESCRIPTOR_ALL_LEN*2] = (

' Device Descriptor
    USB_DEVICE_DESCRIPTOR_LEN, 0,           ' bLength               - Length of Device descriptor (always 0x12)
    USB_DEVICE_DESCRIPTOR_TYPE, 0,          ' bDescriptorType       - 1 = DEVICE descriptor
    0x00, 0,                                ' bcdUSB                - USB revision 2.00 (low byte)
    0x02, 0,                                '                                           (high byte)
    0x00, 0,                                ' bDeviceClass          - Zero means each interface operates independently (class code in the interface descriptor)
    0x00, 0,                                ' bDeviceSubClass
    0x00, 0,                                ' bDeviceProtocol
    EP0_PACKET_SIZE, 0,                     ' bMaxPacketSize0       - maximum size of a data packet for a control transfer over EP0
    0x34, 0,                                ' idVendor              - Vendor  ID (low byte)
    0x12, 0,                                '                                    (high byte)
    0x01, 0,                                ' idProduct             - Product ID (low byte)
    0x00, 0,                                '                                    (high byte)
    0x01, 0,                                ' bcdDevice             - ( low byte)
    0x00, 0,                                '                         (high byte)
    0x01, 0,                                ' iManufacturer         - String1
    0x02, 0,                                ' iProduct              - String2
    0x00, 0,                                ' iSerialNumber         - ( None )
    0x01, 0,                                ' bNumConfigurations    - 1

' Configuration Descriptor
    USB_CONFIG_DESCRIPTOR_LEN, 0,           ' bLength               - Length of Configuration descriptor (always 0x09)
    USB_CONFIG_DESCRIPTOR_TYPE, 0,          ' bDescriptorType       - 2 = CONFIGURATION descriptor
    ConfigDescr_wTotalLength, 0,            ' wTotalLength          - Total length of this config. descriptor plus the interface and endpoint descriptors that are part of the configuration.
    0x00, 0,                                '                         ( high byte)
    0x01, 0,                                ' bNumInterfaces        - Number of interfaces
    0x01, 0,                                ' bConfigurationValue   - Configuration Value
    0x00, 0,                                ' iConfiguration        - String Index for this configuration ( None )
    0xA0, 0,                                ' bmAttributes          - attributes - "Bus powered" and "Remote wakeup"
    50, 0,                                  ' MaxPower              - bus-powered draws 50*2 mA from the bus.

' Interface Descriptor
    USB_INTERF_DESCRIPTOR_LEN, 0,           ' bLength               - Length of Interface descriptor (always 0x09)
    USB_INTERFACE_DESCRIPTOR_TYPE, 0,       ' bDescriptorType       - 4 = INTERFACE descriptor
    0x00, 0,                                ' bInterfaceNumber      - Number of interface, 0 based array
    0x00, 0,                                ' bAlternateSetting     - Alternate setting
    NUM_ENDPOINTS, 0,                       ' bNumEndPoints         - Number of endpoints used in this interface
    0x03, 0,                                ' bInterfaceClass       - assigned by the USB
    0x00, 0,                                ' bInterfaceSubClass    - Not A boot device
    0x00, 0,                                ' bInterfaceProtocol    - none
    0x00, 0,                                ' iInterface            - Index to string descriptor that describes this interface ( None )

' HID Descriptor
    USB_HID_DESCRIPTOR_LEN, 0,              ' bLength               - Length of HID descriptor (always 0x09)
    USB_HID_DESCRIPTOR_TYPE, 0,             ' bDescriptorType       - 0x21 = HID descriptor
    0x01, 0,                                ' HID class release number (1.01)
    0x01, 0,
    0x00, 0,                                ' Localized country code (none)
    0x01, 0,                                ' # of HID class descriptor to follow (1)
    0x22, 0,                                ' Report descriptor type (HID)
    Low_HID_ReportDesc_len, 0,
    High_HID_ReportDesc_len, 0,

' EP1_RX Descriptor
    USB_ENDP_DESCRIPTOR_LEN, 0,             ' bLength               - length of descriptor (always 0x07)
    USB_ENDPOINT_DESCRIPTOR_TYPE, 0,        ' bDescriptorType       - 5 = ENDPOINT descriptor
    0x81, 0,                                ' bEndpointAddress      - In, EP1
    USB_ENDPOINT_TYPE_INTERRUPT, 0,         ' bmAttributes          - Endpoint Type - Interrupt
    Low_HID_PACKET_SIZE, 0,                 ' wMaxPacketSize        - max packet size - low order byte
    High_HID_PACKET_SIZE, 0,                '                       - max packet size - high order byte
    1, 0,                                  ' bInterval             - polling interval (1 ms)

' EP1_TX Descriptor
    USB_ENDP_DESCRIPTOR_LEN, 0,             ' bLength               - length of descriptor (always 0x07)
    USB_ENDPOINT_DESCRIPTOR_TYPE, 0,        ' bDescriptorType       - 5 = ENDPOINT descriptor
    0x01, 0,                                ' bEndpointAddress      - Out, EP1
    USB_ENDPOINT_TYPE_INTERRUPT, 0,         ' bmAttributes          - Endpoint Type - Interrupt
    Low_HID_PACKET_SIZE, 0,                 ' wMaxPacketSize        - max packet size - low order byte
    High_HID_PACKET_SIZE, 0,                '                       - max packet size - high order byte
    1, 0,                                  ' bInterval             - polling interval (1 ms)

' HID_Report Descriptor
    0x06, 0,                                ' USAGE_PAGE (Vendor Defined)
    0xA0, 0,
    0xFF, 0,
    0x09, 0,                                ' USAGE ID (Vendor Usage 1)
    0x01, 0,
    0xA1, 0,                                ' COLLECTION (Application)
    0x01, 0,
'  The Input report
    0x09, 0,                                ' USAGE ID - Vendor defined
    0x03, 0,
    0x15, 0,                                '   LOGICAL_MINIMUM (0)
    0x00, 0,
    0x26, 0,                                '   LOGICAL_MAXIMUM (255)
    0x00, 0,
    0xFF, 0,
    0x75, 0,                                '   REPORT_SIZE (8)
    0x08, 0,
    0x95, 0,                                '   REPORT_COUNT (2)
    HID_INPUT_REPORT_BYTES, 0,
    0x81, 0,                                '   INPUT (Data,Var,Abs)
    0x02, 0,
'  The Output report
    0x09, 0,                                ' USAGE ID - Vendor defined
    0x04, 0,
    0x15, 0,                                '   LOGICAL_MINIMUM (0)
    0x00, 0,
    0x26, 0,                                '   LOGICAL_MAXIMUM (255)
    0x00, 0,
    0xFF, 0,
    0x75, 0,                                '   REPORT_SIZE (8)
    0x08, 0,
    0x95, 0,                                '   REPORT_COUNT (2)
    HID_OUTPUT_REPORT_BYTES, 0,
    0x91, 0,                                '   OUTPUT (Data,Var,Abs)
    0x02, 0,
'  The Feature report
    0x09, 0,                                ' USAGE ID - Vendor defined
    0x05, 0,
    0x15, 0,                                '   LOGICAL_MINIMUM (0)
    0x00, 0,
    0x26, 0,                                '   LOGICAL_MAXIMUM (255)
    0x00, 0,
    0xFF, 0,
    0x75, 0,                                '   REPORT_SIZE (8)
    0x08, 0,
    0x95, 0,                                '   REPORT_COUNT (2)
    HID_FEATURE_REPORT_BYTES, 0,
    0xB1, 0,                                '   FEATURE (Data,Var,Abs)
    0x02, 0,
'  End Collection
    0xC0, 0                                 ' END_COLLECTION
)
'******************************************************************************
 const LangIDDescr as byte[8] = (
    0x04, 0,
    USB_STRING_DESCRIPTOR_TYPE, 0,
    0x09, 0,                                ' LangID (0x0409) - Low
    0x04, 0                                 '                 - High
)
'******************************************************************************
 const ManufacturerDescr as byte[68] = (
    34, 0,
    USB_STRING_DESCRIPTOR_TYPE, 0,
    "m", 0, 0, 0,
    "i", 0, 0, 0,
    "k", 0, 0, 0,
    "r", 0, 0, 0,
    "o", 0, 0, 0,
    "E", 0, 0, 0,
    "l", 0, 0, 0,
    "e", 0, 0, 0,
    "k", 0, 0, 0,
    "t", 0, 0, 0,
    "r", 0, 0, 0,
    "o", 0, 0, 0,
    "n", 0, 0, 0,
    "i", 0, 0, 0,
    "k", 0, 0, 0,
    "a", 0, 0, 0
)
'******************************************************************************
 const ProductDescr as byte[48] = (
    24, 0,
    USB_STRING_DESCRIPTOR_TYPE, 0,
    "H", 0, 0, 0,
    "I", 0, 0, 0,
    "D", 0, 0, 0,
    " ", 0, 0, 0,
    "L", 0, 0, 0,
    "i", 0, 0, 0,
    "b", 0, 0, 0,
    "r", 0, 0, 0,
    "a", 0, 0, 0,
    "r", 0, 0, 0,
    "y", 0, 0, 0
)
'******************************************************************************
 const StrUnknownDescr as byte[4] = (
    2, 0,
    USB_STRING_DESCRIPTOR_TYPE, 0
)
'******************************************************************************







'******************************************************************************
' Initialization Function
'******************************************************************************
implements
sub procedure InitUSBdsc
dim dummy as byte  volatile register

dummy = NUM_ENDPOINTS
dummy = ConfigDescr_wTotalLength
dummy = HID_ReportDesc_len
dummy = Low_HID_ReportDesc_len
dummy = High_HID_ReportDesc_len
dummy = Low_HID_PACKET_SIZE
dummy = High_HID_PACKET_SIZE
dummy = HID_INPUT_REPORT_BYTES
dummy = HID_OUTPUT_REPORT_BYTES
dummy = HID_FEATURE_REPORT_BYTES
'******************************************************************************
' Byte constants
'******************************************************************************
dummy = NUM_ENDPOINTS
dummy = ConfigDescr_wTotalLength
dummy = HID_ReportDesc_len
dummy = Low_HID_ReportDesc_len
dummy = High_HID_ReportDesc_len
dummy = Low_HID_PACKET_SIZE
dummy = High_HID_PACKET_SIZE
dummy = @DescTables
dummy = @LangIDDescr
dummy = @ManufacturerDescr
dummy = @LangIDDescr
dummy = @ProductDescr
dummy = @StrUnknownDescr
end sub
end.


Y pues el circuito en el que estoy intentando simular es el siguiente:

(http://photos3.hi5.com/0078/979/506/zbRt8l979506-02.jpg)


y la verdad de todo esto no me funciona nada... el proteus ni se da por enterado cuando se simula la conexion de este micro al pc...

lo que me desmoraliza es que en los ejemplos del proteus hay varios que usan el usb y esos funcionan d mil maravillas... y ya estoy es como desesperado pk no doy con el error y llevo como 3 dias estankado en lo mismo... asi k ps si alguien pudiera hecharme una mano le estaria bastante agradecido.

ahh y ps no se uno nunca sabe si alguien desea los archivos aki los dejo para la descarga

http://rapidshare.com/files/198259931/P18F4550.rar.html (http://rapidshare.com/files/198259931/P18F4550.rar.html)
Título: Re: Proyecto PicUSB
Publicado por: ASTROCAR en 15 de Febrero de 2009, 08:22:35
Hermano ekud  veo que posteastes lo mismo dos veces eso lo que hace es recargar el foro lo mejor hubiera sido poner un link para que leyeran tu inquietud asi todos esten claro de tu problema espero no te moleste por eso pero es para mantener el foro y asi tener el mejor provecho del mismo.

Atten.
Alexander Santana.
Barcelona-Venezuela.

http://www.todopic.com.ar/foros/index.php?topic=22750.0
Título: Re: Proyecto PicUSB
Publicado por: ekud en 15 de Febrero de 2009, 13:17:01
jeje...

si ke pena lo siento... es que estoy un poco ensimismado con este tema...  :oops:
Título: Re: Proyecto PicUSB
Publicado por: adrianjpc en 19 de Febrero de 2009, 06:28:22
hola!
eh estado trabajando con labview pero no puedo establecer la comunicacion de labiew a usb
me podrias ayudar como hacerlo. me gustaria saber el codigo de labview que mencionas
se agradece tu ayuda
Título: Re: Proyecto PicUSB
Publicado por: LordLafebre en 19 de Febrero de 2009, 13:47:11
Hola:

Revisa este mismo hilo, todo completo, J1M publicó un mensaje sobre algo de esto:

http://www.todopic.com.ar/foros/index.php?topic=2260.msg139211#msg139211

lee y usa el buscador y puedes tener muchas respuestas antes de preguntar.  :wink:
Título: Re: Proyecto PicUSB
Publicado por: pachueko en 03 de Marzo de 2009, 21:08:40
 Saludos!! comom la mayoría de los que llegamos a este foro soy nuevo en él y aun mas nuevo con los PICs y el USB, tengo un programa en C# sencillo para iniciar, también he desarrollado programas en CCS para los PICs, todo esta bien y la PC no me registra ningun error al correr la aplicación C# sin embargo mi problema es en la identificación del dispositivo USB, le selecciono los controladores que he encontrado y no funciona muy bien.

Hace unas horas pude hacer la comunicación y todo salio bien, sin embargo en estos momentos no me reconoce el dispositivo, no me pide los controladores ni nada de eso, me meto en el panel de control para ver las propiedades del sistema y aparece mi dispositivo 18Fxx5x (uso un f4550), con el unico detalle que al lado del icono me aparece un signo de admiración rodeado de un circulo amarillo, no se que signifique eso, pero estoy seguro que es lo que me impide seguir con mi proyecto.

Espero poder solucionar el problema con ayuda de alguno de ustedes, de antemano muchas gracias, saludos!
Título: Re: Proyecto PicUSB
Publicado por: mariano_pic en 04 de Marzo de 2009, 02:05:53

[cambio la pregunta]  Hay alguna forma de implementar comunicacion hid, transmitiendo mas de dos bytes usando ccs, es posible o no es posible, que hay que hacer?
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 11 de Marzo de 2009, 16:22:23
pachueko, desisntalalo dandole en click direrecho a tu dispostivo en l administrador de dispositivos o ponlo a otro puerto usb o a otro computadora mejor...

mariano_pic, nunca use HID en ccs asi que nose a lo q te refieres, pero en la pag de Redpic hay info sobre esto.


Un saludo.
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 11 de Marzo de 2009, 17:01:27

[cambio la pregunta]  Hay alguna forma de implementar comunicacion hid, transmitiendo mas de dos bytes usando ccs, es posible o no es posible, que hay que hacer?

si es posible, mira el proyecto de semifluid en la sección de Source and Firmware

el autor usó una configuración de 8 bytes en usb_desc_hid 8-byte.h

Título: Re: Proyecto PicUSB
Publicado por: mariano_pic en 12 de Marzo de 2009, 15:16:01
Gracias palitrokez, esa seccion donde esta, en la pagina de ccs, en el foro o en la carpeta de instalacion de ccs? :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 12 de Marzo de 2009, 17:26:43
Mira en http://www.semifluid.com/
Título: Re: Proyecto PicUSB
Publicado por: mariano_pic en 13 de Marzo de 2009, 13:09:28

  EXCELENTE!!!!

  (http://www.cineatp.com/fotosProgramas/691..jpeg)
Título: Re: Proyecto PicUSB
Publicado por: washi_w_z_r en 27 de Abril de 2009, 23:45:24
Hola amigos: Alguna idea por que cuando asigno mas de un endpoint la PC ya no reconoce mi dispositivo aca el cod que modifique en picusb.h
Código: C#
  1. #IFNDEF __USB_DESCRIPTORS__
  2. #DEFINE __USB_DESCRIPTORS__
  3.  
  4. #include <usb.h>
  5.  
  6. //////////////////////////////////////////////////////////////////
  7. ///
  8. ///   start config descriptor
  9. ///   right now we only support one configuration descriptor.
  10. ///   the config, interface, class, and endpoint goes into this array.
  11. ///
  12. //////////////////////////////////////////////////////////////////
  13.  
  14.    #DEFINE USB_TOTAL_CONFIG_LEN      88 //config+interface+class+endpoint
  15.  
  16.    //configuration descriptor
  17.    char const USB_CONFIG_DESC[] = {
  18.    //config_descriptor for config index 1
  19.          USB_DESC_CONFIG_LEN,     //length of descriptor size
  20.          USB_DESC_CONFIG_TYPE,         //constant CONFIGURATION (0x02)
  21.          USB_TOTAL_CONFIG_LEN,0,  //size of all data returned for this config
  22.          1,      //number of interfaces this device supports
  23.          0x01,                //identifier for this configuration.  (IF we had more than one configurations)
  24.          0x00,                //index of string descriptor for this configuration
  25.          0xC0,                //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 reserved and bit7=1
  26.          0x32,                //maximum bus power required (maximum milliamperes/2)  (0x32 = 100mA)
  27.  
  28.    //interface descriptor 0 alt 0
  29.          USB_DESC_INTERFACE_LEN,  //length of descriptor
  30.          USB_DESC_INTERFACE_TYPE,      //constant INTERFACE (0x04)
  31.          0x00,                //number defining this interface (IF we had more than one interface)
  32.          0x00,                //alternate setting
  33.          6,       //number of endpoints, not counting endpoint 0.
  34.          0xFF,                //class code, FF = vendor defined
  35.          0xFF,                //subclass code, FF = vendor
  36.          0xFF,                //protocol code, FF = vendor
  37.          0x00,                //index of string descriptor for interface
  38.  
  39.    //endpoint descriptor
  40.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  41.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  42.          0x81,              //endpoint number and direction (0x81 = EP1 IN)
  43.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  44.          USB_EP1_TX_SIZE,0x00,         //maximum packet size supported
  45.          0x01,              //polling interval in ms. (for interrupt transfers ONLY)
  46.  
  47.    //endpoint descriptor
  48.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  49.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  50.          0x01,              //endpoint number and direction (0x01 = EP1 OUT)
  51.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  52.          USB_EP1_RX_SIZE,0x00,         //maximum packet size supported
  53.          0x01,              //polling interval in ms. (for interrupt transfers ONLY)
  54. //*******************************************************************//
  55.     //endpoint descriptor
  56.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  57.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  58.          0x82,              //endpoint number and direction (0x82 = EP1 IN)
  59.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  60.          USB_EP2_TX_SIZE,0x00,         //maximum packet size supported
  61.          0x01,              //polling interval in ms. (for interrupt transfers ONLY)
  62.  
  63.    //endpoint descriptor
  64.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  65.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  66.          0x02,              //endpoint number and direction (0x02 = EP1 OUT)
  67.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  68.          USB_EP2_RX_SIZE,0x00,         //maximum packet size supported
  69.          0x01,
  70. //46///////////////////////////////////////////////////////////////
  71. //**********************************************************************//
  72.     //endpoint descriptor
  73.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  74.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  75.          0x83,              //endpoint number and direction (0x83 = EP1 IN)
  76.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  77.          USB_EP3_TX_SIZE,0x00,         //maximum packet size supported
  78.          0x01,              //polling interval in ms. (for interrupt transfers ONLY)
  79.  
  80.    //endpoint descriptor
  81.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  82.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  83.          0x03,              //endpoint number and direction (0x03 = EP1 OUT)
  84.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  85.          USB_EP3_RX_SIZE,0x00,         //maximum packet size supported
  86.          0x01,
  87.  //*******************************58*************************************//
  88.     //endpoint descriptor
  89.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  90.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  91.          0x84,              //endpoint number and direction (0x84 = EP1 IN)
  92.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  93.          USB_EP4_TX_SIZE,0x00,         //maximum packet size supported
  94.          0x01,              //polling interval in ms. (for interrupt transfers ONLY)
  95.  
  96.    //endpoint descriptor
  97.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  98.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  99.          0x04,              //endpoint number and direction (0x04 = EP1 OUT)
  100.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  101.          USB_EP4_RX_SIZE,0x00,         //maximum packet size supported
  102.          0x01,
  103.  //*********************************70************************************//
  104.     //endpoint descriptor
  105.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  106.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  107.          0x85,              //endpoint number and direction (0x85 = EP1 IN)
  108.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  109.          USB_EP5_TX_SIZE,0x00,         //maximum packet size supported
  110.          0x01,              //polling interval in ms. (for interrupt transfers ONLY)
  111.  
  112.    //endpoint descriptor
  113.          USB_DESC_ENDPOINT_LEN, //length of descriptor
  114.          USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
  115.          0x05,              //endpoint number and direction (0x05 = EP1 OUT)
  116.          0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
  117.          USB_EP5_RX_SIZE,0x00,         //maximum packet size supported
  118.          0x01,
  119.    };
  120.  
  121.    //****** BEGIN CONFIG DESCRIPTOR LOOKUP TABLES ********
  122.    //since we can't make pointers to constants in certain pic16s, this is an offset table to find
  123.    //  a specific descriptor in the above table.
  124.  
  125.    //NOTE: DO TO A LIMITATION OF THE CCS CODE, ALL HID INTERFACES MUST START AT 0 AND BE SEQUENTIAL
  126.    //      FOR EXAMPLE, IF YOU HAVE 2 HID INTERFACES THEY MUST BE INTERFACE 0 AND INTERFACE 1
  127.    #define USB_NUM_HID_INTERFACES   0
  128.  
  129.    //the maximum number of interfaces seen on any config
  130.    //for example, if config 1 has 1 interface and config 2 has 2 interfaces you must define this as 2
  131.    #define USB_MAX_NUM_INTERFACES   1
  132.  
  133.    //define how many interfaces there are per config.  [0] is the first config, etc.
  134.    const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={1};
  135.  
  136.    #if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN)
  137.       #error USB_TOTAL_CONFIG_LEN not defined correctly
  138.    #endif
  139.  
  140.  
  141. //////////////////////////////////////////////////////////////////
  142. ///
  143. ///   start device descriptors
  144. ///
  145. //////////////////////////////////////////////////////////////////
  146.  
  147.    //device descriptor
  148.    char const USB_DEVICE_DESC[] ={
  149.          USB_DESC_DEVICE_LEN,          //the length of this report
  150.          0x01,                //constant DEVICE (0x01)
  151.          0x10,0x01,           //usb version in bcd
  152.          0x00,                //class code (if 0, interface defines class.  FF is vendor defined)
  153.          0x00,                //subclass code
  154.          0x00,                //protocol code
  155.          USB_MAX_EP0_PACKET_LENGTH,   //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8)
  156.          0xD8,0x04,           //vendor id (0x04D8 is Microchip)
  157.          0x09,0x00,           //product id, me gusta el 11 ;)
  158.          0x01,0x00,           //device release number
  159.          0x01,                //index of string description of manufacturer. therefore we point to string_1 array (see below)
  160.          0x02,                //index of string descriptor of the product
  161.          0x00,                //index of string descriptor of serial number
  162.          USB_NUM_CONFIGURATIONS   //number of possible configurations
  163.    };
  164.  
  165.  
  166. //////////////////////////////////////////////////////////////////
  167. ///
  168. ///   start string descriptors
  169. ///   String 0 is a special language string, and must be defined.  People in U.S.A. can leave this alone.
  170. ///
  171. ///   You must define the length else get_next_string_character() will not see the string
  172. ///   Current code only supports 10 strings (0 thru 9)
  173. ///
  174. //////////////////////////////////////////////////////////////////
  175.  
  176. //the offset of the starting location of each string.
  177. //offset[0] is the start of string 0, offset[1] is the start of string 1, etc.
  178. const char USB_STRING_DESC_OFFSET[]={0,4,12};
  179.  
  180. #define USB_STRING_DESC_COUNT sizeof(USB_STRING_DESC_OFFSET)
  181.  
  182. char const USB_STRING_DESC[]={
  183.    //string 0
  184.          4, //length of string index
  185.          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
  186.          0x09,0x04,   //Microsoft Defined for US-English
  187.    //string 1 --> la compañia del producto ???
  188.          8, //length of string index
  189.          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
  190.          'J',0,
  191.          '1',0,
  192.          'M',0,
  193.    //string 2 --> nombre del dispositivo
  194.          22, //length of string index
  195.          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
  196.          'J',0,
  197.          '1',0,
  198.          'M',0,
  199.          ' ',0,
  200.          'P',0,
  201.          'i',0,
  202.          'c',0,
  203.          'U',0,
  204.          'S',0,
  205.          'B',0
  206. };
  207.  
  208.  
  209. #ENDIF
Cuando envio datos hacia la pc con un solo endpoint no tengo problemas, pero al configurar estos 5 endpoint , ni el driver instala obviamente no reconoce al dispositivo
Título: Re: Proyecto PicUSB
Publicado por: umov en 11 de Mayo de 2009, 12:51:27
HOla amigos de TodoPIC, soy nuevo en este foro,

actualmente estoy desarrollando una aplicacion para comunicar informacion del PIC al PC y viceverza via USB, pues me he orientado gracias a un articulo que encontre por alli (internet) en donde se basaban en el trabajo que ustedes vienen realizando en este foro.

en mi proyecto inicialmente partimos con lo basico que en él estaba implementado (encender y apagar led´s con un PIC18f4550 desde una programa elaborado en java, ademas hacer la peticion de una respuesta de la version del firmware implementada en el PIC ).

ahora nosotros ademas hemos implementado en el proyecto la recepcion de datos por medio del Conversor Analogo Digital del PIC, estos datos son enviados al programa (en java) en el PC, ademas estamos manejando tres tipos de interrupciones (dos utilizando RTCC y timer1, y otra que es interrupcion externa en el pin B0).

nuestra inquietud sobre este proyecto esta en que la velocidad con la que se ejecutan los eventos (apagar y encender led) aveeces funciona y aveces no funciona, ademas cuando funciona tarda un tiempo no deseado en responder (aveces 3, 5 y hastya 10seg), cosa que no sucedia inicialmente.

estamos curiosos de saber lo que sucede, nos hemos preguntado si tal vez sera alguna opcion relacionada con la transferencia de datos via USB.

hemos incluso deshabilitado el codigo que nosotros hemos implementado adicional y funciona igual.

acontinuacion les dejamos nuestro codigo y el del archivo de cabecera que estamos utilizando:

CODIGO DEL ARCHIVO CABECERA: HEADER.H

#IFNDEF __USB_DESCRIPTORS__
#DEFINE __USB_DESCRIPTORS__

#include <usb.h>

////////////////////////////////////////////////////////////////////////////////
///
/// start config descriptor
/// right now we only support one configuration descriptor.
/// the config, interface, class, and endpoint goes into this array.
///
////////////////////////////////////////////////////////////////////////////////

#DEFINE USB_TOTAL_CONFIG_LEN 32 // config+interface+class+endpoint

// configuration descriptor
char const USB_CONFIG_DESC[] = {

// config_descriptor for config index 1
USB_DESC_CONFIG_LEN,    // length of descriptor size
USB_DESC_CONFIG_TYPE,   // constant CONFIGURATION (0x02)
USB_TOTAL_CONFIG_LEN,0, // size of all data returned for this config
1,                      // number of interfaces this device supports
0x01,                   // identifier for this configuration. (IF we had more than one configurations)
0x00,                   // index of string descriptor for this configuration
0xC0,                   // bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 reserved and bit7=1
0x32,                   // maximum bus power required (maximum milliamperes/2) (0x32 = 100mA)

// interface descriptor 0 alt 0
USB_DESC_INTERFACE_LEN,    // length of descriptor
USB_DESC_INTERFACE_TYPE,   // constant INTERFACE (0x04)
0x00,                      // number defining this interface (IF we had more than one interface)
0x00,                      // alternate setting
2,                         // number of endpoints, not counting endpoint 0.
0xFF,                      // class code, FF = vendor defined
0xFF,                      // subclass code, FF = vendor
0xFF,                      // protocol code, FF = vendor
0x00,                      // index of string descriptor for interface

// endpoint descriptor
USB_DESC_ENDPOINT_LEN,  // length of descriptor
USB_DESC_ENDPOINT_TYPE, // constant ENDPOINT (0x05)
0x81,                   // endpoint number and direction (0x81 = EP1 IN)
0x02,                   // transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
USB_EP1_TX_SIZE,0x00,   // maximum packet size supported
0x01,                   // polling interval in ms. (for interrupt transfers ONLY)

// endpoint descriptor
USB_DESC_ENDPOINT_LEN,  // length of descriptor
USB_DESC_ENDPOINT_TYPE, // constant ENDPOINT (0x05)
0x01,                   // endpoint number and direction (0x01 = EP1 OUT)
0x02,                   // transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
USB_EP1_RX_SIZE,0x00,   // maximum packet size supported
0x01,                   // polling interval in ms. (for interrupt transfers ONLY)

};
////////////////////////////////////////////////////////////////////////////////
//******************* BEGIN CONFIG DESCRIPTOR LOOKUP TABLES ********************
// since we can't make pointers to constants in certain pic16s, this is an offset table to find
// a specific descriptor in the above table.
////////////////////////////////////////////////////////////////////////////////
// NOTE: DO TO A LIMITATION OF THE CCS CODE, ALL HID INTERFACES MUST START AT 0 AND BE SEQUENTIAL
// FOR EXAMPLE, IF YOU HAVE 2 HID INTERFACES THEY MUST BE INTERFACE 0 AND INTERFACE 1
#define USB_NUM_HID_INTERFACES 0
//
////////////////////////////////////////////////////////////////////////////////
// the maximum number of interfaces seen on any config for example, if config 1
// has 1 interface and config 2 has 2 interfaces you must define this as 2
#define USB_MAX_NUM_INTERFACES 1
//
////////////////////////////////////////////////////////////////////////////////
//define how many interfaces there are per config.
  • is the first config, etc.

const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={1};

#if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN)
#error USB_TOTAL_CONFIG_LEN not defined correctly
#endif

////////////////////////////////////////////////////////////////////////////////
///
/// start device descriptors
///
////////////////////////////////////////////////////////////////////////////////
//
//device descriptor
char const USB_DEVICE_DESC[] ={
USB_DESC_DEVICE_LEN,       //the length of this report
0x01,                      //constant DEVICE (0x01)
0x10,0x01,                 //usb version in bcd
0x00,                      //class code (if 0, interface defines class. FF is vendor defined)
0x00,                      //subclass code
0x00,                      //protocol code
USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8)
0xD8,0x04,                 //vendor id (0x04D8 is Microchip)
0x0B,0x00,                 //product id
0x01,0x00,                 //device release number
0x01,                      //index of string description of manufacturer. therefore we point to string_1 array (see below)
0x02,                      //index of string descriptor of the product
0x00,                      //index of string descriptor of serial number
USB_NUM_CONFIGURATIONS     //number of possible configurations
};
//
////////////////////////////////////////////////////////////////////////////////
///
/// start string descriptors
/// String 0 is a special language string, and must be defined. People in U.S.A.
/// can leave this alone.
/// You must define the length else get_next_string_character() will not see the string
/// Current code only supports 10 strings (0 thru 9)
///
////////////////////////////////////////////////////////////////////////////////
//the offset of the starting location of each string.
//offset[0] is the start of string 0, offset[1] is the start of string 1, etc.
//
const char USB_STRING_DESC_OFFSET[]={0,4,20};

#define USB_STRING_DESC_COUNT sizeof(USB_STRING_DESC_OFFSET)

char const USB_STRING_DESC[]={
                        //string 0 Codificacion de la tabla ???
4,                      //length of string index
USB_DESC_STRING_TYPE,   //descriptor type 0x03 (STRING)
0x09,0x04,              //Microsoft Defined for US-English
                        //string 1 --> la compañia del producto ???
16,                     //length of string index
USB_DESC_STRING_TYPE,   //descriptor type 0x03 (STRING)
'j',0,
'P',0,
'i',0,
'c',0,
'U',0,
's',0,
'b',0,
                        //string 2 --> nombre del dispositivo
18,                     //length of string index
USB_DESC_STRING_TYPE,   //descriptor type 0x03 (STRING)
'J',0,
'E',0,
'C',0,
'R',0,
' ',0,
'U',0,
'S',0,
'B',0,
};
#ENDIF   
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


AHORA EL CODIGO CORRESPONDIENTE AL PROGRAMA PRINCIPAL
FIRMWARE 18F4550.C

#include <18F4550.h>                                                    // Declaracion del microcontrolador a utilizar
//#device *=8
#device ADC=16
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN   // Configuracion del microcontrolador
// Fuses utilizados:
/**
HSPLL: utilizamos un cristal HS de alta velocidad, en conjunto con el PLL para generar los 48Mhz.
NOMCLR: Utilizamos reset por software, y dejamos el pin 1 del micro como entrada/salida digital.
NOWDT: No utilizamos el perro guardían.
NOPROTECT: Desactivamos la protección de código.
NOLVP: Desactivamos la programación a bajo voltaje.
NODEBUG: No entramos al modo debug.
USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
PLL5: significa que el PLL prescaler dividirá en 5 la frecuencia del cristal. para HS = 20Mhz/5 = 4Mhz.
CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB
*/
#use delay(clock=48000000)                                              // Configuracion del relog a utilizar
//#define use_portb_lcd TRUE                                              // definir portb lcd
//#include <lcd.c>                                                        // Se declara periferico a utilizar -> LCD.
//#use rs232(baud=19200, xmit=PIN_C6,rcv=PIN_C7,stream=HOSTPC)             // Se declara periferico a utilizar -> rs232.
///////////////////////////////////////////////////////////////////////////////////////////////////
// CCS Library dynamic defines. For dynamic configuration of the CCS Library
// for your application several defines need to be made. See the comments
// at usb.h for more information
///////////////////////////////////////////////////////////////////////////////////////////////////
#define INTS_PER_SECOND 30                                              // (4000000/(2*256*256))
#define USB_HID_DEVICE FALSE              // deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK // turn on EP1(EndPoint1) for IN bulk/interrupt transfers (activacion de traferencia masiva en USB configurando el EndPoint 1 de transmision)
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK // turn on EP1(EndPoint1) for OUT bulk/interrupt transfers (activacion de traferencia masiva en USB configurando el EndPoint 1 de recepcion)
#define USB_EP1_TX_SIZE 32                // size to allocate for the tx endpoint 1 buffer (tamaño del buffer de transferencia en la transmision entre 1 y 32 bytes para USB 2.0)
#define USB_EP1_RX_SIZE 32                // size to allocate for the rx endpoint 1 buffer (tamaño del buffer de transferencia en la recepcion entre 1 y 32 bytes para USB 2.0)
///////////////////////////////////////////////////////////////////////////////////////////////////
// Include the CCS USB Libraries. See the comments at the top of these
// files for more information
////////////////////////////////////////////////////////////////////////////////
#include <pic18_usb.h>  // Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <header.h>     // Configuración del USB y los descriptores para este dispositivo
#include <usb.c>        // Handles usb setup tokens and get descriptor reports
#include <stdlib.h>
#include <stdio.h>      //
////////////////////////////////////////////////////////////////////////////////
//#define Enciende Output_High
//#define Apaga Output_Low
//#define Conmuta Output_Toggle
#define RecCommand recbuf[0]     //
#define LedParam recbuf[1]
#define COMMAND_TEMPERATURA 1   
#define COMMAND_LEDS 2
#byte PORT_E = 5
#define LedState PORT_E,2
////////////////////////////////////////////////////////////////////////////////
// RAM, RAM, RAM
////////////////////////////////////////////////////////////////////////////////
const int8 Lenbuf = 32;  //32        //Longitud del Buffer de lectura en el puerto USB.
int16 conversion;//,min=0,max=1023; //Se declaran Variable enteras a 16Bits.
float temp;                         //Decalracion de una variable flotante.
char ctemp[5];
int8 recbuf[Lenbuf];
//char cLedParam;
int8 i=0;
int8 LedParam_copy=0;
//int8 sndbuf[Lenbuf];
BYTE int_count;                  // Número de interrupciones que faltan antes que haya transcurrido un segundo
////////////////////////////////////////////////////////////////////////////////
// M A I N
////////////////////////////////////////////////////////////////////////////////
#INT_RTCC
void Led_State()                   //Interrupción utilizada para el manejo del bit de estado.
{
   if(--int_count==0)
   {  output_bit(Pin_E2,!bit_test(LedState)); //Llega aquí cada segundo.
      int_count=INTS_PER_SECOND;
   }
}
#INT_TIMER1
void interrupcion_timer1(){
   i++;
   if (i==40){
      output_d(0x00);
      i=0;
   }
   set_timer1(0);
   set_timer1(3036);
}
#INT_EXT                               //Interrupcion a aplicar cuando se active el sensor de movimiento
void sensor_movimiento_isr(){

   if (LedParam_copy == 0x02){
      output_d(0x00);
      i=0;
   }
   else{
      set_timer1(0);
      setup_timer_1( T1_INTERNAL | T1_DIV_BY_8 );
      output_d(0x01);
      i = 0;
      set_timer1(3036);                            // 256-(15/(4/48000000))
   }
}
/**

#int_ext1                              //Interrupcion a aplicar cuando se active el sensor de humo
void sensor_humo_isr(){
   output_d(LedParam);
   delay_ms(1000);
   output_d(LedParam);
}
*/
//******************************************************************************
ConvenVoltio()
{
   temp=((0.0078125*conversion)-0.5);  //Calculo de la temperatura
   sprintf(ctemp, "%f", temp);         //Convierte un numero de tipo coma flotante a tipo cadena
   //sprintf(cRecCommand, "%u", RecCommand);
   //itoa(LedParam, 10, cLedParam);
   return ctemp;
}
//******************************************************************************
void main(void){
   delay_ms(500);                                        //Retardo de 0.5 seg
   usb_init();                                           //Inicializa el Modulo de Comunicacion USB
   usb_task();                                           //
   usb_wait_for_enumeration();                           //Se situa en un bucle infinito mientras la comunicacion USB es enumerada
   
   set_tris_a(0000001);             //Configuracion del Pin A0 como entrada
   set_tris_b(00001111);            //Configuracion del Pin b0 como entrada
   setup_adc(ADC_CLOCK_DIV_4);   //
   setup_adc_ports(AN0);         //Configuracion del puerto como entrada Analoga
   set_adc_channel(0);           //Seleccion del canal de conversion en este caso el cero
 
   int_count=INTS_PER_SECOND;
   set_timer0(0);
   setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT );
   
   // 48 mhz clock, no prescaler, set timer 0
   // to overflow in 15seg
   
   enable_interrupts(INT_RTCC);                          //
   enable_interrupts(INT_TIMER1); //
   enable_interrupts(INT_EXT);                           //
   //ext_int_edge (L_TO_H);
   //port_b_pullups(true);
   //enable_interrupts(int_ext1);                          //
   enable_interrupts(GLOBAL);                            //Inabilita las demas interrupciones
   //do
   while(true)
   {
      if(usb_enumerated()){                              //¿El sistema operativo de la PC nos ha reconocidos como conectados y ha enumerado la Comunicacion USB?
         if (usb_kbhit(1)){                              //Verifica si se han recibido datos provenientes del PC
             usb_get_packet(1, recbuf, Lenbuf);          //Toma los dos bytes que llegan y los guarda en recbuf,
                                                         //y luego son guardos en RecCommand y LedParam respectivamente
            if(RecCommand==COMMAND_TEMPERATURA){            //Verifica si el byte 0 (RecCommad) que llega es igual a COMMAND_FIRMWARE
               usb_put_packet(1,ctemp,4,USB_DTS_TOGGLE); //Escribe en el Puerto USB el valor de la temperatura
               //usb_put_packet(1,cLedParam,4,USB_DTS_TOGGLE); //Escribe en el Puerto USB el valor de recbuf               
               //printf("Data leida de USB: %u",LedParam);   //Supuestamente envia el dato leido por el puerto RS232
               //printf("Data leida de USB: %s",cLedParam);   //Supuestamente envia el dato leido por el puerto RS232
               //delay_ms(1000);
               //printf("Data leida de USB: %s",Lenbuf);
            }
          if(RecCommand==COMMAND_LEDS){                //Verifica si el dato que llega es igual a COMMAND_LEDS
            LedParam_copy = LedParam; 
            //output_d(LedParam);                       //Escribe por el puerto D los leds que va a encender
            //printf("Data leida de USB: %u",recbuf);
            //printf("Data leida de USB: %s",Lenbuf);
            } 
         }
      }
      delay_us(10);
      conversion = read_adc();                                          //Lectura del conversor del ADC
      //printf("%Lu",conversion);                                         //Formato de envio del valor de la temperatura por RS232
      //setup_adc( ADC_OFF );
      ConvenVoltio();
      //usb_put_packet(1,temp,5,USB_DTS_TOGGLE);                        //Escribe en el Puerto USB la version del firmware
      //printf(" %1.1f ",temp);                                         //Formato de envio del valor de la temperatura por RS232
      //printf(lcd_putc,"\f  Temperatura:  \n     %1.1f oC    ",temp);  //Impresion del dato en la LCD
      //delay_ms(100);                                                    //Retardo de 1 usegundo
      //usb_token_reset();
   }//while(true);
}
Título: Re: Proyecto PicUSB
Publicado por: headhead en 20 de Mayo de 2009, 23:56:15
Buenas. Buscando en la red encontre una web que esta en construccion pero promete mucho parece que va a ser una exelente web. En esta pagina encontre un proyecto usb hecho en C# y un 18f2550 programado en ccs. Se trata de un programa con una interfaz grafica muy bien hecha la cual controla un display 7 segmentos por el puerto usb. espero ayude de algo mi aporte :mrgreen: :mrgreen:. aqui esta la pagina www.colpic.co.cc (http://www.colpic.co.cc/)
Título: Re: Proyecto PicUSB
Publicado por: michaelandres en 17 de Julio de 2009, 14:49:29
Buenas, he empezado a trabajar la comunicacion usb, y el ejemplo que nos da J1M es justo lo que necesito para empezar a trabajar y comprobar que funciona, pues bueno, ya he probado ese ejemplo y efectivamente me reconoce en el pc un nuevo dispositivo, e instala el dispositivo correctamente indicando con el led verde en el circuito, hasta ahi todo perfecto, pero al probar la transmision de datos hacia el pic con la aplicacion PicUSB.exe y el mpusbapi.dll, no hace nada, ninguna de las opciones que tienen los botones (LEDS OFF, LED VERDE ON, SUMAR,...) funciona, ya que no tiene efecto sobre el micro,...  :shock: :shock: :shock:

He probado y revisado el circuito para descartar cualquier problema de hardware, pero sigue haciendo lo mismo, para confirmar, tengo conectado un condensador de 100nF entre VCC y GND del conector usb, y un condensador de 470nF (0,47uF) en el VUSB, tambien he probado en este ultimo 47uF, 470pF, 4.7nF, ya que buscando en la red he encontrado varios montajes en los cuales no coinciden cual es el condensador apropiado para el VUSB,...
Cualquier aclaracion con respecto al uso de los condensadores, o cualquier aspecto importante que no haya tenido en cuenta en la parte del hardware, seria de gran ayuda para hacer las pruebas pertinentes, y ver aunque sea la suma de 1+1 realizada por el micro,...  :D

En estos momentos le hecho mas la culpa al aplicativo ya que al parecer todo funciona como deberia, ya que aparece el dispositivo funcionando correctamente en el administrador de dispositivos,  no he visto que otro tenga problemas con el aplicativo, asi que me gustaria saber si solo debe ejecutarse o hace falta modificar algun parametro para que funcione correctamente, muchas gracias,... :mrgreen:

Al parecer necesitaba mas información,   :-/ :-/ :-/,... leyendo aqui y allá pude lograr la comunicacion usb perfectamente con java, todas las dudas que habia planteado ya estan resueltas, muchas gracias,...  :mrgreen: :mrgreen: :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: jmorfeo en 30 de Septiembre de 2009, 19:19:52
Saludos a todos y felicitaciones a J1M por el proyecto. Quiero empezar mi proyecto USB con PIC18F4550 y estaba simulando y viendo la info que hay disponible en internet cuando me surgió el primer problema.
Hice la simulación del proyecto PicUSB con Proteus 7.4 SP3 con el hex que trae y me anda perfectamente pero cuando lo compilo yo desde el CCS 4.093 entonces deja de funcionar, ni siquiera me pide el driver nada... probé con los programas de ejemplo de CCS ex_usb_serial y me hace lo mismo. Dejo unos links con las pruebas del ejemplo de CCS  compilador (http://www.postimage.org/image.php?v=Ts1boOYr), error (http://www.postimage.org/image.php?v=Ts1bbymA) y circuito (http://www.postimage.org/image.php?v=Ts1bgA8J).
Con el trabajo de J1M se queda en el mismo lugar del USB analyzer. Espero que alguién me pueda ayudar, estoy hace varios días intentando hacerlo funcionar sin éxito ya que luego le quiero hacer unas modificaciones. Busqué en todo el foro y solo encontré preguntas relacionadas con la programación el la PC pero nadie sobre el CCS. Para mi debe ser algo del programa, gracias
 :?
Título: Re: Proyecto PicUSB
Publicado por: MLO__ en 30 de Septiembre de 2009, 22:52:55
Hola.

Si cambiaste la versión del compilador, el VID y el PID habrán cambiado tambien (si es que los modificaste anteriormente). Revisa esos valores a ver si es eso.

Saludos
Título: Re: Proyecto PicUSB
Publicado por: jmorfeo en 01 de Octubre de 2009, 21:46:08
Gracias MLO por la respuesta, Probé con ejemplos que ya traían el VIP y PID en un archivo include y uso los mismos, de todos modos tengo entendido que eso me daría problemas para cargar el driver pero no para la comunicación en si, como se ve en las imágenes. Con otros ejemplos en el USB analyzer se ve que avanza bastante la comunicacion pero en estos casos se detiene al principio nomás, no pasa el control transfer... me da la sensación que en versiones nuevas de CCS como la mía que es 4.093 han cambiado algo de las librerías que hace que no funcione bien. Voy a probar con una versión anterior. Cual me recomiendan??
Título: Re: Proyecto PicUSB
Publicado por: MLO__ en 01 de Octubre de 2009, 22:40:21
Hola.

Yo uso esa versión y el USB corre bien.

Si mal no recuerdo, los VID y PID que usa J1M no son los mismos que trae el CCS por default. No se si será eso.

Saludos
Título: Re: Proyecto PicUSB
Publicado por: jmorfeo en 02 de Octubre de 2009, 11:41:51
Que extraño porque ahora me funciona bien con la versión 3.249 pero con la 4.093 no hay forma. PAra mi hay un cambio en los drivers USB de CCS que me están afectando. Hice la pregunta en el foro de CCS y espero la respuesta, gracias por tu ayuda MLO, no sé por donde seguir. Tendría que revisar cada línea de driver para ver las diferencias.... tu versión CCS es actualizada o la instalaste de 0? Probé con varios VID y PID, de acuerdo a esos números es el driver .inf que te pide... para mi no es eso...
Título: Re: Proyecto PicUSB
Publicado por: MLO__ en 02 de Octubre de 2009, 11:45:07
Hola.

Es actualizada.

Yo lo que hice fue cambiar el VID y el PID para que corresponda al .inf y no me ha dado problema. Esta muy raro lo que comentas, esperemos a ver que te contestan los del CCS.

Saludos
Título: Re: Proyecto PicUSB
Publicado por: megadigit en 02 de Octubre de 2009, 14:20:51
Antes que nada los felicito por el buen proyecto que presentan, y dada su experiencia les pido algo de ayuda, veran intento implementar el usb en un pic18f4450, pero mi problema es que aun no he logrado instalar correctamente el driver, he checado los valores para VID y PID y no funciona,tambien he checado estos mismos valores en el driver, y nada, en algun otro foro lei que se debia a un bug en la libreria pic18_usb.h para este modelo o el pic18f2450, asi que busque la modificada y recompile pero no resulto. el mensaje que me sale  al conectar el pic a la PC es el siguiente:

------------------------------------------------------------
No se reconoce el dispositivo USB
Uno de los dispositivos vinculados a este equipo ha tenido un mal funcionamiento
y Windows no la ha reconocido. Haga clic en este mensaje para obtener asistencia
sobre como resolver este problema.
------------------------------------------------------------

La verdad es que no se que pasa, si me falta algo por configurar o por ser otro PIC necesite de algo mas, o si se trate de agregar algo mas de hardware, he tratado de seguir todos los pasos de la manera mas adecuada pero no lo he conseguido, ojala alguien con mas experiencia me pueda ayudar se los agradecere mucho.

Gracias.
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 02 de Octubre de 2009, 15:36:15
hola megadigit

causas por malfuncionamiento hay muchas,

del lado del hardware:

- checar alimentación.
- checar el condensador vusb (rango de 470nF hasta 47uF)
- checar el hardware asociado al uC PIC
- checar el cable usb.

del lado del software:

- checar los VID y PID tanto del firmware como del software del lado del HOST.
- checar que pase correctamente la enumeración del dispositivo (todas las funciones asociadas a la enumeración del dispositivo).

Título: Re: Proyecto PicUSB
Publicado por: megadigit en 02 de Octubre de 2009, 17:11:30
Gracias Palitroquez ya resolvi el problema y lo hice gracias a un programa tuyo (o al menos eso supongo) el v3.1 INF enumeracion datos uC PIC-USB, que me creo el archivo .inf y el usb_desc_cdc.h, claro tube que utilizar el CDC.

Algo curioso es que aun me falla de ves en cuando es decir si crea el puerto COM, pero a veces sale con un icono de mal funcionamiento, pero basta con reiniciar el PIC y ya queda.

 
Título: Re: Proyecto PicUSB
Publicado por: MLO__ en 02 de Octubre de 2009, 17:20:07
Hola.

Yo tuve un problema similar con un 18F2550 y resulto ser que el micro estaba medio dañado, ya que después no prendía un LED conectado a uno pin del puerto B. Cuando cambié de micro por uno nuevecillo corrió sin ningún problema.

Saludos
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 03 de Octubre de 2009, 12:46:20
...Algo curioso es que aun me falla de ves en cuando es decir si crea el puerto COM, pero a veces sale con un icono de mal funcionamiento, pero basta con reiniciar el PIC y ya queda.

 

umm no debería hacer eso, algo debe estar colándose por allí.

Te comento que a mi pasa algo curioso, tengo conectado al usb: teclado, mouse, impresora, programador de pic.

y cuando intento conectar otro dispositivo, el teclado empieza a fallar si por ejemplo conecto un pic al usb, éste también falla, es decir, tengo que desconectar el teclado ó el mouse, para que lo demás funcionen bien. Extraño, porque el host debería suministrar suficiente corriente para todos, tal vez sea por problemas con el guindós

Título: Re: Proyecto PicUSB
Publicado por: megadigit en 03 de Octubre de 2009, 15:26:07
Si eso ya tambien se soluciono o al parecer, le puse otro capacitor y funciono bien, no se si estaria dañado o que pasaria, ahora voy a empezar a hacer programas :lol:
Título: Re: Proyecto PicUSB
Publicado por: roger91arg en 05 de Noviembre de 2009, 00:26:25
hola, estoy haciendo un proyecto para el cole (una interfaz usb de 16 salidas, 8 entradas digitales, 4 analogas y un puerto de expansion de 8 bits) y la parte de la comunicacion usb la hice basandome en este proyecto,que de por cierto mcuhas gracias a todos que la verdad me fue de mucha ayuda. despues de un tiempo de prueba y error logre modificar el inf a mi gusto, abrir mas endpoint y demas, pero tengo un problema:
cada ves que quiero mandar un escribir o leer un endpoint y la interfaz no esta conectada, se me tilda el programa de la pc (lo desarrolle con vc# y winusb), es que cuando uso las funciones para escribir o leer los endpoint estas enves de devolverme false (que supongo que seria lo que tienen que hacer, ya que estas devuelven un bool) me tilda el programa, y la verdad ya no se que hacer, ¿alguien tiene idea que puede estar pasando?.
cuadno lo termime voy a publicar todo mi trabajo en esta pagina,con pcb y todo, talvez a alguien le pueda servir.
muchas gracias.
Título: Re: Proyecto PicUSB
Publicado por: sowilosol en 10 de Noviembre de 2009, 16:19:48
Hola roger91arg, tengo un amigo que realiza aplicaciones USB (entre otros proyectos), puedes revisar sus artículos en esta página:
 link eliminado  o le puedes mandar un correo, él te puede apoyar con tu proyecto.

saludos!  

Moderación: Para envío de propaganda hacerlo por mensaje privado. Gracias.
Título: Re: Proyecto PicUSB
Publicado por: emilio0401 en 11 de Enero de 2010, 12:23:42
Hola a todos!

No se si esto se llevó a otro hilo, porq por lo q veo, los últimos posts son ya de hace mucho tiempo.
¿Habeis conseguido hacer funcionar el driver de CCS para los PIC con USB (como el 18F4550) en Windows Vista 64bits?
Yo lo tengo funcionando en XP y Vista 32, pero en Vista 64 no hay manera, el PC sigue sin reconocerme el dispositivo. Si alguno lo habeis conseguido, o sabeis de algun post o web donde explique que hay que hacer de especial con el Vista 64, por favor decidmelo, me sería de gran ayuda.

Muchas gracias! ;) Un saludo
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 11 de Enero de 2010, 21:22:38
El amigo J1M que echó a andar este proyecto luego creó un driver para Windows Vista. Lo tenía a la venta en su página web en esos tiempos.

Puedes pedirle que te lo venda...

J1M
http://www.todopic.com.ar/foros/index.php?action=profile;u=1317

Otra opción es que uses el driver que trae el ejemplo de CCS en alguna versión reciente y ver si funciona con Vista.
Título: Re: Proyecto PicUSB
Publicado por: J1M en 11 de Enero de 2010, 21:52:42
Mig, eso ya cambió...

Por un lado los chicos de Microchip actualizaron su driver/librería para que fuera compatible con Vista/Siete y versiones de 64bits.
Y por el otro, con respecto al driver que realizé basándome en el Winusb puedes descargarlo, ahora ya sin coste, de hobbypic.com

De todas formas emilio, tu quieres un driver para el CDC verdad?? Es que lo que he comentado ahí arriba, y lo que te decía el compañero migsantiago, es para la forma de control del usb basada en dll/driver.

un saludo.
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 11 de Enero de 2010, 21:55:17
Ohh muy bien J1M, cambio y fuera.  :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: J1M en 11 de Enero de 2010, 22:17:20
jejeje es cosa del tiempo, los anticiclones y las bajas presiones, trankilo! :p
Título: Ayuda en 7 de 64 bits por favor
Publicado por: vinnymoy en 14 de Enero de 2010, 22:00:05
Esta es la situacion, estoy probando un aplicacion que hice y que esta probada porque funciona perfecto en xp de 32 bits, pero migre al 7 de 64 bits y cuando conecto el usb ni siquiera sale el tipico: Dispositivo desconocido, no pasa nada..... es como si estuviera muerto!!!!

Encontré en la pagina 16 de este hilo un link a un archivo de la microchip y me descargue un programa con unos drivers y no se que, pero igual no funk!!!!

Ayuda por favor!!!
Título: Re: Proyecto PicUSB
Publicado por: jokep en 15 de Enero de 2010, 11:08:25
oigan; y con respecto a usar el driver de microchip (mpusbapi.dll) o el WinUSB; qué recomiendan???. uso el 18F4550, por eso me fui por el lado de la mpusbapi.dll con los ejemplos de J1M; que por cierto no los he podido hacer jalar en Visual Basic .NET, por algunas diferencias del lenguaje (pues los ejemplos están en VB6 y dan algunas diferencias y errores al convertirlos)

salu2
Título: Re: Proyecto PicUSB
Publicado por: jokep en 15 de Enero de 2010, 14:14:54
no he podido :5]!!!

no podría alguien poner un ejemplo simple de usar la mpusbapi.dll en VB .NET  ???

muchas gracias
Título: Re: Proyecto PicUSB
Publicado por: J1M en 15 de Enero de 2010, 14:30:34
vinnymoy, es raro el asunto, comprueba que no se haya fastidiado nada en la PCB o que el puerto ese USB esté mal...

jokep, te has pasado por hobbypic? hay un ejemplo para VB llamado:
"PicUSBStuff: Conecta tu PIC al PC por USB con el driver de Microchip y VC++, VB, Java, Delphi, Labview y Linux"

Simplemente sustituye la .dll por la nueva de microchip.

S2!
Título: Re: Proyecto PicUSB
Publicado por: jokep en 15 de Enero de 2010, 14:57:30
gracias J1M, lo único que tuve que hacer con el ejemplo que me citaste es: convertirlo a proyecto VB .net 2008 (el mismo VS lo hace al abrirlo), y crear la función para VarPtr que usaba en el archivo VBMPUSBAPI.vb, pues en visual basic .net ya no existe

Public Function VarPtr(ByVal e As Object) As Integer
        Dim GC As GCHandle = GCHandle.Alloc(e, GCHandleType.Pinned)
        Dim GC2 As Integer = GC.AddrOfPinnedObject.ToInt32
        GC.Free()
        Return GC2
    End Function

Entonces, ya convertido el proyecto al VB 2008, y añadida la función, s´lo pegas la MPUSBAPI.dll en la carpeta donde está el programa y Listo!!!

espero que esto le pueda servir a alguien.

salu2
Título: Re: Proyecto PicUSB
Publicado por: jokep en 15 de Enero de 2010, 20:39:55
no es cierto!!!!!  he estado haciendo pruebas con el Visual Basic Express 2008 y no funciona ni siquiera el ejemplo de la pagina de hobby pic.
lo que hice fué lo expuesto anteriormente:
-convertí el proyecto a visual basic 2008
-añadí la función VarPtr (ver mi mensaje anterior) en VBMPUSBAPI.vb
-compilé y generé el proyecto.
-pegué MPUSBAPI.dll en el directorio donde se encuentra el ejecutable
-lo corrí

-------Nada marca error, simplemente no funciona ninguna nada, no se comunica el programa con el PIC

y no funciona como lo hacía en VB6. Alguien sabe la solución????

gracias
Título: Re: Proyecto PicUSB
Publicado por: campech en 20 de Enero de 2010, 11:15:32
Hola amigos del foro, de antemano he aprendido mucho de ustedes, gracias por todas sus experienciass que dejan en lo post, soy nuevo y espero aportarles cosas muy utiles.
Bueno paemos al problema, espero que alguien pueda ayudarme con esto:

He estado utilizando el bootloader de microchip con la tarjeta picdem fs usb, hasta la fecha he cargado mis programas de CCS v4.84, utilizando las directivas que ustedes tan amables publicaron en este foro, para no borrar el bootloader de microchip:

#BUILD(reset=0x800,interrupt=0x808)
#ORG 0x0000,0x07ff {}

Hasta la fecha me ha funcionado bien pero ayer decidi descargar la nueva versión de CCS: 1.104, compile un programa de prueba y no me marco ningun error pero al descargarlo a la tarjeta no hace nada. Este mismo programa al compilarlo fuciona perfectamente con la version 4.84. Alguna sugerencia o idea que tengas de porque pasa esto:

Muchas graciass a todos por su atencion.  :)
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 20 de Enero de 2010, 15:59:58
no he podido :5]!!!

no podría alguien poner un ejemplo simple de usar la mpusbapi.dll en VB .NET  ???

muchas gracias

mira unos ejemplos que subieron aquí:

http://www.microchip.com/forums/tm.aspx?m=334360

(forum de microchip)

Título: Re: Proyecto PicUSB
Publicado por: emilio0401 en 21 de Enero de 2010, 05:35:52
Mig, eso ya cambió...

Por un lado los chicos de Microchip actualizaron su driver/librería para que fuera compatible con Vista/Siete y versiones de 64bits.
Y por el otro, con respecto al driver que realizé basándome en el Winusb puedes descargarlo, ahora ya sin coste, de hobbypic.com

De todas formas emilio, tu quieres un driver para el CDC verdad?? Es que lo que he comentado ahí arriba, y lo que te decía el compañero migsantiago, es para la forma de control del usb basada en dll/driver.

un saludo.


Hola a todos!! Disculpadme por no haber podido contestar antes. Bueno en realidad contesté este martes, pero hoy he entrado de nuevo al foro y no está mi contestación por ningún lado :(
Bueno lo que venía a decir era que, lo primero de todo gracias por atender tan rápido mi consulta de hace ya unos días...

Si J1M, lo que busco es el driver CDC para virtualizar el USB en un COM con el compilador CCS en un 18F4550. El que ofrece CCS, me funciona perfectamente en Windows XP y Vista 32bits, pero en Vista 64 bits no se lo traga. En Vista 32 hay que hacer un pequeño truco para que acepte los drivers sin firma, pero el Vista 64 ni se inmuta...No funciona! :(

Bueno si sabeis alguien algo al respecto, os lo agradecería enormemente!! :)

Un saludo a todos y ánimo con vuestros proyectos!!
Título: Re: Proyecto PicUSB
Publicado por: J1M en 21 de Enero de 2010, 07:00:51
Hola Emilio,

Ojea este post:
http://www.todopic.com.ar/foros/index.php?topic=28448.msg241475#msg241475

Un saludo!
Título: Re: Proyecto PicUSB
Publicado por: vinnymoy en 21 de Enero de 2010, 20:00:32
vinnymoy, es raro el asunto, comprueba que no se haya fastidiado nada en la PCB o que el puerto ese USB esté mal...

jokep, te has pasado por hobbypic? hay un ejemplo para VB llamado:
"PicUSBStuff: Conecta tu PIC al PC por USB con el driver de Microchip y VC++, VB, Java, Delphi, Labview y Linux"

Simplemente sustituye la .dll por la nueva de microchip.

S2!



Verás amigo, conecto en una compu viejita que tengo y funciona al 100%, le desconecto y le conecto en la nueva y ni siquiera sale el mensaje de NO SE RECONOCE EL DISPOSITIVO.... Osea descartado el hardware, el programa del PIC y eso...

Podrías explicarme cómo utilizar las nuevas librerías que me descargué de la página 16 de este hilo? Dónde las grabo y eso... Hay que cambiar algo en el PICC? Explicame detalladamente para ver si yo estoy haciendo algo mal por favor....


Tengo windows 7 de 64 bits.....
Título: Re: Proyecto PicUSB
Publicado por: J1M en 22 de Enero de 2010, 13:14:42
vinnymoy, nunca lo has conectado antes a ese PC? pq parece el típico fallo de que la primera vez que lo enchufas, le dices que no te pregunte más por los drivers y a partir de ahí no te hace caso, comprueba en el administrador de dispositivos...

Con respecto a las librerías, me imagino te refieres a las de microchip, no hay nada nuevo que hacer, simplemente sustituyes una dll por otra y listo!
Título: Re: Proyecto PicUSB
Publicado por: MGLSOFT en 22 de Enero de 2010, 14:58:07
Con la opcion de Buscar nuevo Hardware del Panel de Control no se puede revertir una cosa asi??
Título: Re: Proyecto PicUSB
Publicado por: J1M en 22 de Enero de 2010, 15:50:26
Hay veces que si por lo que sea, se instala la clave en el registro, pero no lo que lo acompaña, el sistema se queda tonto perdido! Recuerdo que cuando andaba intentando meter el famoso icono en el administrador de dispositivos, muchas de mis pruebas terminaron tirando de regedit para eliminar la clave a mano, pero vamos, que para que se de el caso, tienes que estar trasteando. Si el compañero no ha modificado nada, no debería tener este problema, pero es una opción... ^^
Título: Re: Proyecto PicUSB
Publicado por: jokep en 22 de Enero de 2010, 22:42:54
q tal

oigan, tengo un problemota:

es que he estado haciendo unos cuantos ejemplos con el mpusbapi.dll de microchip, siguiendo los ejemplos de J1M, y en Proteus todo iba de maravilla.
Hasta que se me ocurre meterlo al Pic y !!!!!!!! no funciona. Windows me manda el siguiente error:

No se reconoce el dispositivo USB
Uno de los dispositivos vinculados a este equipo ha tenido un mal funcionamiento
y Windows no la ha reconocido. Haga clic en este mensaje para obtener asistencia
sobre como resolver este problema.

Alguien previamente tuvo el mismo problema (megadigit), pero usando CDC, y yo uso MPUSBAPI. luego le metí el programa de ejemplo de J1M y tampoco funcionó. Supongo que debe ser algo del Hardware. Pero lo curioso es que los ejemplos de CDC sí los corre en el mismo Pic en el mismo circuito (pero yo ocupo MPUSBAPI). ¿Alguien sabe cómo solucionarlo?
Título: Re: Proyecto PicUSB
Publicado por: Geo en 23 de Enero de 2010, 00:36:03
Los ejemplos que si corren, ¿son simulados?
Si la simulación ejecuta y al pasar al circuito no, lo más probable es un problema con tus conexiones. Algunos amigos se han enfrentado a cuestiones similares, todas debidas a alguna mala conexión, líneas invertidas o una mala soldadura o conexión. Checa esto:

- Conexión/conexión correcta del pin MCLR.
- Conexión correcta de líneas D- y D+ (comprueba que no las tengas invertidas).
- Configuración correcta del cristal (sobretodo la configuración PLL).
- Conexión del pin Vusb.
Título: Re: Proyecto PicUSB
Publicado por: nachogb85 en 23 de Enero de 2010, 09:24:52
Hola jokep, quizas al usar otros ejemplos no cambiaste la linea de #fuses, tienes que ajustar el PLL en funcion del cristal que estes usando para conseguir 4MHz para llegar a los 48MHz de USB, asi si tienes un cristal de 20MHz escribbes PLL5 ya que 20:5=4.

por ejemplo:

//ajusto el PLL4 para cristal de 16MHz
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL4,CPUDIV1,VREGEN
Título: Re: Proyecto PicUSB
Publicado por: ener en 23 de Enero de 2010, 11:54:56
Agradezco la publicación de este ejemplo que me permitió despegar y hacer casi todo lo que necesito.

Solamente un detalle que necesito y que no pude resolver, ni buscando por todo el foro:

Quisiera que en el programa de la PC saltara una interrupción cuando el PIC manda algún dato vía USB. ¿Es posible hacer esto? Eso evitaría que el programa de la PC tenga que revisar continuamente si el PIC le envió algún dato...

Título: Re: Proyecto PicUSB
Publicado por: jokep en 23 de Enero de 2010, 15:40:54
muchas gracias

el error estaba en que había descuidado los "fuses". Tenía un cristal de 20 MHz con un PLL3; gran error!!! (un simple descuido).
Ya lo corregí cambiandolo a PLL5 y todo de maravilla!!!

Salu2
Título: Re: Proyecto PicUSB
Publicado por: jokep en 24 de Enero de 2010, 20:00:22
oigan; una preguntota:

existe alguna función para el programa de la PC (en C#) que detecte si hay datos en el EndPoint??  (algo así como el usb_kbhit del PIC); o cómo puedo hacerle para que sólo si hay datos vaya y los lea y no vaya a lo tonto y no encuentre nada...

en realidad estoy buscando una manera de tener al pic y a la PC sincronizados, y no que el pic mande algo pero que la PC ya haya leído el buffer y no pueda encontrar nada...    tiene que ver el Time-out que viene dentro de las funciones de la MPUSBAPI???

salu2
Título: Re: Proyecto PicUSB
Publicado por: vinnymoy en 27 de Enero de 2010, 19:52:51
Hay veces que si por lo que sea, se instala la clave en el registro, pero no lo que lo acompaña, el sistema se queda tonto perdido! Recuerdo que cuando andaba intentando meter el famoso icono en el administrador de dispositivos, muchas de mis pruebas terminaron tirando de regedit para eliminar la clave a mano, pero vamos, que para que se de el caso, tienes que estar trasteando. Si el compañero no ha modificado nada, no debería tener este problema, pero es una opción... ^^


Amigo ya reviso y reviso y reviso y nada...... De ley es el windows o algo así..... Pongo que busque nuevo hardware y nada.

Probé con el picwinusb y la misma historia, ni se mosque la compu.....

Ahi sí muchachos ya no sé qué puede hacer, así que acepto todas las sugerencias que tengan....

Tengo windows 7 ultimate de 64 bits...
Título: Re: Proyecto PicUSB
Publicado por: emilio0401 en 05 de Febrero de 2010, 10:01:41
Hola Emilio,

Ojea este post:
http://www.todopic.com.ar/foros/index.php?topic=28448.msg241475#msg241475

Un saludo!

Muchas gracias J1M!! Le echaré un vistazo a ver!!

Un saludo,
Título: Re: Proyecto PicUSB
Publicado por: principepeyote2 en 22 de Febrero de 2010, 15:17:39
que tal a todos. primero, exelente post. tengo unas dudas con respecto al codigo en c del archivo picUSB.c

1. estoy usando un cristal de 8Mhz por lo que segun el datasheet del 2550 tengo que poner el divisor PLL entre 2. y los fuses me queda algo asi:
Código: [Seleccionar]
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,[b]PLL2[/b],CPUDIV1,VREGEN
el parametro MCU Clock Division  lo dejo igual ya que como tengo HSPLL con dejar el CPUDIV1 me debe generar los 48Mhz que ocupo para que funcione. mi duda en este punto es si estoy usando bien la configuracion.

2. utilizo mas el mplab para programar pics, por lo que no estoy muy familiarizado con PCHW Compiler el cual acabo de descargar y estoy utilizando la versión 4.016. por lo visto es mas facil que mplab. mi duda en este punto es que si para compilar el nuevo .hex con la configuracion para el cristal de 8Mhz, solo abro el archivo picUSB.c, y lo compilo con los cambios realizados; asi me deveria funcionar (si tengo todo bien conectado) y cuando lo compilo me genera unas advertencias:

a) Warning 203 "C:Program Files\PICC\drivers\pic18_usb.h"Line 436(1,1): Condition always TRUE. al revisar esta advertencia me envia al archivo del pic18_usb.h y es la linea donde ve si esta conectado if (usb_attached()) {, por lo visto siempre cree estar conectado.

b,c,d)Warning 216 "PicUSB.c" Line 138(0,1): Interrupts disabled during call to prevent re-entrancy: (usb_token_reset). lo que entiendo es que me desabilita la interrupcion mencionada para que no se cicle. y lo mismo para (usb_flush_out) y (usb_flush_in)

?sera por esto que cuando conecto el circuito al pc me aparece, en el administrador de dispositivos, como  "Dispositivo Desconocido", y si le doy actualizar el driver y trato de instalar el driver que trae el ejemplo, no me deja?

de antemano les agradesco su alluda..
Título: Re: Proyecto PicUSB
Publicado por: principepeyote2 en 22 de Febrero de 2010, 17:26:41
bueno con respecto al lo que escribi anteriormente ... ya funciono anoche estaba tan dormido que puse los cables del usb, invertidos (el d+ en el d- y viceversa), ya los cambie y funciono bien con el cristal de 8Mhz. bueno seguire experimentando, espero poder realizar algun proyecto interesante y se los comparto.

Título: Re: Proyecto PicUSB
Publicado por: Olaf en 28 de Febrero de 2010, 14:51:49
Hola! Lo primero agradecer a J1M este gran post y su magnifico ejemplo de uso del PIC-USB  :-/

El ejemplo me funciona perfectamente  :)  :mrgreen:

Ahora viene mi duda:

Uso el CCS c Compiler versión 4.084 y el Microsoft visual C# 2008 Express edition

Yo ahora declaro en el programa del PIC "int8 recibe[9];" para recibir 9 bytes en lugar de los 3 del ejemplo.

Uso esta instrucción para recibirlos.
usb_get_packet(1, recibe, 9); //cojemos el paquete de tamaño 9 bytes del EP1 y almacenamos en recibe



También modifico el programa del PC:
Código: [Seleccionar]
public void otro(uint primero, uint segundo, uint tercero, uint cuarto, uint quinto, uint sexto, uint septimo, uint octavo)
        {
            byte* send_buf = stackalloc byte[9];

            send_buf[0] = 0x02;
            send_buf[1] = (byte)primero;
            send_buf[2] = (byte)segundo;
            send_buf[3] = (byte)tercero;
            send_buf[4] = (byte)cuarto;
            send_buf[5] = (byte)quinto;
            send_buf[6] = (byte)sexto;
            send_buf[7] = (byte)septimo;
            send_buf[8] = (byte)octavo;

            SendPacket(send_buf, 9);

No soy capaz de recibir mas de 3 bytes, he mirado también el datasheet y tiene 1kbyte en el buffer USB. Osea que ese no es el problema.

Agradeceria toda ayuda muchas gracias de antemano  ;-) :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: Geo en 28 de Febrero de 2010, 15:27:37
¿Si declaraste correctamente el tamaño de los búfers para los endpoint? Ahí indicas el número máximo de bytes a recibir/enviar:

Código: C
  1. #define USB_EP1_TX_SIZE    3
  2. #define USB_EP1_RX_SIZE    3
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 28 de Febrero de 2010, 15:48:09
¿Si declaraste correctamente el tamaño de los búfers para los endpoint? Ahí indicas el número máximo de bytes a recibir/enviar:

Código: C
  1. #define USB_EP1_TX_SIZE    3
  2. #define USB_EP1_RX_SIZE    3

Correcto es eso!!!  :-/ muchísimas gracias  :)
Título: Re: Proyecto PicUSB
Publicado por: WOOD_girl en 08 de Marzo de 2010, 13:53:27
hola, me gustaria saber si es posible transmitir 2000 bytes, yo solo he podido enviar 100 bytes por medio del modo bulk... es esto posible'???
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 13 de Marzo de 2010, 04:27:29
Te refieres a paquetes? Pues lo maximo es 64 tanto para recibir o enviar. Ahora, si quieres enviar 2000 pues con un ciclo for puedes enviar hasta millones xD!


sAlu2.
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 16 de Marzo de 2010, 08:03:21
Hola de nuevo!

A ver si alguien me pudiera ayudar. Me ha pasado que la función usb_put_packet me devuelve un 0, que según la propia librería, solo devuelve un cero si el buffer de salida esta lleno de la vez anterior. Sin embargo del PC los recibo perfectamente todas las veces. Como podéis ver uso el mismo método que en el proyecto que nos ocupa, solo que envío 10 bytes en vez de 1, alquilen sabe porque puede estar pasando esto? El micro utilizado es el PIC18F2550.

Muchas gracias!  ;-)

Código: [Seleccionar]
/*******************************************************************************
/* usb_put_packet(endpoint,*ptr,len,toggle)
/*
/* Input: endpoint - endpoint to send packet to
/*        ptr - points to data to send
/*        len - amount of data to send
/*        toggle - whether to send data with a DATA0 pid, a DATA1 pid, or toggle from the last DATAx pid.
/*
[b]/* Output: TRUE if data was sent correctly, FALSE if it was not.  The only reason it will
/*         return FALSE is if because the TX buffer is still full from the last time you
/*         tried to send a packet.[/b]
/*
/* Summary: Sends one packet out the EP to the host.  Notice that there is a difference
/*          between a packet and a message.  If you wanted to send a 512 byte message you
/*          would accomplish this by sending 8 64-byte packets, followed by a 0 length packet.
/*          If the last (or only packet) being sent is less than the max packet size defined
/*          in your descriptor then you do not need to send a 0 length packet to identify
/*          an end of message.
/*
/*          usb_puts() (provided in usb.c) will send a multi-packet message correctly.
/*
/********************************************************************************/

Código: [Seleccionar]
//////////////////////////////////////////////////////////////////////////////
//                   Definiciones y equivalencias para el USB
/////////////////////////////////////////////////////////////////////////////
#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    10                //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    14                //size to allocate for the rx endpoint 1 buffer

Código: [Seleccionar]
// Encendemos led rojo               
   LED_ON(LEDR);

// Inicializamos el USB
   usb_init();                     
// Habilita periferico usb e interrupciones
   usb_task(); 
// Esperamos hasta que el PicUSB sea configurado por el host
   usb_wait_for_enumeration();     

 // Encendemos led verde y apagamos el rojo,
 // es indicador de que el USB comienza a funcionar
   LED_OFF(LEDR);
   LED_ON(LEDV1);                   
   
   while (TRUE)
   {
      if(usb_enumerated()) // Si el USB está configurado
      {
         if (usb_kbhit(1)) // Si el endpoint de salida contiene datos del host
         {
// Cojemos el paquete de tamaño 14 bytes del EP1 y almacenamos en recibeUSB
            usb_get_packet(1, recibeUSB, 14);

// Almacenamos datos y los enviamos a las mesas.
            if (modo == 0)
            {
               LED_OFF(LEDV2);
               LED_ON(LEDV3);
               LED_OFF(LEDV4);
               
               StatusEnvio=FALSE;
               ReEnvio    =TRUE;
               EnvioDatos(); // función que envía datos a través del modulo MRF24J40MA
             
               SPIreload();
            }

// Los datos recibidos via inalambrica son enviados al PC
            if (modo == 1)
            { 
               LED_OFF(LEDV2);
               LED_OFF(LEDV3);
               LED_ON(LEDV4);
               
// Enviamos el paquete de tamaño 10 bytes del EP1 al PC               
               uno=usb_put_packet(1, enviaUSB, 10, USB_DTS_TOGGLE);
               
               if (uno==0)
               { // Encendemos led verde2 para indicar que ha habido un fallo
               LED_ON(LEDV2);
               LED_OFF(LEDV3);
               LED_ON(LEDV4);
               }
               
// Se recarga el modulo MRF24J40MA para que vuelva a recibir datos.
               SPIreload();
               
            }
         }
      }
   }
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 16 de Marzo de 2010, 14:24:45
Veo que la salida de usb_put_packet la asignas a un led. Es altamente probable que no veas que el led está prendido porque sucede muy rápido. Métele un delay de 100ms y verás que sí prende.
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 16 de Marzo de 2010, 15:44:20
Gracias por tu contestación migsantiago, pero sigue sin funcionar :(

Creo que me he explicado muy, mal mea culpa  :oops: :oops: Espero dejarlo mas claro ahora.  :oops:

Del Pc al aparato llega todo bien y siempre. ejecutando un programa en C# igual al del ejemplo, pero para 14 bytes en ligar de 3

Del aparato al PC solo funciona bien la primera vez. La otra devuelve un 0 incluso cuando le aplico los 100ms. Lo mismo para este caso 10 bytes en vez de 1.

Código: [Seleccionar]
uno=usb_put_packet(1, enviaUSB, 10, USB_DTS_TOGGLE);
     
               delay_ms(100);
               
               if (uno==0)
               { // Encendemos led verde2 para indicar que ha habido un fallo
               LED_ON(LEDV2);
               LED_OFF(LEDV3);
               LED_ON(LEDV4);

Me da la sensacion de que necesita resetearlo o algo, por que el fallo se produce cuando el buffer tx esta lleno de la vez anterior...

Estoy buscando alguna instrucción que haga esto y me estoy leyendo todo el post en este tema, hasta ahora nada ha funcionado voy por la pagina 15  :P ya queda menos.

Muchas gracias  :)
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 16 de Marzo de 2010, 19:31:16
Ah entonces no has modificado el archivo usb_desc_scope.h.

También en ése hay que asignar tamaño de endpoints.
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 16 de Marzo de 2010, 21:07:24
Ah entonces no has modificado el archivo usb_desc_scope.h.

También en ése hay que asignar tamaño de endpoints.

Gracias por tu pronta respuesta! :)
Te comento el caso es que solo afecta al TX, el RX funciona perfectamente.... este es el código que tengo de esa librería, supongo que tendré que cambiar algo de esto. Si me pudieras decir el que, te lo agradeceria mucho!  :-/

Código: [Seleccionar]
   char const USB_CONFIG_DESC[] = {
   //config_descriptor for config index 1
         USB_DESC_CONFIG_LEN,     //length of descriptor size
         USB_DESC_CONFIG_TYPE,         //constant CONFIGURATION (0x02)
         USB_TOTAL_CONFIG_LEN,0,  //size of all data returned for this config
         1,      //number of interfaces this device supports
         0x01,                //identifier for this configuration.  (IF we had more than one configurations)
         0x00,                //index of string descriptor for this configuration
         0xC0,                //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 reserved and bit7=1
         0x32,                //maximum bus power required (maximum milliamperes/2)  (0x32 = 100mA)

   //interface descriptor 0 alt 0
         USB_DESC_INTERFACE_LEN,  //length of descriptor
         USB_DESC_INTERFACE_TYPE,      //constant INTERFACE (0x04)
         0x00,                //number defining this interface (IF we had more than one interface)
         0x00,                //alternate setting
         2,       //number of endpoints, not counting endpoint 0.
         0xFF,                //class code, FF = vendor defined
         0xFF,                //subclass code, FF = vendor
         0xFF,                //protocol code, FF = vendor
         0x00,                //index of string descriptor for interface

   //endpoint descriptor
         USB_DESC_ENDPOINT_LEN, //length of descriptor
         USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
         0x81,              //endpoint number and direction (0x81 = EP1 IN)
         0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
         USB_EP1_TX_SIZE,0x00,         //maximum packet size supported
         0x01,              //polling interval in ms. (for interrupt transfers ONLY)

   //endpoint descriptor
         USB_DESC_ENDPOINT_LEN, //length of descriptor
         USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
         0x01,              //endpoint number and direction (0x01 = EP1 OUT)
         0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
         USB_EP1_RX_SIZE,0x00,         //maximum packet size supported
         0x01,              //polling interval in ms. (for interrupt transfers ONLY)

  };
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 16 de Marzo de 2010, 22:13:42
Tu archivo de descriptores está correcto.

Habría que revisar cómo defines la variable enviaUSB en el programa del pic. También hay que revisar la librería que usas en C#.
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 17 de Marzo de 2010, 04:23:44
Bien gracias me alivia saber que a eso no hay que meterle mano :)

Seguiré investigando, ya comentare cual era el fallo.  :g)
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 18 de Marzo de 2010, 13:56:19
Mu bien ya funciona!! no se como, pero el fallo estaba en la aplicación, poniendo las mismas funciones que en el programa de J1M y simplemente modificando los valores de los arrays. Supongo que el PC con la otra aplicación que tengo por aquí, hecha con objetos (aunque a mi juicio hace exactamente lo mismo) no liberaba el buffer TX del PIC en su comunicación con este, por la razón que fuera, que no he conseguido localizar y el PIC mostraba que ya no podía mandar mas al PC. En fin lo importante es que funciona!!! Del programa del PIC que publique antes no he cambiado ni una coma.
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 23 de Marzo de 2010, 14:41:15
Hola de nuevo... retomo este asunto porque aunque conseguí hacerlo funcionar con el programa original ligeramente modificado, no lo puedo copipastear asi como asi en mi proyecto y por mas que lo miro no logro encontrar ni la diferencia ni el fallo...

El tema sigue siendo el mismo: con el mismo programa en el PIC18F2550 y el mismo driver instalado en el PC, podemos enviar cuantas veces queramos los datos del micro al PC y del PC al micro que llegan bien. Osea la única diferencia es la aplicación, pero esta provoca un fallo en el micro haciendo que esta función uno=usb_put_packet(1, enviaUSB, 10, USB_DTS_TOGGLE); devuelva 0 y se observe que no le llegan los datos al PC. Es el que expongo a continuación: (Esta en C# igual que el original)
Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices; // Clase para importar DLL

using PVOID = System.IntPtr;
using DWORD = System.UInt32;

namespace FFTM.BusinessLayer.USB
{
    unsafe public class USB
    {
        #region Variables
        void* myOutPipe;
        void* myInPipe;

        #endregion

        #region Constantes
        private static string vid_pid_norm = "vid_04d8&pid_0011";

        string out_pipe = "\\MCHP_EP1";
        string in_pipe = "\\MCHP_EP1";

        private const uint MESSAGE_OUT_LENGTH = 14;
        private const uint MESSAGE_IN_LENGTH  = 9;
        #endregion

        #region Properties
        #endregion

        #region Funciones importadas de la DLL: mpusbapi.dll
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBGetDLLVersion();
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBGetDeviceCount(string pVID_PID);
        [DllImport("mpusbapi.dll")]
        private static extern void* _MPUSBOpen(DWORD instance, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved);
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBRead(void* handle, void* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds);
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBWrite(void* handle, void* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds);
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBReadInt(void* handle, DWORD* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds);
        [DllImport("mpusbapi.dll")]
        private static extern bool _MPUSBClose(void* handle);
        #endregion

        #region Constructor
        public USB ()
        {

        }
        #endregion

        #region Methods
        #region Public
        public void OpenPipes()
        {
            DWORD selection = 0;

            myOutPipe = _MPUSBOpen(selection, vid_pid_norm, out_pipe, 0, 0);
            myInPipe = _MPUSBOpen(selection, vid_pid_norm, in_pipe, 1, 0);
        }

        public void ClosePipes()
        {
            _MPUSBClose(myOutPipe);
            _MPUSBClose(myInPipe);
        }

        /// <summary>
        /// Esta es la funcion que se usa para enviar los datos por usb al
        /// interface Zigbee
        /// </summary>
        /// <param name="SendData">Array to send</param>
        /// <param name="SendLength">length of the packet to send</param>
        public void SendPacket(USBOutMessage outMessage)
        {
            byte[] messageStream = getOutMessageArray(outMessage);

            fixed (byte* SendData = messageStream)
            {
                DWORD SendLength = MESSAGE_OUT_LENGTH;

                uint SendDelay = 1000;

                DWORD SentDataLength;

                OpenPipes();
                _MPUSBWrite(myOutPipe, (void*)SendData, SendLength, &SentDataLength, SendDelay);
                ClosePipes();
            }
        }
        // esta es la funcion que se usa para recibir los datos por usb al interface Zigbee
        public USBInMessage ReceivePacket()
{
            USBInMessage inMessage = null;

            fixed (byte* ReceiveData = new byte[MESSAGE_IN_LENGTH])
            {
                DWORD ReceiveLength = MESSAGE_IN_LENGTH;

                uint ReceiveDelay = 1000;

                DWORD ExpectedReceiveLength = ReceiveLength;

                OpenPipes();
                _MPUSBRead(myInPipe, (void*)ReceiveData, ExpectedReceiveLength, &ReceiveLength, ReceiveDelay);
                ClosePipes();

                inMessage = getInMessage(ReceiveData);
            }

            return inMessage;
        }

Este es el código que si que funciona, pero yo no soy capaz de ver la diferencia, por favor si a alguien le ha pasado algo parecido, comentemelo por favor muchas gracias!
Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices; // Clase para importar DLL

using PVOID = System.IntPtr;
using DWORD = System.UInt32;

namespace PicUSB
{
    unsafe public class PicUSBAPI
    {
        #region Definición de los Strings: EndPoint y VID_PID
        string vid_pid_norm = "vid_04d8&pid_0011";

        string out_pipe = "\\MCHP_EP1";
        string in_pipe = "\\MCHP_EP1";
        #endregion

        #region Funciones importadas de la DLL: mpusbapi.dll
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBGetDLLVersion();
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBGetDeviceCount(string pVID_PID);
        [DllImport("mpusbapi.dll")]
        private static extern void* _MPUSBOpen(DWORD instance, string pVID_PID, string pEP, DWORD dwDir, DWORD dwReserved);
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBRead(void* handle, void* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds);
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBWrite(void* handle, void* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds);
        [DllImport("mpusbapi.dll")]
        private static extern DWORD _MPUSBReadInt(void* handle, DWORD* pData, DWORD dwLen, DWORD* pLength, DWORD dwMilliseconds);
        [DllImport("mpusbapi.dll")]
        private static extern bool _MPUSBClose(void* handle);
        #endregion

        void* myOutPipe;
        void* myInPipe;

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new PicUSB());
        }

        public void OpenPipes()
        {
            DWORD selection = 0;

            myOutPipe = _MPUSBOpen(selection, vid_pid_norm, out_pipe, 0, 0);
            myInPipe = _MPUSBOpen(selection, vid_pid_norm, in_pipe, 1, 0);
        }

        public void ClosePipes()
        {
            _MPUSBClose(myOutPipe);
            _MPUSBClose(myInPipe);
        }

        private void SendPacket(byte* SendData, DWORD SendLength)
        {
            uint SendDelay = 1000;

            DWORD SentDataLength;

            OpenPipes();
            _MPUSBWrite(myOutPipe, (void*)SendData, SendLength, &SentDataLength, SendDelay);
            ClosePipes();
        }

        private void ReceivePacket(byte* ReceiveData, DWORD *ReceiveLength)
{
uint ReceiveDelay=1000;

DWORD ExpectedReceiveLength = *ReceiveLength;

OpenPipes();
            _MPUSBRead(myInPipe, (void*)ReceiveData, ExpectedReceiveLength, ReceiveLength, ReceiveDelay);
            ClosePipes();
        }


Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 23 de Marzo de 2010, 15:34:03
¿Esto no debería ser de 10?

Código: [Seleccionar]
        private const uint MESSAGE_IN_LENGTH  = 9;
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 24 de Marzo de 2010, 05:42:59
¿Esto no debería ser de 10?

Código: [Seleccionar]
        private const uint MESSAGE_IN_LENGTH  = 9;

Muchas gracias por tu rápida respuesta migsantiago, eso seguro que es un fallo, que joer que despiste pero lo he probado y sigue fallando... aunque es una buena linea de investigacion, seguire trabajando con ello, muchas gracias de nuevo  :)
Título: Re: Proyecto PicUSB
Publicado por: Geo en 25 de Marzo de 2010, 02:56:58
¿Qué son USBOutMessage y USBInMessage? ¿Qué devuelve getOutMessage?
Título: Re: Proyecto PicUSB
Publicado por: Olaf en 25 de Marzo de 2010, 08:46:01
¿Qué son USBOutMessage y USBInMessage? ¿Qué devuelve getOutMessage?

Son unos objetos para mostrarlos por pantalla, y bueno ya funciona... soy un zoquete!! obviamente hay que recibir los datos sino el buffer se queda lleno y eso lo ve el 2550 y avisa.... en fin  :5] conmigo mismo.
Título: Re: Proyecto PicUSB
Publicado por: WOOD_girl en 15 de Mayo de 2010, 17:56:25
HOLA amigos del foro, actualmente estoy tratando de enviar 700 bytes por USB en modo bulk, hice la simuulación y como se puede ven en las imagenes adjuntas, cuando envio el array por medio del proteus, llegan todos los datos, pero cuando escribo el programa en el pic18F2550 y lo pruebo en el hardware (con la misma aplicación hecha en labview), se pierden gran cantidad de datos asi como se observa en la figura 2. no se a que se deba esto, por que se pierden tantos datos, que esta demorando la llegada de los datos?, espero que alguien pueda ayudarme con ello...

me preguntaba si tiene algo que ver con el timeout que traen tanto la DLL, como la función usb_puts.
Agradezco mucho su colaboración y atencion, gracias
Título: Re: Proyecto PicUSB
Publicado por: Medusa en 17 de Mayo de 2010, 11:16:20
Hola WOOD_girl,  :mrgreen: podrias decirme que herramienta estas usando  en tu aplicacion para verificar la cantidad de datos recibidos a nivel de hardware??
Título: Re: Proyecto PicUSB
Publicado por: WOOD_girl en 17 de Mayo de 2010, 11:53:44
hola medusa, en realidad lo que uso es un sniffer que permite observar la información que circula por los buses USB del PC. se llama SNOOPYPRO, referenciado por PalitroqueZ  en su post del 18f4550. :g)
Título: Re: Proyecto PicUSB
Publicado por: Medusa en 17 de Mayo de 2010, 12:39:58
Gracias..
Título: Re: Proyecto PicUSB
Publicado por: MAXI en 16 de Junio de 2010, 12:42:32
Hola J1m!!!
Pude hacer andar la aplicación en XP 32 sin ningun problema, Podra caminar en XP DE 64?
Título: Re: Proyecto PicUSB
Publicado por: Gonzalo_BlackHawk en 03 de Julio de 2010, 17:07:54
Hola J1m!!!
Pude hacer andar la aplicación en XP 32 sin ningun problema, Podra caminar en XP DE 64?

Yo he hecho andar la mpusbapi.dll 1.1 (la última versión) en XP x86, en Vista x86 y en W7x86  pero no consigo controlar la libreria en 64 bits, me tira el bendito error 193 de "No es una aplicación WIN32 válida". Estoy trabajando con Vb.net 2008. La clase que uso para comunicarme con el PIC (y que es la misma que me ha funcionado en los SO de 32 bits) es la siguiente. De paso estuve leyendo que alguien no podia hacer el transpaso de VB6 a Vb.NET, Utilice el marshal para sacar del juego al famoso VarPtr y anda genial, tal vez le sea de utilidad.

Código: [Seleccionar]
Imports System.Runtime.InteropServices.Marshal  'Importa el espacio de nombres que permite interactuar con código no administrado.

Public Class Cls_USB
    'Convenciones de llamada a la librería mpusbapi.dll en C:
    'DWORD  _MPUSBGetDLLVersion(void)
    'DWORD  _MPUSBGetDeviceCount(PCHAR pVID_PID)
    'HANDLE _MPUSBOpen(/*Input */ DWORD instance, /* Input */ PCHAR pVID_PID, /* Input */ PCHAR pEP, /*Input*/ DWORD dwDir, /*Input*/ DWORD dwReserved);
    'DWORD  _MPUSBRead(/*Input*/ HANDLE handle, /*Output*/ PVOID pData, /* Input */DWORD dwLen, /* Output */PDWORD pLength, /*Input*/ DWORD dwMilliseconds);
    'DWORD  _MPUSBWrite(/*Input*/ HANDLE handle, /*Input*/ PVOID pData, /*Input*/ DWORD dwLen, /*Output*/ PDWORD pLength, /*Input*/ DWORD dwMilliseconds);
    'DWORD  _MPUSBReadInt(/*Input*/ HANDLE handle, /*Output*/ PVOID pData, /* Input */DWORD dwLen, /* Output */PDWORD pLength, /*Input*/ DWORD dwMilliseconds);

    'Funciones API equivalentes para llamar desde Visual Basic.NET.
    Private Declare Function MPUSBGetDLLVersion Lib "mpusbapi.dll" Alias "_MPUSBGetDLLVersion" () As Integer
    Private Declare Function MPUSBGetDeviceCount Lib "mpusbapi.dll" Alias "_MPUSBGetDeviceCount" (ByVal pVID_PID As String) As Integer
    Private Declare Function MPUSBOpen Lib "mpusbapi.dll" Alias "_MPUSBOpen" (ByVal instance As Integer, ByVal pVID_PID As String, ByVal pEP As String, ByVal dwDir As Integer, ByVal dwReserved As Integer) As Integer
    Private Declare Function MPUSBClose Lib "mpusbapi.dll" Alias "_MPUSBClose" (ByVal handle As Integer) As Integer
    Private Declare Function MPUSBRead Lib "mpusbapi.dll" Alias "_MPUSBRead" (ByVal handle As Integer, ByVal pData As Integer, ByVal dwLen As Integer, ByRef pLength As Integer, ByVal dwMilliseconds As Integer) As Integer
    Private Declare Function MPUSBWrite Lib "mpusbapi.dll" Alias "_MPUSBWrite" (ByVal handle As Integer, ByVal pData As Integer, ByVal dwLen As Integer, ByRef pLength As Integer, ByVal dwMilliseconds As Integer) As Integer
    Private Declare Function MPUSBReadInt Lib "mpusbapi.dll" Alias "_MPUSBReadInt" (ByVal handle As Integer, ByRef pData() As Byte, ByVal dwLen As Integer, ByRef pLength As Integer, ByVal dwMilliseconds As Integer) As Integer
    'Funciones API externas a mpusbapi.dll.
    Private Declare Function GetLastError Lib "kernel32" () As Integer

    'Constantes de la API.
    Private Const VALOR_INVALIDO_HANDLE As Short = -1
    Private Const ERROR_HANDLE_INVALIDO As Short = 6
    'Constantes de conectividad con el PIC.
    Private Const EP_SALIDA As String = "\MCHP_EP1"        'Endpoint de salida de datos.
    Private Const EP_ENTRADA As String = "\MCHP_EP1"       'Endpoint de entrada de datos.
    Private Const USB_FALLA As Short = 0
    Private Const USB_EXITO As Short = 1
    Private Const USB_TRANSMITIR As Short = 0
    Private Const USB_RECIBIR As Short = 1

    'Variables de la clase.
    Private int_EPRecepcion As Integer          'Endpoint de entrada de datos.
    Private int_EPTransmision As Integer        'Endpoint de salida de datos.
    Private str_VID As String                   'Cadena de 4 caracteres que contiene el Vendor ID.
    Private str_PID As String                   'Cadena de 4 caracteres que contiene el Periferic ID.

    'Eventos de la clase.
    Public Event Falla(ByVal Num_error As Integer, ByVal Descripcion_error As String, ByVal Procedimiento_error As String)

    'Propiedad de lectura y escritura asociada al Vendor ID del dispositivo USB.
    Public Property VID() As String
        Get
            Return str_VID
        End Get
        Set(ByVal Valor As String)
            str_VID = Valor
        End Set
    End Property

    'Propiedad de lectura y escritura asociada al Product ID del dispositivo USB.
    Public Property PID() As String
        Get
            Return str_PID
        End Get
        Set(ByVal Valor As String)
            str_PID = Valor
        End Set
    End Property

    Private Sub Initialize()
        'Define los valores iniciales para los Endpoints.
        int_EPRecepcion = VALOR_INVALIDO_HANDLE
        int_EPTransmision = VALOR_INVALIDO_HANDLE
    End Sub

    Public Function Conectar() As Boolean
        Dim int_NumDispositivos As Integer      'Cantidad de dispositivos con el mismo PID y VID que estan conectados.
        Dim str_VID_PID As String               'Cadena de identificación del dispositivo.

        On Error GoTo TERMINAR

        'Todos los Endpoints adquieren su valor inicial.
        int_EPRecepcion = VALOR_INVALIDO_HANDLE
        int_EPTransmision = VALOR_INVALIDO_HANDLE

        'Arma la cadena de identificación utilizando el PID y el VID.
        str_VID_PID = "vid_" & LCase(str_VID) & "&pid_" & LCase(str_PID)
        'Cuenta cuandos dispositivos USB con el VID y PID requeridos hay conectados.
        int_NumDispositivos = MPUSBGetDeviceCount(str_VID_PID)

        'Si se detectó al menos un dispositivo USB conectado que satisfaga el VID y el PID
        'se abre el puerto USB para la recepción y transmisión de datos.
        If int_NumDispositivos > 0 Then
            int_EPTransmision = MPUSBOpen(0, str_VID_PID, EP_SALIDA, USB_TRANSMITIR, 0)
            int_EPRecepcion = MPUSBOpen(0, str_VID_PID, EP_ENTRADA, USB_RECIBIR, 0)

            'Si no se puede abrir alguno de los Endpoints entonces se muestra una ventana que informa al usuario de lo sucedido.
            If int_EPTransmision = VALOR_INVALIDO_HANDLE Or int_EPRecepcion = VALOR_INVALIDO_HANDLE Then
TERMINAR:
                int_EPTransmision = VALOR_INVALIDO_HANDLE
                int_EPRecepcion = VALOR_INVALIDO_HANDLE

                'Dispara el evento que indica que se produzco un error al tratar de iniciar la comunicación USB.
                RaiseEvent Falla(GetLastError(), "Error al tratar de abrir los Endpoints. EP de salida = " & CStr(int_EPTransmision) & ". EP de entrada = " & CStr(int_EPRecepcion), "Conectar")
            Else
                'Si se pudo abrir el puerto correctamente entonces la función termina retornando el valor TRUE.
                Return True
                Exit Function
            End If
        Else
            'Si no se detecta ningun dispositivo conectado se dispara el evento.
            RaiseEvent Falla(GetLastError(), "No hay ningún dispositivo USB conectado al puerto.", "Conectar")
        End If

        'Si ha ocurrido un error entonces la función retorna el valor False.
        Return False
    End Function

    'Procedimiento para cerrar el periférico USB.
    Public Sub Desconectar()
        On Error GoTo TERMINAR

        'Comprueba si los Endpoints estan abiertos y los cierra en tal caso.
        If int_EPTransmision <> VALOR_INVALIDO_HANDLE Then
            MPUSBClose(int_EPTransmision)
            int_EPTransmision = VALOR_INVALIDO_HANDLE
        End If

        If int_EPRecepcion <> VALOR_INVALIDO_HANDLE Then
            MPUSBClose(int_EPRecepcion)
            int_EPRecepcion = VALOR_INVALIDO_HANDLE
        End If
TERMINAR:
    End Sub

    'Función que envia un cantidad de bytes espefica a traves del puerto USB. Los parámetros son:
    '
    'Datos_Envio:       Matriz de bytes que contienen los datos a enviar.
    'Longitud_Envio:    Longitud en bytes de los datos a enviar.
    'Tiempo_Envio:      Tiempo máximo permitido para el envío en milisegundos.
    Public Function Enviar(ByRef Datos_envio() As Byte, ByVal Longitud_envio As Integer, ByVal Tiempo_envio As Integer) As Boolean
        Dim int_LongDatosEnv As Integer

        'Solo probara de enviar los datos si los Endpoints han sido abiertos correctamente.
        'Si alguno de los Endpoints falla entonces la función retorna el valor False.
        If (int_EPTransmision <> VALOR_INVALIDO_HANDLE And int_EPRecepcion <> VALOR_INVALIDO_HANDLE) Then
            'Llama a la función API que permite enviar datos a traves del puerto USB.
            'Si la función responde que ha podido enviar los datos satisfactoriamente entonces la función retorna el valor True,
            'de lo contrario se verifica el error y la función retorna el valor False.
            If (MPUSBWrite(int_EPTransmision, Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(Datos_envio, 0).ToInt32(), Longitud_envio, int_LongDatosEnv, Tiempo_envio) = USB_EXITO) Then
                Return True
                Exit Function
            Else
                'Dispara el evento que informa sobre una falla en la comunicación USB.
                RaiseEvent Falla(GetLastError(), "Error al tratar de verificar el Handle.", "Enviar")
                'La causa más habitual de este error es que el circuito esté desconectado, por lo tanto cierra el puerto.
                Me.Desconectar()
            End If
        End If
        Return False
    End Function

    'Función que envia un pedido al dispositivo conectado para que le envie datos a traves del puerto USB. Los parámetros son:
    '
    'Datos_Pedido:          Matriz de bytes que contiene el pedido de respuesta a enviar.
    'Longitud_Pedido:       Longitud en bytes del pedido de respuesta.
    'Tiempo_Envio:          Tiempo máximo permitido para el envío del pedido en milisegundos.
    'Datos_Recepcion:       Matriz de bytes que almacena los datos recibidos.
    'Longitud_Recepcion:    Longitud en bytes de los datos a recibir.
    'Tiempo_Recepcion:      Tiempo máximo permitido para la recepcion de los datos en milisegundos.
    Public Function Recibir(ByRef Datos_Pedido() As Byte, ByVal Longitud_Pedido As Integer, ByRef Datos_Recepcion() As Byte, ByRef Longitud_Recepcion As Integer, ByVal Tiempo_Envio As Integer, ByVal Tiempo_Recepcion As Integer) As Boolean
        Dim int_LongitudDatosEnv As Integer
        Dim int_LongitudEsperada As Integer

        'Se espera recibir la misma cantidad de datos que los que se piden.
        int_LongitudEsperada = Longitud_Recepcion

        'Solo probara de enviar los datos si los Endpoints han sido abiertos correctamente.
        'Si alguno de los Endpoints falla entonces la función retorna el valor False.
        If (int_EPTransmision <> VALOR_INVALIDO_HANDLE And int_EPRecepcion <> VALOR_INVALIDO_HANDLE) Then
            'Llama a la función API que permite enviar el pedido de datos a traves del puerto USB.
            'Si se produce un error en el envio del pedido se dispara el evento Falla.
            If (MPUSBWrite(int_EPTransmision, Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(Datos_Pedido, 0).ToInt32(), Longitud_Pedido, int_LongitudDatosEnv, Tiempo_Envio) = USB_EXITO) Then
                'Si la función responde que ha podido enviar el pedido satisfactoriamente entonces se espera los datos desde el dispositivo externo.
                'Si se produce un error mientras se reciben los datos se dispara el evento Falla.
                If (MPUSBRead(int_EPRecepcion, Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(Datos_Recepcion, 0).ToInt32(), int_LongitudEsperada, Longitud_Recepcion, Tiempo_Recepcion) = USB_EXITO) Then
                    'Si la función responde que ha podido recibir los datos satisfactoriamente entonces verifica si la longitud de la información recibida
                    'es igual a la esperada. Si es menor se han perdido datos en la transmisión y la función retorna el valor False.
                    'De lo contrario, la función retorna el valor True indicando que todo se ha desarrollado correctamente.
                    If (Longitud_Recepcion = int_LongitudEsperada) Then
                        Return True
                        Exit Function
                    ElseIf (Longitud_Recepcion < int_LongitudEsperada) Then
                        'Dispara el evento que informa sobre una falla en la comunicación USB.
                        RaiseEvent Falla(GetLastError(), "Pérdida de datos desde el dispositivo.", "Recibir")
                        Return False
                        Exit Function
                    End If
                Else
                    'Dispara el evento que informa sobre una falla en la comunicación USB.
                    RaiseEvent Falla(GetLastError(), "Error al tratar de verificar el Handle.", "Recibir")
                    'La causa más habitual de este error es que el circuito esté desconectado, por lo tanto cierra el puerto.
                    Me.Desconectar()
                End If
            Else
                'Dispara el evento que informa sobre una falla en la comunicación USB.
                RaiseEvent Falla(GetLastError(), "Error al tratar de verificar el Handle.", "Recibir")
                'La causa más habitual de este error es que el circuito esté desconectado, por lo tanto cierra el puerto.
                Me.Desconectar()
            End If
        End If
        'La función retorna el valor FALSE si se ha producido algun error durante la transmisión o recepción.
        Return False
    End Function
End Class

No hace falta revisar mucho el código, el error salta cuando intenta ejecutar la línea "int_NumDispositivos = MPUSBGetDeviceCount(str_VID_PID)" de la funcion CONECTAR() como si el programa fallaria al cargar la libreria. Repito, la clase anda barbaro para SO de 32 bits, pero no se deja andar en 64 bits... inclusive aunque coloque el ejecutable en modo compatibilidad de XP me tira el bendito error 193.

Alguien la ha hecho andar a 64 bits??!? De todas formas lo voy a resolver, como sea  :mrgreen:, ya me he encariñado con los x64... :mrgreen:

Saludos
Título: Re: Proyecto PicUSB
Publicado por: Gonzalo_BlackHawk en 04 de Julio de 2010, 15:03:12
He detectado que en realidad el error 193 proviene del resultado de un error del tipo System.BadImageFormatException que me tira al acceder las funciones de la API, pero bueno, no cambia la cuestión, pues sigue siendo un problema de acceso a la DLL.

Al principio pense que era una cuestion de compatibilidad entre la librería de 32 bits que se estaria intentanto cargar bajo x64, y por eso coloque la DLL en la carpeta SysWOW64, que corresponde al emulador de 32 bits de W7, pero el error sigue apareciendo. Tambien probe de colocar el ejecutable en la carpeta "ProgramFiles (X86)" pero no hay forma de que la libreria se cargue correctamente.

Luego lei en algun que otro post del foro de Microchip que el error se pudiera estar dando por el hecho de que VB.NET invoca las funciones con stdcall en forma predeterminada, mientras que MPUSBAPI.dll es una libreria creada para usar con cdecl (por cuestiones de velocidad). Reescribi el código quitando las instrucciones Declare de Vb.net y utilizando el constructor DLLimport (que permite definir el tipo de convencion de llamada, entre otras cosas) pero aun llamando a la libreria con cdecl la bendita excepcion sigue apareciendo.

No encontre respuesta con el bendito Google, pero lo que si es claro es que muchos han tenido el mismo problema y no solo en VB.net sino tambien en otros lenguajes. Algunos dicen que es necesario recompilar la libreria con stdcall para poder utilizarla en VB.net, pero yo tengo mis dudas, para mi hay algo que se me esta escapando. Lo que si voy a ver si pruebo es de insertar directamente el código de la libreria dentro de mi programa y asi me evito todo este lio de llamar a la DLL.

Alguien ha hecho funcionar la MPUSBAPI.DLL bajo algun sistema operativo de 64 bits??? No importa que lenguaje haya utilizado, si alguien la hizo andar, eso me va a ser de mucha ayuda...

Saludos!!!
Título: Re: Proyecto PicUSB
Publicado por: Gonzalo_BlackHawk en 05 de Julio de 2010, 06:26:23
Alguien ha hecho funcionar la MPUSBAPI.DLL bajo algun sistema operativo de 64 bits??? No importa que lenguaje haya utilizado, si alguien la hizo andar, eso me va a ser de mucha ayuda...

Yo les voy a decir quien ha hecho funcionar la MPUSBAPI.DLL bajo algun sistema operativo de 64 bits!!! YOOOOOOOOOOO!!!!  :D :D :D :D

He dado con la solución... Definitivamente era un problema de que el programa estaba intentando hacer funcionar algo de 32 bits compilandolo como si fuera de 64. Aparentemente no es suficiente colocar la libreria en la carpeta del emulador WOW64 o el programa en la carpeta de programa de 32 bits. Hay que indicarle explicitamente al compilador que el programa se va a ejecutar en x86. Para ello hay que seguir los siguientes pasos:

1) Una vez en el IDE de vb.net con nuestro proyecto cargado vamos al menu "Proyecto" y luego clickeamos en el submenu "Propiedades de .."
2) En la ventana que se abre elegimos de las pestañas sobre el margen izquierdo aquella que indica la palabra "Compilar".
3) Dentro de la ventana compilar hay un botón en la parte inferior que dice "Opciones de compilación avanzadas", le damos click en él.
4) Dentro de esta ventana hay una caja de selección que dice "CPU de destino" y que generalmente tiene el valor "AnyCPU". Cambiar a "x86" para que nuestro programa se ejecute siempre en modo 32 bits.

Y bueno, eso es todo, es realmente una pavada, nada de descomprimir la libreria, nada de tener que ejecutar el dll en la carpeta del emulador, nada de stdcall o cdecl... Con el código que postee anteriormente y esa opción ya estamos encaminados a que nuestro USB funcione en Windows 7 64 bits.

Bueno, espero que al menos a alguien le haya servido mi incordio.

Saludos!!
Título: Re: Proyecto PicUSB
Publicado por: mustafa23 en 09 de Julio de 2010, 17:32:01
Hola, recientemente he empezado a programar en pics i tal, y desde el principio me ha parecido interesante este proyecto. He montado en la protoboard el circuito con el pic 18f2550 y he metido en éste el codigo que venía en los archivos. Pero no funciona, parece que lo he hecho bién pues puedo leer del pic y los datos son correctos pero cuando conecto el circuito al pc nada de nada, ni siquiera se enciende el led que indica que no están instalados los drivers. El voltaje le llega al pic correctamente así que nose si es problema de las configuraciones de éste al grabarlo o que. Os adjunto la imagen del programa donde se ven las opciones con las que grabo el pic, a ver si me podés ayudar:

(http://www.imaxenes.com/mini/problema1vn58ko.jpg) (http://www.imaxenes.com/imagen/problema1vn58ko.jpg.html)

Espero que alguien tenga alguna idea de porque no lo consigo hacer funcionar. Gracias
Título: Re: Proyecto PicUSB
Publicado por: Delko.arthuro en 12 de Julio de 2010, 02:46:40
 :( :( guaaa no me funca...  bueno recie estoy empezando  en este mundo de los PICusb y bueno descargue el programa de JIM por cierto felicitarle a JIM por todos los conocimientos que comparte  y gracias a los maestros como el vamos aprendiendo mucho .. :P   y bueno el ejemplo funciona chevere  en proteus  descargue el "picusb"; ya pero kise hacerlo modificarlo algunas cosas :P...y como todos supongo haciendo un copy/paste para despues hacerlo a mi modo..:P hixe la misma aplicacion de JIM  y  pero  cuando presiono cualquier boton sale  abajo este mensaje....
"Excepción del tipo 'System.FormatException' en mscorlib.dll" tb me sale el cuadro de
"Una llamada a la función PInvoke 'UnoPIC!UnoPIC.Program::_MPUSBOpen' impidió
 la correspondencia de la pila. Es posible que la razón sea que la firma PInvoke administrada
no coincida con la firma de destino no administrada. Compruebe que la convención y los parámetros
de llamada de la firma PInvoke coinciden con la firma no administrada de destino."

 pero eso sale en estas lineas
            myOutPipe = _MPUSBOpen(selection, vid_pid_norm, out_pipe, 0, 0);
                                  myInPipe = _MPUSBOpen(selection, vid_pid_norm, in_pipe, 1, 0);
 alguien me podria explicar lo que pasa y como puedo solucionarlo  :( :( :( :(.... por cierto tengo el
 WS7 32b ,VisualEstudio 2010 ...
Título: Re: Proyecto PicUSB
Publicado por: Gonzalo_BlackHawk en 12 de Julio de 2010, 05:34:14
Por favor Delko, coloca todo el código fuente de VS relacionado con el USB asi podemos analizarlo.
Título: Re: Proyecto PicUSB
Publicado por: Delko.arthuro en 12 de Julio de 2010, 16:25:18
Gonzalo_BlackHawk bueno la verdad si ke me esta dando un dolor de cabeza jaja pero bueno  ya pongo el codigo y no kizas estoy haceidno mal todo pero si me pasas el dato para hacerlo como lo hiciste tu para ver ke estyo haciendo mal ....:P

bueno ahi esta la carpeta
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 12 de Julio de 2010, 21:54:51
ESTOY SIGIENDO TODO EL HILO DEL PROYECTO PICUSB

ESTOY USANDO UN PIC 18F4550 LE HE PUESTO UN XT DE 4MHZ Y DE 20MHZ
  CCS 4.093 Y PROTEUS 7.7 SP2

MIS AVANCES SON QUE PUEDO SIMULAR MUY BIEN TODO DESDE PROTEUS Y EL .EXE QUE BRINDA J1M

PERO TENGO EL MISMO PROBLEMA QUE TENIA "TRINO"
(pagina 14) QUE AL CONECTAR EL HARWARE POR PRIMERA VES ME INFORMO WINDOWS QUE MI HARWARE ESTABA INSTALADO Y LISTO PARA USARSE
PERO NO NO RECONOCE

Y DE NUEVO LO CONECTO Y SIMPLEMENTE ME APARESE EL GLOBITO AMARILLO INDICANDO QUE NO RECONCE EL HARVARE

Y LA PREGUNTA ES DIRIGIDA A TRINO 
(O A ALGUIEN QUE ME PUEDA AYUDAR)

QUE PROBLEMA TENIAS???

COMO RESOLVISTE TU PROBLEMA??
Título: Re: Proyecto PicUSB
Publicado por: mustafa23 en 14 de Julio de 2010, 13:55:11
¿Nadie tiene ninguna idea de por que mi circuito no funciona? He hecho el circuito en una protoboard y no funciona, he expuesto mi problema unos mensajes más arriba, pero resumiendo no funciona el circuito, ni siquiera enciende el led al conectar el cable usb al pc. He puesto el el mensaje anterior con que opciones grabo el código del proyecto PicUsb para que alguien me indique si ve algún posible error. ¿Puede influir en que no vaya el circuito que el condensador que he conectado con Vusb del pic 18f2550 sea de 47uf y a 16V (y no a 25 como se indica en el esquema)? NECESITO AYUDA, PUESTO QUE ESTOY BLOQUEADO Y NO CONSIGO AVANZAR.
Título: Re: Proyecto PicUSB
Publicado por: Suky en 14 de Julio de 2010, 15:01:58
Revisar cristal y capacitores, su correcta conexión. La resistencia entre el pin MCLR del PIC y Vdd (+5V), la correcta colocación de los leds (tienen polaridad), ect.

Saludos!
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 14 de Julio de 2010, 16:48:24
suky
creo que esa respuesta es para mustafa23 y para mi (bextixtox) por mi cuenta ya supere mi problema
en mi cazo mi problema era el cristal de cuarzo que lo tenia de 4MHz y pasaba por alto que devia de ser de 12MHZ. lo reemplase y me funciona casi correctamente solo tiene algunos problemas

tengo 4 pc distintas y estos son mis problemas

la primera pc instale correctamente el driver y lo puedo ejecutar todo el proyecto correctamente

la segunda pc realize los mismos procedimientos que en la primera, instala todo bien pero al terminar me manda un mensaje HUBO UN PROBLEMA AL INSTALAR EL HARWARE PICUSB ESTE DISPOSITIVO NO PUEDE INICIAL (CODIGO 10)

la segunda y tercera pc al conectar el pic no lo reconoce me boy al ADMINISTRADOR DE DISPOSIITIVOS
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 14 de Julio de 2010, 17:02:11
 y desde hay le intento instalar el driver y me sale una ventana informandome que no puede encontrar el driver


quien me puede hayudar en alguno de estos casos???
alguien a tenido estos tipos de problemas???

aparentemente ya son problemas de software


mustafa23

cooinsido con suky en cuanto al pin 1 MCLR conectado atraves de una resistencia a 5 volt.
y por otro lado el cristal de cuarzo asegurate que sea de 12 MHz
Título: Re: Proyecto PicUSB
Publicado por: Suky en 14 de Julio de 2010, 17:57:14
El tema del cristal se puede solucionar modificando los fuses del microcontrolador. En el firmware o en el software que se utiliza para programarlo.

BEXTIXTOX, todas las maquinas tienen el mismo sistema operativo?

Saludos!
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 15 de Julio de 2010, 00:46:09
me paso algo extraño
en la pc que me da el error 10 estuve insistiendo actualizando, Re-instalando, instalando automaticamente y manual mente el driver
y finalmente LO INSTALE Y CORRIO BIEN resetee el pic y al conectarse de nuevo
fue como si no ubiera hecho nada el mismo error ( codigo 10).

realize los mismos pasos actualizar, instalar, desinstalar .... etc etc.. y de nuevo lo logre instalar trabajo bien SIN RESETEAR al resetear de nuevo el pic  ME LANZO (CODIGO 10) :x :x :x :x :x

en resumen tengo que insistir mucho para lorgar instalarlo pero cuando logre intalarlo al RESETEAR  me lanzara el CODIGO 10

en cuanto a los sistemas operativos

la del codigo 10 es  XP VER. 2002 SP3

la que trabaja bien el proyecto es XP VER. 2002 SP2

las ultimas 2 XP VER. 2002 SP2

EN ESTAS 2 ULTIMAS ES LO MAS GRAVE POR QUE EN ESTAS NO RECONOSE NADA EL PIC SOLO DICE "DISPOSITIVO DESCONOSIDO" Y NO ME DEJA INSTALAR LOS DRIVER


BUSCANDO INFORMACION EN GOOGLE ENCONTRE ESTOS HILOS

http://support.microsoft.com/kb/310123
http://support.microsoft.com/kb/943104/
http://www.hardcore-modding.com/ftopic-28352-60.html&sid=07cd6dae6318a4530b458e80ea3f4d3a

Título: Re: Proyecto PicUSB
Publicado por: mustafa23 en 15 de Julio de 2010, 04:48:27
gracias por contestar, pero todo está bien montado, los condensadores, las resistencias, los leds y el cristal es de 12 mhz, pero no funciona. La única duda que tenia en cuanto al montaje es sobre el condensador que va conectado con vusb que no tenia uno de 47uf a 25V y he colocado uno de 47uf a 16V. ¿Puede deberse a ésto el problema? Os pongo otra vez la imagen donde aparecen las opciones con las que grabo el pic para ver si detectáis algo mal:

(http://www.imaxenes.com/mini/problema1vn58ko.jpg) (http://www.imaxenes.com/imagen/problema1vn58ko.jpg.html)
Título: Re: Proyecto PicUSB
Publicado por: Suky en 15 de Julio de 2010, 11:50:56
La única duda que tenia en cuanto al montaje es sobre el condensador que va conectado con vusb que no tenia uno de 47uf a 25V y he colocado uno de 47uf a 16V. ¿Puede deberse a ésto el problema?

Eso no es el problema, la tensión es la máxima que soporta el capacitor... Respecto a la configuración de fuses, deberías dejar las que por defecto se configuran en el firmware. Prueba agregarle código como para ver titilando un led, eso ayuda a saber si el micro corre normalmente y detectar otro problema.


Saludos!
Título: Re: Proyecto PicUSB
Publicado por: mustafa23 en 15 de Julio de 2010, 14:45:07
Suky la configuración que aparece en la imagen es la que se activan al cargar el archivo hexadecimal del PicUsb, pero lo grabo y no funciona. Se que se está grabando el pic, puesto que despues puedo leer de él, pero no funciona. Debe de haber algun fuse que no se activa o algo por el estilo, sino no me lo explico que no funcione.
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 16 de Julio de 2010, 15:59:21
LISTO !!!!!!!

ya di solucion a mi problema
en mi caso yo ise lo siguiente

1.- asegurarse del capasitor de 47uF a VUSB

2.- poner un capasitor de 1uf a en seguida del regulador 7805

3.- blindar el cable usb

4.- poner la tarjeta lo mas lejos posible de aparatos ruidosos (en mi caso un regulador de corriente)


espero esto les de solucion a algunos y como en mi caso.
ya estaba desesperado y confundido con tanta informacion sobre USB que me confundia
pero me di unos dias de descanso y carge pila y listo di solucion a mi problema

y claro agadesco a varios foreros que me atendieron....


saludos...
Título: Re: Proyecto PicUSB
Publicado por: mustafa23 en 19 de Julio de 2010, 15:31:36
Estoy desesperado ya!! sigue sin funcionar y no encuentro el problema... :?
Por favor, que alguien me diga si estas configuraciones para grabar el hexadecimal de PicUsb en el pic 18f2550 son correctas:

(http://www.imaxenes.com/mini/problema1vn58ko.jpg) (http://www.imaxenes.com/imagen/problema1vn58ko.jpg.html)
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 20 de Julio de 2010, 02:30:22
mustafa23
para ti tengo varios puntos:

1.- ¿no la as simulado? ____________________"con el mismo programa que metes al pic"
2.- ¿te corre bien en el simulador?____________________"con el mismo programa que metes al pic"
3.- ¿el led esta en la posicion correcta?
4.- ¿ya probaste con otro pic?
5.- al comienzo del proyecto "PICUSB", J1M recomiendo utilizar winpic800
6.- prueva con otro programador

7.- deves de tener 3.3v en el pin 14 (VUSB).
8.- 5volt y masa estan en los pines correctos
9.- MUY INPORTANTE TENER EL PIN 1 (MCLR) CONECTADO ATRAVES DE UNA RESISTENCIA A 5 VOLT
10.- realiza un programa de conmutacion de todo un puerto es muy simple pero veras signos de vida en el pic.


revisa y/o realiza estos puntos y nos informas para ver tu cazo
entiendo que talves algunos punto no sean posibles de efectuar por disponibilidad de herramienta pero solo realiza los que esten a tu alcanse.


espero y te sirvan en algo

salidos
Título: Re: Proyecto PicUSB
Publicado por: ASTROCAR en 14 de Septiembre de 2010, 08:20:59
mustafa23
para ti tengo varios puntos:

1.- ¿no la as simulado? ____________________"con el mismo programa que metes al pic"
2.- ¿te corre bien en el simulador?____________________"con el mismo programa que metes al pic"
3.- ¿el led esta en la posicion correcta?
4.- ¿ya probaste con otro pic?
5.- al comienzo del proyecto "PICUSB", J1M recomiendo utilizar winpic800
6.- prueva con otro programador

7.- deves de tener 3.3v en el pin 14 (VUSB).
8.- 5volt y masa estan en los pines correctos
9.- MUY INPORTANTE TENER EL PIN 1 (MCLR) CONECTADO ATRAVES DE UNA RESISTENCIA A 5 VOLT
10.- realiza un programa de conmutacion de todo un puerto es muy simple pero veras signos de vida en el pic.


revisa y/o realiza estos puntos y nos informas para ver tu cazo
entiendo que talves algunos punto no sean posibles de efectuar por disponibilidad de herramienta pero solo realiza los que esten a tu alcanse.


espero y te sirvan en algo

salidos

Hola buenos dias una duda en el punto 7 haces referencia a tener 3.3 voltios en el pin vusb que segun el datashets del micro es un valida con regulador de voltaje ese voltaje de 3.3voltios lo puedo tomar para alimentar una eeprom externa que tengo en un proyecto que estoy realizando yo revise las caracteristicas y no me dice nada del amperaje que suministra ese regulador del pin Vusb porque si es inferior al consumo de la eeprom que voy alimentar puedo crear problemas en el pic.

Saludos y espero su gentil comentario al respecto.
Atten.
Alexander Santana.
Venezuela-Barcelona.
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 16 de Septiembre de 2010, 21:26:26
UPS...

siertamento no hay especificacion de este tipo por ningun lado

pero por lo menos he leido algo de usb y se que la PC puede con un maximo de 500 MiliAmper por cada puerto
 
quiza esto aplique tambien para los micros
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 16 de Septiembre de 2010, 22:49:45
UPS...

siertamento no hay especificacion de este tipo por ningun lado

pero por lo menos he leido algo de usb y se que la PC puede con un maximo de 500 MiliAmper por cada puerto
 
quiza esto aplique tambien para los micros

Existen dos tipos de hub, low power y high power.

Los low power sólo pueden entregar de 0 a 100mA y los high power entregan de 0 a 500mA.
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 17 de Septiembre de 2010, 01:30:35

pues en lo personal me iria por la opcion de los 100 miliamper
y
ASTROCAR

creo que solo tienes de dos sopas

1 experimentar tomando en cuenta LOS RIESGOS aver que resultados tienes
2 no utilizar esta fuente de alimentacion

aunque es la duda existe ¿cuanto amperaje puede suministrar el micro?
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 17 de Septiembre de 2010, 10:42:09
Hola buenos dias una duda en el punto 7 haces referencia a tener 3.3 voltios en el pin vusb que segun el datashets del micro es un valida con regulador de voltaje ese voltaje de 3.3voltios lo puedo tomar para alimentar una eeprom externa que tengo en un proyecto que estoy realizando yo revise las caracteristicas y no me dice nada del amperaje que suministra ese regulador del pin Vusb porque si es inferior al consumo de la eeprom que voy alimentar puedo crear problemas en el pic.

Saludos y espero su gentil comentario al respecto.
Atten.
Alexander Santana.
Venezuela-Barcelona.

Hola Astrocar

Nunca debes usar el regulador interno USB del pic para alimentar otras cosas.

Usa un regulador aparte.  ;-)
Título: Re: Proyecto PicUSB
Publicado por: ASTROCAR en 18 de Septiembre de 2010, 09:12:52
Hola buenos dias una duda en el punto 7 haces referencia a tener 3.3 voltios en el pin vusb que segun el datashets del micro es un valida con regulador de voltaje ese voltaje de 3.3voltios lo puedo tomar para alimentar una eeprom externa que tengo en un proyecto que estoy realizando yo revise las caracteristicas y no me dice nada del amperaje que suministra ese regulador del pin Vusb porque si es inferior al consumo de la eeprom que voy alimentar puedo crear problemas en el pic.

Saludos y espero su gentil comentario al respecto.
Atten.
Alexander Santana.
Venezuela-Barcelona.

Hola Astrocar

Nunca debes usar el regulador interno USB del pic para alimentar otras cosas.

Usa un regulador aparte.  ;-)

ok yo lo podria hacer de la misma alimentacion del usb es decir tomo los 5 voltios del puerto usb y con un regulador aparte saco mis 3.3 voltios y caso resuelto pero no veo la logica del porque no usar ese regulador interno del pic que ya vota los 3.3 y asi uso ese recuerso que suministra el pic y no adicional mas componente en mi placa como lo seria usar otro regulador o hacerlo con diodo zener pero en ambos cosas adicionaria mas componentes a mi circuito ahora si uso esa salida del pic que es la Vusb y alimento ya directo con esos 3.3voltios no tendria que usar mas componentes.

Saludos y en fin me gustaria es saber la logica del porque no puedo usar el Vusb para darle esos 3.3voltios a otro componente que en mi caso es una eeprom que por demas esta decirlo que consume muy poco miliAmperaje.
Atten.
Alexander Santana.
Venezuela-Bareclona.
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 18 de Septiembre de 2010, 11:00:31
Según nuestra datasheet:

Citar
17.2.2.8 Internal Regulator

The PIC18FX455/X550 devices have a built-in 3.3V reg-
ulator to provide power to the internal transceiver and
provide a source for the internal/external pull-ups. An
external 220nF (±20%) capacitor is required for stability.
The regulator is enabled by default and can be disabled
through the VREGEN Configuration bit.

When enabled, the voltage is visible on pin VUSB. When the regulator
is disabled, a 3.3V source must be provided through
the VUSB pin for the internal transceiver. If the internal
transceiver is disabled, VUSB is not used.

Note: The drive from VUSB is sufficient to only
drive an external pull-up in addition to the
internal transceiver.


Note1: Do not enable the internal regulator if an
external regulator is connected to VUSB.

2: VDD must be greater than VUSB at all
times, even with the regulator disabled

El regulador apenas es capaz de alimentar al transceiver USB y 1 y sólo una resistencia Pull-up de 1.5kohms (figura 17-3).

3.3V / 1.5k = 2.2mA

Si tu carga no rebasa los 2.2mA, entonces no hay problema.
Título: Re: Proyecto PicUSB
Publicado por: ASTROCAR en 18 de Septiembre de 2010, 13:45:40
deja buscar la datasheets de la eeprom y ver su consumo tanto en modo normal como en modo de programacion pero si mal no recuerdo su consumo no repasa los 3 mA.

Saludos y luego de leer la datasheets comento mis resultados y c onclusiones.
Atten.
Alexander santana.
Venezuela-Barcelona.
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 18 de Septiembre de 2010, 13:57:53
OK, Astro. Sería interesante ver a una pequeña eeprom como parásita del pobre regulador  :laugh:
Título: Re: Proyecto PicUSB
Publicado por: ASTROCAR en 18 de Septiembre de 2010, 14:40:08
OK, Astro. Sería interesante ver a una pequeña eeprom como parásita del pobre regulador  :laugh:

ok mira esto solo me resta probarlo en la realidad ya en teoria el regular interno del pic si puede soportal el consumo de las eeprom.

(http://img831.imageshack.us/i/consumodeeeprom.jpg)

Saludos
Atten.
Alexander Santana.
Venezuela-Barcelona
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 18 de Septiembre de 2010, 14:51:04
Hola Astro

Por ejemplo, la AT24C64 de Atmel trabajando a 5V y en escritura, consume 3mA.

http://img443.imageshack.us/img443/9982/datan.png
(http://img443.imageshack.us/img443/9982/datan.png)

Pero si trabajara a 3.3V la corriente debería incrementarse para mantener la potencia. Haciendo el cálculo subiría a 4.54mA.

Ya nos contarás cómo se comporta el PIC.  :mrgreen:
Título: Re: Proyecto PicUSB
Publicado por: ASTROCAR en 18 de Septiembre de 2010, 17:05:37
Hola Astro

Por ejemplo, la AT24C64 de Atmel trabajando a 5V y en escritura, consume 3mA.

Pero si trabajara a 3.3V la corriente debería incrementarse para mantener la potencia. Haciendo el cálculo subiría a 4.54mA.

Ya nos contarás cómo se comporta el PIC.  :mrgreen:

Gracias por tu comentario y clararme el tema no me queda de otra que usar el REGULADOR DE VOLTAJE LM317LZ Low Current Voltage - Output 1.2 ~ 37 V Current - Output 100mA, que no es mas que un regulador variable y lo configuro para que opere a 3,3voltios ya me pongo en los calculos.

Saludos y luego les muestro el circuito.
Atten.
Alexander Santana.
Venezuela-Barcelona.
Título: Re: Proyecto PicUSB
Publicado por: krizthian69 en 06 de Octubre de 2010, 15:21:22
ya el link del proyecto no existe!!!  :(

Alguien me lo puede facilitar por favor....

Se les agradece la ayuda!
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 06 de Octubre de 2010, 21:59:56
ya el link del proyecto no existe!!!  :(

Alguien me lo puede facilitar por favor....

Se les agradece la ayuda!

Checa el primer mensaje, el link al proyecto ya no está, pero el link a la página principal sigue vigente.
Título: Re: Proyecto PicUSB
Publicado por: thegame en 21 de Octubre de 2010, 14:38:18
Alguno de los expertos del USB podria decirme donde encuentro el valor para USB_DTS_TOGGLE, o en que archivo esta definido porque lo he buscado en pic18_usb.c,usb.c,usb.h y no lo encuentro, es solo para saber que es, sino me quedo con la duda y eso es peor.

gracias
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 21 de Octubre de 2010, 14:44:27
Alguno de los expertos del USB podria decirme donde encuentro el valor para USB_DTS_TOGGLE, o en que archivo esta definido porque lo he buscado en pic18_usb.c,usb.c,usb.h y no lo encuentro, es solo para saber que es, sino me quedo con la duda y eso es peor.

gracias

Hola, el DTS_TOGGLE es una banderita que sirve para llevar orden en los envíos USB. En realidad identifica a los paquetes DATA0 y DATA1. Si mandas un DATA0, el siguiente deberá ser un DATA1. Con ello las cosas llegan en orden. Si llegara un DATA0 y luego otro DATA0, el host se da cuenta y hace lo necesario para indicar el error.

No hace falta que lo modifiques.
Título: Re: Proyecto PicUSB
Publicado por: thegame en 21 de Octubre de 2010, 15:25:33
ok entiendo muchas gracias por explicarme, es que no queria quedarme con la duda de que era
Título: Re: Proyecto PicUSB
Publicado por: MatheusLPS en 27 de Octubre de 2010, 13:12:30
Yo no hablo español, así que utilizei la herramienta de Google para traducir para mí.

Esto  projectio está muy bien. Sin embargo, no está trabajando conmigo.

He utilizado los archivos originales disponibles y nada. El Windows 7 reconoce el PIC, puede instalar el com driver. OK

Las luces del LED de color rojo se acende, luego verde. Normal.

Pero el app no apaga el LED. No suma!

El hardware es idéntica a la publicada. Sólo el condensador de 100nF que no tengo aquí conmigo.

Otra de las cosas. Estoy usando un 18F4550. Solo mudei a la instrucción # include 18f2550.h por # include  18F4550.

Estoy usando cristal 12MHz. Correcta?

Resumindo, win 7 reconocido, instalado con el driver, pero la aplicación no funciona.

Gracias
Título: Re: Proyecto PicUSB
Publicado por: MGLSOFT en 27 de Octubre de 2010, 16:07:08
Yo no hablo español, así que utilizei la herramienta de Google para traducir para mí.

Esto  projectio está muy bien. Sin embargo, no está trabajando conmigo.

He utilizado los archivos originales disponibles y nada. El Windows 7 reconoce el PIC, puede instalar el com driver. OK

Las luces del LED de color rojo se acende, luego verde. Normal.

Pero el app no apaga el LED. No suma!

El hardware es idéntica a la publicada. Sólo el condensador de 100nF que no tengo aquí conmigo.

Otra de las cosas. Estoy usando un 18F4550. Solo mudei a la instrucción # include 18f2550.h por # include  18F4550.

Estoy usando cristal 12MHz. Correcta?

Resumindo, win 7 reconocido, instalado con el driver, pero la aplicación no funciona.

Gracias

Hola Matheus.
Como sugerencia te pediria que plantees la pregunta en tu lengua original (aqui hay varios que podremos leerla) y ademas pongas el texto traducido por Google.
Como el traductor no es 100% eficiente, esa es una forma de saber que quisiste decir realmente.
Saludos!!
Título: Re: Proyecto PicUSB
Publicado por: MatheusLPS en 04 de Noviembre de 2010, 19:08:28
Citar
Como sugerencia te pediria que plantees la pregunta en tu lengua original (aqui hay varios que podremos leerla).

Ok. O problema é que o computador reconheceu o PIC normalmente. Instalei com o driver proposto. Certo.

Mas quando abro o programa que controla o PIC, simplesmente ele não responde. Não soma. Não acende nem apaga os LEDs.

Semana passada fiz não sei o que e estava funcionando. Parou de novo.

O hardware permanece o mesmo. Apenas mudei para o 18F4550 que é mais robusto. E claro declarei no CCS.

Não entendo por que não funciona. Coloquei os capacitores no Vusb de 47uF e um de 47uF na alimentação que vem da USB. Os dois capacitores são eletrolíticos.

Alguém tem alguma ideia o porque do aplicativo travar e não responder a nenhum comando?

Tenho o .Net 4.0 instalado.

EDIT:

Estava tentando encontrar um erro e abri o Visual Express 2010 e rodei o programa de lá. Ele abriu normalmente mas quando mandei somar ele retornou o seguinte erro no PicUSBAPI:

Erro no Visual C#http://img443.imageshack.us/img443/1967/errofm.jpg (http://img443.imageshack.us/img443/1967/errofm.jpg)

Obrigado!

MatheusLPS do Brasil
Título: Re: Proyecto PicUSB
Publicado por: MatheusLPS en 17 de Noviembre de 2010, 23:05:40
Problema resolvido!

Desistalei o windows 7 e instalei o windows XP e voltou a funcionar!

Podem conferir o vídeo aqui (em português! :D):


Obrigado
Título: Re: Proyecto PicUSB
Publicado por: cpva en 03 de Diciembre de 2010, 21:49:23
hola quisiera saber qu e pic es el mas apropiado para la comunicacion usb entre un pic y labview
Título: Re: Proyecto PicUSB
Publicado por: migsantiago en 04 de Diciembre de 2010, 11:55:46
hola quisiera saber qu e pic es el mas apropiado para la comunicacion usb entre un pic y labview

Cualquier PIC con USB te servirá.
Título: Re: Proyecto PicUSB
Publicado por: electrowolf en 14 de Diciembre de 2010, 21:16:39
Hola Gente

pues bien no se si a alguien le ha pasado, pero espero puedan ayudarme, no he termiando de leer todas las paginas de este post, quiza encuentre la respuesta pero como son muchas, mientras leo pongo por si alguien puede, me ayude.

hice la placa para comunicar un pic18f4550 con el usb y segun todo salio bien, le cargo el programa al pic pero al conectarlo, me dice que el dispositivo no fue reconocido y me coloca el usb como "unknow Device", ya intente meterle el controlador pero cuando lo intento, me dice que ya no es necesario actualizarlo por que ya tiene el mas actual, acontinuacion les pongo el codigo que uso:

Código: [Seleccionar]
/////////////////////////////////////////////////////////////////////////
////                            DAQ.c                                ////
////                                                                 ////
//// Este ejemplo muestra como desarrollar un sencillo dispositivo   ////
//// USB con el PIC18F2550 (para la serie 18Fxx5x)                   ////
//// los drivers que se requiere para éste dispositivo son los que   ////
//// proporciona Microchip en su pagina web, y se basan en protocolo ////
//// USB_ENABLE_BULK su XTAL es de 12Mhz.                            ////
////                                                                 ////
////                                                                 ////
//// Cuando el dispositivo sea conectado al PC, saldrá el asistente  ////
//// para la instalación del driver. Se instala el driver            ////
//// que nos proporciona Microchip.                                  ////
////                                                                 ////
//// Al aplicar energia al PIC se enciende el LED en RB6 y  hasta    ////
//// que el dispositivo halla sido configurado por la PC via puerto  ////
//// USB se encende el Led en RB7. El PIC muestra el dato que le     ////
//// envia la PC en el vector [0] e inmediatamente el PIC le         ////
//// responde con el valor del puerto A almacenado en el vector [1]. ////
//// Sólo si la PC le envia un dato al PIC éste enviará el dato del  ////
//// puerto A                                                        ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////
////                                                                 ////
//// Realizado con el compilador CCS PCWH 3.227                      ////
//// Este programa fue desarrollado para estimular el uso del        ////
//// puerto USB y desarrollar tarjetas de adquisición económicas     ////
//// por Ing. Gabriel Pool y Ing. Julio Lugo para proyecto de        ////
//// materia Sensores y Actuadores impartida por el profesor         ////
//// M.C. Pedro Nájera.                                              ////
////                                                                 ////
//// Actualizado en Julio de 2009 para uso en  Matlab                ////
//// por Ing. Gabriel Pool para proyecto de la materia Diseño        ////
//// Mecatrónico impartida por el profesor Dr. Alejo Mosso Vazquez   ////
//// (Universidad Modelo en Mérida, Yucatán, México)                 ////
//// Apoyado por Centro de Investigación Científica de Yucatán AC    ////
//// Depto de Instrumentación ( www.cicy.mx)                         ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////

// Por favor, complete los 4 pasos siguientes ...
// Paso 1:
// Cambie la siguiente instrucción de acuerdo al PIC que utilice PIC18F2455/2550/4455/4550
#include <18F4550.h>
//#device ADC=10                             //Descomente ésta opción en caso de usar el ADC a 10bits
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL4,CPUDIV1,VREGEN,MCLR,NOPBADEN
// Paso 2: Ajuste el fusible del PLL de acuerdo al Xtal que utilice
// No olvide que PLL1 = Para un Xtal de 4Mhz
//               PLL2 = Para un Xtal de 8Mhz
//               PLL3 = Para un Xtal de 12Mhz
//               PLL4 = Para un Xtal de 20Mhz , etc.
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

/////////////////////////////////////////////////////////////////////////////
//
// CCS Library dynamic defines.  For dynamic configuration of the CCS Library
// for your application several defines need to be made.  See the comments
// at usb.h for more information
//
/////////////////////////////////////////////////////////////////////////////

#define USB_HID_DEVICE     FALSE              //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK    //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK    //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    64                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    64                 //size to allocate for the rx endpoint 1 buffer

/////////////////////////////////////////////////////////////////////////////
// Lo siguiente no es indispensable:
// If you are using a USB connection sense pin, define it here.  If you are
// not using connection sense, comment out this line.  Without connection
// sense you will not know if the device gets disconnected.
//       (connection sense should look like this:
//                             100k
//            VBUS-----+----/\/\/\/\/\----- (I/O PIN ON PIC)
//                     |
//                     +----/\/\/\/\/\-----GND
//                             100k
//        (where VBUS is pin1 of the USB connector)
//
/////////////////////////////////////////////////////////////////////////////
//#define USB_CON_SENSE_PIN PIN_B2  //CCS 18F4550 development kit has optional conection sense pin

/////////////////////////////////////////////////////////////////////////////
//
// Include the CCS USB Libraries.  See the comments at the top of these
// files for more information
//
/////////////////////////////////////////////////////////////////////////////

#include <pic18_usb.h>              //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <usb_desc_scope.h>         //descriptors del Pic USB
#include <usb.c>                    //handles usb setup tokens and get descriptor reports

/////////////////////////////////////////////////////////////////////////////
/*
Paso 3: Abra el archivo C:\Archivos de programa\PICC\Drivers\usb_desc_scope.h
        ( donde se instaló el compilador de CCS ) que es el descriptor del USB
        ubicado en su PC, avance hasta la sección start device descriptors
        (aprox en la linea 132) y reemplace los valores del vendor id,
        el product id y el device release number como sigue ( puede copiar
        las tres líneas siguiente y pegar en el archivo del descriptor <<usb_desc_scope.h>> ) :
               
         0xD8,0x04,           //vendor id (0x04D8 is Microchip)
         0x0B,0x00,           //product id
         0x01,0x00,           //device release number

ESTO ES IMPORTANTE HACERLO CORRECTAMENTE DE LO CONTRARIO, EL DISPOSITIVO NO SERA RECONOCIDO POR EL DRIVER.
*/
/////////////////////////////////////////////////////////////////////////////


#define  LEDV    PIN_B6
#define  LEDR    PIN_B7
#define  LED_ON  output_high
#define  LED_OFF output_low

// Direcciones de memoria válidas para PIC18F2455/2550/4455/4550 (no olvide que son la misma familia)
// Esto es con el fin de poder escribir directamente en ellos sin usar instrucciones como intermediarios.
#BYTE TRISA  = 0x0F92                           // Registro de control de E/S del puerto A
#BYTE TRISB  = 0x0F93                           // Registro de control de E/S del puerto B
#BYTE PORTA  = 0x0F80                           // Registro del puerto A
#BYTE PORTB  = 0x0F81                           // Registro del puerto B
#BYTE ADCON1  = 0x0FC1                          // Registro de control del ADC
#BYTE CMCON   = 0x0FB4                          // Registro del modulo comparador

int8 dato[64];

void main(void) {

   LED_ON(LEDV);                                //encendemos led en RB6 para indicar presencia de energia
   LED_OFF(LEDR);

   usb_init();                                  // inicializamos el USB
   usb_task();                                  // habilita periferico usb e interrupciones
   usb_wait_for_enumeration();                  // esperamos hasta que el PicUSB sea configurado por el host

   LED_OFF(LEDV);
   LED_ON(LEDR);                                // encendemos led en RB7 al establecer contacto con la PC

   TRISA  = 0x0FF;                              // Se declara el puerto A como entradas (instrucción opcional)
   TRISB  = 0x00;                               // Se declara el puerto B como salidas (instrucción opcional)
   ADCON1 = 0x0F;                               // Se configura al ADC para entradas digitales (apagar el ADC)
   CMCON  = 0x07;                               // Se configuran los comparadores para entradas digitales (apagar los comparadores)

   while (TRUE)
   {
      if(usb_enumerated())                      // si el Pic está configurado via USB
      {
         if (usb_kbhit(1))                      // si el endpoint de salida contiene datos del host
         {
            usb_get_packet(1, dato, 64);        // cojemos el paquete de tamaño 8bytes del EP1 y almacenamos en dato
            portb = dato[0];                    // Se muestra al byte completo en el puerto B
            dato[1] = porta;                    // Se lee el puerto A y se almacena en el vector
            usb_put_packet(1, dato, 64, USB_DTS_TOGGLE); //y enviamos el mismo paquete de tamaño 64bytes del EP1 al PC
         }
       }
    }
}

//Paso 4: Compile y grabe en el PIC

ya realice los cambios al archivo que menciona en las lineas de VID y PID, lo compilo y lo cargo al pic,pero pasa lo que les comento arriba al inicio del post

de antemano gracias por su ayuda
Título: Re: Proyecto PicUSB
Publicado por: MatheusLPS en 15 de Diciembre de 2010, 02:59:44
Tenho outro problema.

Estou usando o PicWinUSB com o driver para 64bits. O computador reconhece certinho. O problema é quando tento adicionar mais funcões no C#. O aplicativo trava. LOOK:

Apenas adicionei mais uma rotina no PIC:

Código: [Seleccionar]
usb_get_packet(1, iBuff, 2); // Read 2 byte packet from EP 1

            if (iBuff[0] == 0) // Led_Mode
            {
               if (iBuff[1] == 1) output_toggle(LED); // Toggle LED
            }

            if (iBuff[0] == 2) // ADC_Mode
            {
               oBuff[0] = 1;
               oBuff[1] = read_adc();
               usb_put_packet(1, oBuff, 2, USB_DTS_TOGGLE); // Send 2 byte packet to EP 1
            }
           
            if (iBuff[0] == 1)
            {
               oBuff[0] = 1;
               oBuff[1] = 1;
               usb_put_packet(1, oBuff, 2, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
            }

E no C# fiz assim:

Código: [Seleccionar]
private void timer1_Tick(object sender, EventArgs e)
        {
            bool bres;
            byte[] sdBuffer = new byte[1];           // Define send DataBuffer size
            byte[] rdBuffer = new byte[2];           // Define recieve DataBuffer size

            sdBuffer[0] = 0x02;    //Mode ADC

            bres = picwinusbapi.Write_PicWinUSB(iHandle, sdBuffer);
            bres = picwinusbapi.Read_PicWinUSB(iHandle, rdBuffer);

            if (rdBuffer[0] == 1)
           
            {
                temperatura_ambiente_var = (int)(rdBuffer[1] * 5 * 100 / 254);
                adcBar.Value = temperatura_ambiente_var;
                temp_ambiente_box.Text = temperatura_ambiente_var.ToString() + "ºC";
            }

           
            sdBuffer[0] = 0x01;    //Mode se o PIC está conectado

            bres = picwinusbapi.Write_PicWinUSB(iHandle, sdBuffer);
            bres = picwinusbapi.Read_PicWinUSB(iHandle, rdBuffer);

            if (rdBuffer[0] == 1)
            {
                if (rdBuffer[1] == 1)
                {
                    pic_conectado_box.Text = "PIC Conectado";
                }
            }
etc...

Oque pode estar errado?

Gracias....
Título: Re: Proyecto PicUSB
Publicado por: MatheusLPS en 15 de Diciembre de 2010, 18:22:26
RESOLVIDO!

Estava gabrando el codigo errado..

WORKING NOW!
Título: Re: Proyecto PicUSB
Publicado por: thom en 17 de Febrero de 2011, 11:34:17
Hola a todos, aqui adjunto un video sobre el desarrollo de: PIC USB + C# + OPENGL.
Agradezco a este foro para el desarrollo de este.!!!!!!!!!!


Título: Re: Proyecto PicUSB
Publicado por: diego_z en 28 de Febrero de 2011, 09:53:20
hola gente buenas , estoy incurcionando en usb , y llegue a la pagina de migsantiago donde explica muy bien todo , baje el proyecto de el lei grabe etc , el pc me recomçnoce el pic conectado puedo instalar drivers ( win 7) todo ok pero no se comunica con la aplicacion en vb c 2008 , la pid y vid son iguales  , las que probee microchip , alguien me ayuda a resolver esto ? un abrazo diego
Título: Re: Proyecto PicUSB
Publicado por: flaviorenatofrs en 05 de Marzo de 2011, 02:23:00
Problema resolvido!

Desistalei o windows 7 e instalei o windows XP e voltou a funcionar!

Podem conferir o vídeo aqui (em português! :D):


Obrigado


Aqui eu consegui reproduzir o seu projeto. Bacana deve ter sofrido bastante. Eu possuo uma maquina com win7 32 bits. O driver é reconhecido, porém quando abro o aplicativo feito em c# o Pic fica com estado desconectado.

Estou com um projeto de iniciação cientifica muito parecido com o seu projeto.

Você tentou mexer novamente para saber o porque não funcionou no win7?

Abração

FRS
Título: encender Led por medio de visual con PIC
Publicado por: adriano en 16 de Marzo de 2011, 23:41:36
tengo una super duda....como puedo encender un led con un PIC (cual sea) por medio de visual basic quisiera saber los codigos para mandarle los datos via USB :(
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 22 de Marzo de 2011, 14:45:47
Hola. Queria saber si alguien ha compilado el proyecto (la parte software, ocea el programa en VC#) en la version 2010? Yo lo he echo y me dio problemas...
Título: Re: Proyecto PicUSB
Publicado por: FabiPIC en 04 de Abril de 2011, 20:03:19
Hola J1m y a todos, primero agradecerte, sin tu ayuda no creo que esta vida me hubiera resultado el tema pic usb, y tengo una consulta que hacerte al respecto para mi tesis, no lo puedo resolver despues de muuuchos intentos, y es que cuando envio un dato al pc por usb cdc, con la libreria que compartes para ccs, el pc recibe el correspondiente numero asociado al ascii, no a un entero, comprendi que la libreria envia sólo caracteres, entonces imagino el problema es de ahi, ¿existe alguna forma de enviar un entero y que el pc lo reconozca como entero?,pues en la funcion de la lib para ccs la cosa es un putc,  vi un ejemplo en tu pagina de MicroIngenia , la del equipo sensor de humedad y temperatura, y al parecer a ti te pasa lo mismo. ¿como lo resolviste?, no entendi   :shock: .

saludosss.

pd: la unica forma que me funciona y que el pc me reconoce bien,  es enviar cada char de un numero, ej, si quiero 5200, envio en char el 5, el 2.... comprenderas que es muy ineficiente.
 
Título: Re: Proyecto PicUSB
Publicado por: Martronica en 15 de Abril de 2011, 01:14:42
Saludos amigos, tengo una pregunta sencilla para ustedes pero para mi vital.

Estoy tomando muestras de una señal analogica en el pic 18F4550
las quiero enviar a la PC por USB

mi intencion es que esta comunicacion sea lo mas rapida posible he leido que existen tres formas de configurar el PIC

Bulk Transfers USB o la transferencia bidireccional masiva de información.
HID USB o los dispositivos de interfaz humana.
CDC USB o la clase de dispositivos de comunicación.

me gustaria saber cual de ellas me es mas conveniente utilizar, tomando en cuenta la descripcion me inclino por Bulk Transfers USB. Pero quiero estar seguro para comenzar.
Saludos y exitos
Título: Re: Proyecto PicUSB
Publicado por: PalitroqueZ en 17 de Abril de 2011, 16:26:07
Saludos amigos, tengo una pregunta sencilla para ustedes pero para mi vital.

Estoy tomando muestras de una señal analogica en el pic 18F4550
las quiero enviar a la PC por USB

mi intencion es que esta comunicacion sea lo mas rapida posible he leido que existen tres formas de configurar el PIC

Bulk Transfers USB o la transferencia bidireccional masiva de información.
HID USB o los dispositivos de interfaz humana.
CDC USB o la clase de dispositivos de comunicación.

me gustaria saber cual de ellas me es mas conveniente utilizar, tomando en cuenta la descripcion me inclino por Bulk Transfers USB. Pero quiero estar seguro para comenzar.
Saludos y exitos

sip. con el Bulk te sirve, prueba con la librería mpusbapi.dll
Título: Re: Proyecto PicUSB
Publicado por: adrimadeo en 26 de Junio de 2011, 22:53:09
Hola, qria saber si me pueden dar una mano con este proyecto (PicUsb); lo q quiero hacer es modificar el proyector de Microsoft Visual Studio C# 2005 para, en vez de enviar 5 datos, poder enviar 164. Ya q asi lo necesito.
Desde ya muchas gracias al que pueda aydarme.
Título: Re: Proyecto PicUSB
Publicado por: joseflames en 05 de Julio de 2011, 19:50:13
saludos esta info esta actualizada? gracias
Título: Re: Proyecto PicUSB
Publicado por: jeremylf en 21 de Julio de 2011, 21:47:24
He tenido problemas con el programa echo en Visual C# en un windows 7 64bit. Sera que el DLL no funciona para 64bit? Sera que falta actualizar framework? Sera que falta poner algo en mi programa para que acepte 64bit?

Con el driver no huvo problemas, hasta el icono salio.
Título: Re: Proyecto PicUSB
Publicado por: avpc79 en 07 de Septiembre de 2011, 01:59:52
:( :( guaaa no me funca...  bueno recie estoy empezando  en este mundo de los PICusb y bueno descargue el programa de JIM por cierto felicitarle a JIM por todos los conocimientos que comparte  y gracias a los maestros como el vamos aprendiendo mucho .. :P   y bueno el ejemplo funciona chevere  en proteus  descargue el "picusb"; ya pero kise hacerlo modificarlo algunas cosas :P...y como todos supongo haciendo un copy/paste para despues hacerlo a mi modo..:P hixe la misma aplicacion de JIM  y  pero  cuando presiono cualquier boton sale  abajo este mensaje....
"Excepción del tipo 'System.FormatException' en mscorlib.dll" tb me sale el cuadro de
"Una llamada a la función PInvoke 'UnoPIC!UnoPIC.Program::_MPUSBOpen' impidió
 la correspondencia de la pila. Es posible que la razón sea que la firma PInvoke administrada
no coincida con la firma de destino no administrada. Compruebe que la convención y los parámetros
de llamada de la firma PInvoke coinciden con la firma no administrada de destino."

 pero eso sale en estas lineas
            myOutPipe = _MPUSBOpen(selection, vid_pid_norm, out_pipe, 0, 0);
                                  myInPipe = _MPUSBOpen(selection, vid_pid_norm, in_pipe, 1, 0);
 alguien me podria explicar lo que pasa y como puedo solucionarlo  :( :( :( :(.... por cierto tengo el
 WS7 32b ,VisualEstudio 2010 ...


Hola amigos, los vengo siguiendo desde hace un año que empece en este mundo. Tengo el mismo problema que reporto Delko.arthuro. Monte el programa en Visual C# 2010, estoy usando Windows Vista 32 bits, el ejemplo de migsantiago y el enumerador de palitroquez (gracias por compartir sus conocimientos). En lo que el programa intenta abrir el Pipe de salida por primera vez obtengo el mensaje "Una llamada a la función PInvoke 'TestUSB!WindowsFormsApplication1.PicUSBAPI::_MPUSBOpen' impidió la correspondencia de la pila. Es posible que la razón sea que la firma PInvoke administrada no coincida con la firma de destino no administrada. Compruebe que la convención y los parámetros de llamada de la firma PInvoke coinciden con la firma no administrada de destino.". Primera vez que hago un programa que emplea directamente una libreria dll asi que no sabria por donde empezar a buscar el error. Copie la mpusbapi.dll en todos lados, en las carpetas donde guardo el proyecto en C#, en las carpetas windows SYSTEM y SYSTEM32.

Alguna idea? Agradecido y saludos
Título: Re: Proyecto PicUSB
Publicado por: avpc79 en 07 de Septiembre de 2011, 03:31:49
Para añadir, en el constructor de la clase que maneja el puerto usb (PicUSBAPI segun ejemplo de migsantiago) solicite la version de la mpusbapi.dll con             version = _MPUSBGetDLLVersion();   y funciona bien, me devuelve el numero 65536 (10000 en hexadecimal) o sea, version 1.0 -> Conclusion, si consigue la dll perfectamente y la "usa". Creo que el error que mencione anteriormente se refiere a que la cantidad o tipo de parametros en la llamada a la funcion no coinciden con el formato en la dll, es lo que me dice la logica, pero si a ustedes les ha funcionado asi como esta debe ser otra cosa.. Ya es el ultimo paso que me falta para ingresar al club de los PIC con USB ;).

Saludos.-
Título: Re: Proyecto PicUSB
Publicado por: jonrack en 28 de Octubre de 2011, 15:20:08
hola alguien podria mandarme el archivo completo del proyecto.....necesito empezar a leer y  el link original esta offline....gracias
Título: Re: Proyecto PicUSB
Publicado por: carlosiguan en 28 de Diciembre de 2011, 10:22:38
Hola a todos. Alguien me puede facilitar el proyecto PicUSB? Es que ya no se puede bajar desde el link de descarga que aparece en el primer mensaje. Desde ya muchas gracias a quien pueda ayudarme. Saludos!
Título: Re: Proyecto PicUSB
Publicado por: fonon en 20 de Marzo de 2012, 10:22:54
Hola  todos la pagina para descargar el proyecto original no esta mas disponible, alguien podria facilitar un enlace de descarga, quisiera empezar con pics usb me ayudaria mucho.

Gracias.
Título: Re: Proyecto PicUSB
Publicado por: umalrovi en 25 de Abril de 2012, 07:25:48
Buenas, estoy desarrollando un proyecto en el cual voy a usar un pic18F4550 y quiero  conectarlo por el USB al PC y controlarlo por LabView.
Ya he realizado la comunicación y funciona perfecto, pero me surge una duda con el condensador que lleva en la patilla Vusb de 47uF. Este condensador  se usa para regular los 3,3V del regulador interno según la página 163 del datasheet ya que es el encargado de alimentar el transceptor del USB.

Mi duda es porque se utiliza 47 uF.

Un saludo, muchas gracias y muchas felicidades al foro!!!
Título: Re: Proyecto PicUSB
Publicado por: umalrovi en 25 de Abril de 2012, 12:25:43
Me respondo Yo mismo, buff lo siento pero como dece RedPicy mas de uno de vosotros, TODO esta en el Datasheet. En la página 167 del datasheet del pic18f4550, en el punto 17.2.2.8 Viene la respuesta.

Saludos
Título: Re: Proyecto PicUSB
Publicado por: chrissgarcia en 15 de Mayo de 2012, 20:37:43
Hola a todos. Alguien me puede facilitar el proyecto PicUSB? Es que ya no se puede bajar desde el link de descarga que aparece en el primer mensaje. Muchas gracias a quien pueda ayudarme. Saludos!
Título: Re: Proyecto PicUSB
Publicado por: neto100 en 12 de Junio de 2012, 21:10:08
Hola:
Quisiera saber si alguien me puede dar una manito en lo siguiente:
Estoy tratando de emular un teclado usb para pc utilizando los ejemplos de microchip Keyboard. Lo que no he podido hacer es saber el estado de los leds que indican las teclas Num Lock, Scroll Lock y Caps Lock. Tengo una duda grande que encontre por ahi donde dice que la información del estado de estos leds se encuentra en el endpoint 1 y que Windows solo envia esa información a los fabricantes  de teclados registrados. Es ciento esto. Si es así hay alguna otra forma de saberlo utilizando algun metodo o truco. He leido varios foros sobre esto pero la mayoria trabajan con ccs y yo estoy empezando con c18. Algunos ejemplos hablan de leer el hid_report_out, pero no he podido.
Gracias por su ayuda.
Título: Re: Proyecto PicUSB
Publicado por: KALLITOS en 12 de Junio de 2012, 21:33:49
Busca en microchip el AN1212, alli se usa un host usb con keyboard, alli en el codigo hay una funcion App_ProcessInputReport, alli podras ver lo que necesitas.

saludos
Título: Re: Proyecto PicUSB
Publicado por: neto100 en 13 de Junio de 2012, 15:05:03
Gracias KALLITOS:
Precisamente en este documento dicen que este byte es una constante y está reservada para fabricantes originales OEM, pero en otro documento dice que se debe modificar el HidSetReport y citan a Jan Alexon, ya hice esas pruebas y no me funciona. en tb056 explican y hay una aplicación en asemble para 18fxx pero yo no entiendo solo puedo manejar c18 o asembler para 16xxx.
La verdad quiero salir de la duda si no se puede hacer con la clase HID o debo tomar otro camino o si este es el correcto.

AN 1212
For some keyboards that have a custom implementation
that does not match a standard keyboard implementation,
a look-up table may be required in order to map the
key code returned to the desired usage ID. Keys, such
as Ctrl, Shift, Alt and GUI keys make up the 8-bit modifier
byte in a standard keyboard report. Byte 1 of this report
is a constant. This byte is reserved for the use of the
Original Equipment Manufacturer (OEM).
Table 2 describes the keyboard output report (1 byte).

tb056

The Set_Report Request
The Set_Report request is a HID specific command.
It was the only provision in Version 1.0 of the USB
specification that could send data from the host to a
peripheral. This later changed with Version 1.1 and the
introduction of the interrupt OUT transfer. All low-speed
devices created before the introduction of Version 1.1
had to use the Set_Report request for host-to-device
communication. The limitation of this is that
Set_Report communicates over Endpoint 0 (EP0).
Endpoint 0 is the control endpoint. In other words, EP0
is the avenue through which the device and host send
each other commands, so any outputted data from the
host has to share bandwidth with administrative................

Título: Re: Proyecto PicUSB
Publicado por: KALLITOS en 13 de Junio de 2012, 17:13:22
Viste esto:  USB Device - HID - Keyboard  AQUI (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784)

Código: C
  1. //Check if any data was sent from the PC to the keyboard device.  Report descriptor allows
  2.     //host to send 1 byte of data.  Bits 0-4 are LED states, bits 5-7 are unused pad bits.
  3.     //The host can potentially send this OUT report data through the HID OUT endpoint (EP1 OUT),
  4.     //or, alternatively, the host may try to send LED state information by sending a
  5.     //SET_REPORT control transfer on EP0.  See the USBHIDCBSetReportHandler() function.
  6.     if(!HIDRxHandleBusy(lastOUTTransmission))
  7.     {
  8.                 //Do something useful with the data now.  Data is in the OutBuffer[0].
  9.                 //Num Lock LED state is in Bit0.
  10.                 if(hid_report_out[0] & 0x01) //Make LED1 and LED2 match Num Lock state.
  11.                 {
  12.                         mLED_1_On();
  13.                         mLED_2_On();
  14.                 }
  15.                 else
  16.                 {
  17.                         mLED_1_Off();
  18.                         mLED_2_Off();                  
  19.                 }


Bajate las librerias y checa. El codigo esta hecho para C18, C30 y C32.

saludos
Título: Re: Proyecto PicUSB
Publicado por: rlc11 en 04 de Julio de 2012, 21:48:00

PicUSB se ha realizado con la intención de proporcionar un primer empujón para todos aquellos que quieren arrancar con los diseños por USB y que como supongo que a muchos nos ha pasado, no saben por donde engancharlo!



Hola soy nuevo en el foro, esta muy interesante el tema usbpic, pero podrias por favor actualizar los link de descarga para provarlos en mi pc y asi iniciarme con el tema.

Saludos
Título: Re: Proyecto PicUSB
Publicado por: MIYER en 11 de Julio de 2012, 00:52:51
SEGUN LA INFORMACION EN LO QUE SE DESARROLLA EL PROYECTO ME INTERESARIA DESCARGAR EL ARCHIVO, DONDE LO  PUEDO HACER , LE AGRADECERIA CUALQUIER AYUDA     
Título: Re: Proyecto PicUSB
Publicado por: neto100 en 12 de Julio de 2012, 18:51:15
La verdad no he podido saber como pasar la información del endpoint 0 al 1 o como leer directamente el endpoint 1 utilizando la libreria keyboard demo de michochip.
Título: Re: Proyecto PicUSB
Publicado por: neto100 en 24 de Julio de 2012, 18:07:24
Estoy tratando de hacer un teclado USB para PC y no he podido entender como hago para detectar cuando el PC me envia los estados de los leds NUM LOCK, CAPS LOCK Y SCROLL LOCK. Estoy empezando con el tema de USB y tambien C18. Muchas personas han tenido el mismo problema y lo han resuelto con CCS porque es como mas facil. Pero me gusta mas C18. He leido que el reporte de los leds los envia el PC por el EP1, pero no se si deba habilitarlo o algo así. Lo otro es pasar el EP1 a EP0 y asi poder obtener el dato en hid_report_out, pero nada de nada. Me sugieren que utilice la función  USBHIDCBSetReportHandler pero no se como confgurarla
Título: Re: RE: Proyecto PicUSB
Publicado por: MIYER en 20 de Agosto de 2012, 00:47:01
Orale muy buena aplicación para empezara usar el USB.....mis mas sinceras felicitaciones pana JIM  <img   src="http://pics.miarroba.com/caretos/wink.gif" alt="Giño" title="Giño" /> <img   src="http://pics.miarroba.com/caretos/biggrin.gif" alt="Sonrisa Gigante" title="Sonrisa Gigante" /><img   src="http://pics.miarroba.com/caretos/bounce.gif" alt="Rebotado" title="Rebotado" />  


alguien me podria ayudar, deseo implementar este proyecto de JIM pero no encuentro los archivos para iniciar. cualquier ayuda les agradezco
Título: Re: Proyecto PicUSB
Publicado por: kirara en 26 de Octubre de 2012, 23:05:29
hola a todos, necesito ayuda con un proyecto con pic  usb 4550 y labview, tengo la version 2012 del programa pero para poderme comunicar con el pic necesito la libreria mchpfsusb.dll de microchip u como la libreria es de 32 bits y el labview es de 64 el programa no corre. no se si alguien sabe donde encontra la libreria de 64 bits o que version de labview debo descargar para que corra el programa e el compu.
Título: Re: Proyecto PicUSB
Publicado por: alquimista en 05 de Diciembre de 2012, 19:18:51
Hola que tal yo apenas voy a comenzar a utilizar el PIC 18F2550 para recibir informacion por USB y ademas controlar 2 servomotores utilizando PWM me gustaria que me puedan proporcionar los links de los primeros comentarios porque ya no aparecen cualquier información o aporte de ideas seran bien recibidas

Mi correo es rafa18_8@hotmail.com
                   rafa.cugr@gmail.com

Título: Re: Proyecto PicUSB
Publicado por: masterjavier1992 en 05 de Diciembre de 2013, 00:47:09
Hola soy nuevo aqui en el foro y llevo tambien bastante con lo del usb y si tienen razon con eso de cambiar el debug a x86 para que funcione en un sistema de 64 bits y de ademas cambiar el net framework al 3.5 para que corra el programa me funciona pero ahora mi rpoblema es con el driver del usb me aparece en el administrador de dispositivos como un engranesito y un simbolo de pregunta en el dispositivo en windows 7 de 64 bits mientras que en xp no tengo problemas  y cuando pongo todo no me funciona osea abre el programa no sale ningun error pero no me conecta con el pic :( que hago :(
Título: Re: Proyecto PicUSB
Publicado por: BEXTIXTOX en 16 de Marzo de 2014, 04:51:24
alguien tiene el rar del proyecto??los link estan caidos
Título: Re: Proyecto PicUSB
Publicado por: wiispring en 13 de Agosto de 2014, 12:48:35
Hola, para los que empiezan con el USB y no tienen los links del principio quiza les interese ver la web de RedPic:
http://picmania.garcia-cuervo.net/usb_0_desencadenado.php, donde si que hay fuentes y pueden servir para empezar.

Un saludo.
Título: Re: Proyecto PicUSB
Publicado por: marcoj2560456* en 29 de Julio de 2015, 16:30:38
hola me encuentro con un problema estoy tratando de conectar un lector de codigo de barras a mi pic18f4550 pero no lo reconoce mi pic como hago para que mi pic trabaje como maestro de el lector por lo general sale es de la conexion con una computadora pero con un lector solo el pic y el lector se puede ? seria de mucha ayuda q me pudieran ayudar muchas gracias saludos 
Título: Re: Proyecto PicUSB
Publicado por: RedPic en 30 de Julio de 2015, 05:03:37
hola me encuentro con un problema estoy tratando de conectar un lector de codigo de barras a mi pic18f4550 pero no lo reconoce mi pic como hago para que mi pic trabaje como maestro de el lector por lo general sale es de la conexion con una computadora pero con un lector solo el pic y el lector se puede ? seria de mucha ayuda q me pudieran ayudar muchas gracias saludos 

No, no se puede. El 18F4550 sólo actúa como Client, no como Master.  :?
Título: Re: Proyecto PicUSB
Publicado por: marcoj2560456* en 01 de Octubre de 2015, 19:19:21
hola RedPic muchas gracias por responder si me pude dar cuenta no habia leido tu respuesta ahora he comprado el pic24fj64gb002 pero he tenido muchos problemas para configurar el usb como host y que me reconozca el lector ahora estoy programando en Mplab X compilador XC16 he descargado las librerias de microchip de usb pero no he podido utilizarlas y he estado intentando configurarlo con los registros del datasheet pero ser me ha hecho dificil sabes algo al respecto si pudieras ayudarme seria finisimo
Título: Re: Proyecto PicUSB
Publicado por: allennet en 03 de Octubre de 2015, 21:32:35
hola me encuentro con un problema estoy tratando de conectar un lector de codigo de barras a mi pic18f4550 pero no lo reconoce mi pic como hago para que mi pic trabaje como maestro de el lector por lo general sale es de la conexion con una computadora pero con un lector solo el pic y el lector se puede ? seria de mucha ayuda q me pudieran ayudar muchas gracias saludos  

Tengo entendido que solo se puede leer (host) si los drivers de lector de codigo de barras son de  codigo fuente libre

o como ultimo recurso con complicacion haciendo ingenieria inversa
Título: Re:Proyecto PicUSB
Publicado por: CHELOXR en 25 de Noviembre de 2015, 15:08:49
Hola Gente del FORO, estoy iniciando con VB.NET 2010 y USB tratando de utilizar la libreria MPUSBAPI.DLL pero no se como registrarla. Es decir como declararla en el proyecto.
 El còdigo es:
Public Class Form1
    Dim MPUSBDevice As MPUSBClass
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MPUSBDevice = New MPUSBClass()
        MPUSBDevice.TargetVid_Pid = "vid_04d&&pid_000c"
        MPUSBDevice.TargetEP = "\MCHP_EP1"
        MPUSBDevice.Deviceinstance = 0
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim DataBytes(63) As Byte
        MPUSBDevice.SendCommand(New MPUSBClass.USB_CMD_LIST() {MPUSBClass.USB_CMD_LIST.RD_POT, o})
        MPUSBDevice.ReciverPacket(DataBytes)
        TextBox1.Text = Utils.toOhms(DataBytes)
    End Sub
End Class

Alguien podra orientarme Gracias!!
Título: Re:Proyecto PicUSB
Publicado por: ikarelys en 29 de Febrero de 2020, 18:36:00
Alguien sabe del driver PICSun.c ???...