Autor Tema: Proyecto PicUSB  (Leído 380580 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Proyecto PicUSB
« 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:


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 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.

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í:


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:


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 creado por Sisco.

DOWNLOAD

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:


Para cualquier duda o pregunta: hobbypic@hotmail.com
 
Jaime Fernández-Caro Belmonte - J1M
..:: www.HobbyPIC.com ::..
« Última modificación: 06 de Octubre de 2010, 21:58:39 por un Moderador »

Desconectado lord_10

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 612
    • My Blog
RE: Proyecto PicUSB
« Respuesta #1 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  
..::  3D5F ™ ::..  AHC

"Tan sólo hace falta una pequeña idea, para hacer un gran sueño realidad."

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Proyecto PicUSB
« Respuesta #2 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.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
RE: Proyecto PicUSB
« Respuesta #3 en: 27 de Agosto de 2005, 00:22:00 »
Enhorabuena por conseguirlo y gracias por compartirlo, Jaime.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Proyecto PicUSB
« Respuesta #4 en: 27 de Agosto de 2005, 04:20:00 »
Estupendo J1M !!! Gracias por compartirlo, aver que desarmo para conseguir el conector usb AvergonzadoAvergonzadoAvergonzado
Si juegas contra el mejor, pierdes como los demás.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Proyecto PicUSB
« Respuesta #5 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

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Proyecto PicUSB
« Respuesta #6 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.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Proyecto PicUSB
« Respuesta #7 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.
Si juegas contra el mejor, pierdes como los demás.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Proyecto PicUSB
« Respuesta #8 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!

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Proyecto PicUSB
« Respuesta #9 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

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Proyecto PicUSB
« Respuesta #10 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


Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Proyecto PicUSB
« Respuesta #11 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....

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Proyecto PicUSB
« Respuesta #12 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"


Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
RE: Proyecto PicUSB
« Respuesta #13 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.





Saludos desde Logroño (España)

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
RE: Proyecto PicUSB
« Respuesta #14 en: 18 de Septiembre de 2005, 08:07:00 »
Saludos desde Logroño (España)