# USB-HID HIDComm.exe para 64 bits (win 7 y win vista)



## dnnyau (Mar 22, 2012)

Buen día!! tengo una situación realmente sencilla, yo ya he echo comunicacion por medio de HID de un pic18f4550 a visual basic y a labview con CCS. sin embargo esto solo en windows XP, ahora quiero trabajar esta comunicación en windows 7 y como requiero de un elemento HIDComm_b.exe para poder reconocer esta comunicación, este elemento no lo tengo y no encuentro compatible a 64 bits. es lo que me hace falta para poder resolver mi problema. así que si alguien de ustedes ya tiene este elemento que me hace falta se lo agradeceré que me lo pueda proporcionar, y así podre subir información completa a este foro de esta comunicación con estas dos versiones, y beneficiarnos todos!    

SALUDOS!  



el elemento HIDComm_b.exe esta en el archivo hidcomm.zip que lo pueden descargar del siguiente link: http://www.cattopasto.com/download.php#

sin embargo este es solo para windows XP y el que requiero debe ser compatible a 64 bits.

Gracias!


----------



## dinoelectro (Mar 22, 2012)

aqui tienes una plantilla muy sencilla de utilizar yo la he probado y funciona con visual basic 2010 y windows 7 de 64 bits

http://helmpcb.com/software/usb-hid-template-for-visual-basic-2005

saludos


----------



## dnnyau (Mar 27, 2012)

Dinoelectro excelente aportaciÓn muchas gracias!! 
Trabajare en ello...

Saludos!


----------



## Moyano Jonathan (Mar 28, 2012)

> aqui tienes una plantilla muy sencilla de utilizar yo la he probado y funciona con visual basic 2010 y windows 7 de 64 bits
> 
> http://helmpcb.com/software/usb-hid-...ual-basic-2005
> 
> saludos



Los has probado personalmente con 64 bits ? Yo por mi lado probé la librería mcHID.dll, que es la misma que se usa en el proyecto que pusiste y no me funcionó correctamente.
Saludos !


----------



## Meta (Mar 28, 2012)

Pues a buscar .dll que sean capaces de ejecutar los 64 bits a estas alturas. Me cuesta encontrarlo, tal vez aún no lo hayan hecho.


----------



## Moyano Jonathan (Mar 28, 2012)

> Pues a buscar .dll que sean capaces de ejecutar los 64 bits a estas alturas. Me cuesta encontrarlo, tal vez aún no lo hayan hecho.


 Yo ya las encontré, pero todavía no pruebo al 100% su funcionamiento.


----------



## Meta (Mar 28, 2012)

Tal vez no estén hechos con compiladores para hacer programas de 64 bits nativos. Tienen que recurrir técnicas para hacer sus propias librerías y luego adaptarla a la dll final. Tranqui, la era de los 64 bits está empezando, llegará.


----------



## dinoelectro (Mar 29, 2012)

hola amigos la utilice con windows 7 de 64 bits y visual basic 2010... incluso he echo algunas modificaciones sencillas, a la plantilla original.

 funciona correctamente!!!

para instalarla debes copiar el archivo HIDSoft.rar  (ojo: sin descoprimir el archivo) en las siguientes carpetas

C:\Users\...l\Documents\Visual Studio 2010\Templates
C:\Users\...\Documents\Visual Studio 2010\Templates\ProjectTemplates

incluyo ejemplos... saludos


----------



## Moyano Jonathan (Mar 29, 2012)

> hola amigos la utilice con windows 7 de 64 bits y visual basic 2010... incluso he echo algunas modificaciones sencillas, a la plantilla original.
> 
> funciona correctamente!!!
> 
> ...



Muchisimas gracias dinoelectro, voy a implementar lo que me decis a ver que tal anda.

Saludos !


----------



## dinoelectro (Mar 29, 2012)

dale moyano... ahi me avisas si encuentras  o mejoras algo!!

saludos



ojo: no deben descomprimir el archivo!!!


----------



## Moyano Jonathan (Mar 29, 2012)

Que es lo que pasa al descomprir ?


----------



## dinoelectro (Mar 29, 2012)

Las plantillas se deben instalar siempre comprimidas... solo copias el Zip en el directorio que te indique y listo; luego veras la siguiente figura al iniciar visual basic...







en el Solution Explorer te aparecera las instrucciones para que puedas utilizar la plantilla... 

el directorio que indique anteriormente es el que se aparece por defecto cuando instalas visual basic
en "Documents"

saludos!!


----------



## Moyano Jonathan (Mar 29, 2012)

Muchas gracias por la data, igual ahora encontré la forma de hacerlo andar a mi anterior proyecto en VC# ...ahora estoy creando una aplicación mucho más completa desde 0. Con la info que vos me pusiste voy a portar luego todo mi código para VB.net 2010.

Saludos !


----------



## dinoelectro (Mar 30, 2012)

estaremos esperando tu aporte moyano... de seguro nos beneficiaremos todos

PD: En que consiste tu proyecto??


----------



## Moyano Jonathan (Mar 31, 2012)

> estaremos esperando tu aporte moyano... de seguro nos beneficiaremos todos
> 
> PD: En que consiste tu proyecto??


 Telemetría y control de un posicionador robótico de 6 grados de libertad. Cuando tenga algo más desarrollado lo voy a ir subiendo...por el momento es diseño, corrección y volver a diseñar...pero de a poco lo voy a ir desarrollando.

Saludos !


----------



## fernandoae (Abr 4, 2012)

Buenas, gente estuve probando estos códigos en visual basic 2010 y tengo un problema.En mi caso programe el pic 18F2550 para que en funcion de dos bytes que recibe por hid controle el brillo de dos leds, los manejo mediante dos controles del tipo slider, funciona, pero cuando llevo alguno de los dos controles a 0 me apaga el otro, o sea... que cuando mando 0 en un byte me envia un cero al resto del buffer... por que puede estar sucediendo esto? si necesitan el ejemplo lo subo, saludos!


----------



## dinoelectro (Abr 4, 2012)

Yo he utilizado la plantilla HIDSoft.zip sin ningun problema;

Es dificil diagnosticar el problema que mencionas.. tal vez si subes el programa en visual basic y el programa de lado del microcontrolador podamos ayudarte,,

saludos!


----------



## fernandoae (Abr 4, 2012)

Gracias por responder tan rápido compañero, acá adjunto lo que tengo hecho en VB... del lado del pic se que no hay problemas porque lo tenia funcionando a la perfección en XP, ademas es bien sencillo lo que hace... recibe ocho bytes desde la pc y usa dos para manejar el modulo PWM del pic.
Lo mismo me pasaba si usaba un botón para enviar la intensidad, se veia un parpadeo y luego se apagaba, es como que se enviaba el byte y luego 0 
Me desorientó este comportamiento...


----------



## fernandoae (Abr 7, 2012)

Ya detecté el error, y uno de los ejemplos está mal 
Cuando uno pone Outbuffer(0) se envia completo el reporte, sin embargo, en un ejemplo dice algo como:

outbuffer(3)= "algo"
...Outbuffer(0)
...Outbuffer(3)
y ahi es cuando no funciona. Solo hay que colocar hidwrite....outbuffer(0) para que envie TODOS los datos.


----------



## Moyano Jonathan (Abr 7, 2012)

La verdad que es raro...yo tengo implementado algo así:

```
byte[] BufferOUT = new byte[EasyHID.BUFFER_OUT_SIZE];
            BufferOUT[0] = 0;      // Report ID
            BufferOUT[1] = 0x0A;   // Primero enviamos un comando de control al dispositivo: 
                                   // 0x0A (COMANDO_SALIDAS).
            BufferOUT[2] = 0x20;   // Luego enviamos los datos de control de los LED'S.
            EasyHID.Write(controlador, BufferOUT); // Envía los datos.
```

Y funciona de 10, lo primero que tenemos que enviar es el ReportID...Quizás tengas algún problema del lado del PIC.


----------



## fernandoae (Abr 7, 2012)

Gracias Meta pero ya lo tengo solucionado, quedó asi:

    Private Sub HScrollBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar1.ValueChanged
        BufferOut(0) = 0
        BufferOut(3) = HScrollBar1.Value
        hidWriteEx(VendorID, ProductID, BufferOut(0)) 'envia el buffer completo
    End Sub


El problema era que en uno de los ejemplos ponia:

hidWriteEx(VendorID, ProductID, BufferOut(0))
hidWriteEx(VendorID, ProductID, BufferOut(1))
hidWriteEx(VendorID, ProductID, BufferOut(2))

y esa no es la forma de enviar los datos al pic  o sea, no se hace para cada byte.


----------



## Meta (Abr 7, 2012)

Moyano Jonathan dijo:


> La verdad que es raro...yo tengo implementado algo así:
> 
> ```
> byte[] BufferOUT = new byte[EasyHID.BUFFER_OUT_SIZE];
> ...



Por lo que entiendo, acumula en el buffer 0, 0x0A y 0x20. Luego lo envías a la variable "controlador".

¿Es cierto?

Saludo.


----------



## fernandoae (Abr 8, 2012)

> Luego lo envías a la variable "controlador".


No, ahi ya envia el contenido del buffer al micro


----------



## Meta (Abr 8, 2012)

Ok.

La palabra _controlador_, ¿qué significa en este caso?

Pensé que lo que envía el micro es 
BufferOUT.


----------



## Moyano Jonathan (Abr 8, 2012)

> La palabra controlador, ¿qué significa en este caso?



Es un handler...pero como la variable estaba creada como private en Visual c#...no la podía usar en cualquier parte del programa. Así que un punto dado, usé una variable global pública que hace referencia al handle en cuestión...no es una solución elegante...pero es lo que funcionó jajaaj.



> > Luego lo envías a la variable "controlador".
> 
> 
> No, ahi ya envia el contenido del buffer al micro



Exacto, la función envía todo el buffer entero, luego el driver se encarga de administrarlo.


----------



## fernandoae (Abr 8, 2012)

A mi ya me funcionó asi simplecito como está más arriba, y si funciona para que seguir toqueteando código? jeje, yo con lo que se de vb me defiendo 
Una pregunta sobre el vb2010, que son los controles wpf, silverlight? y como uso los silverlight? porque por lo visto no se arrastran al form... y tengo unos que se ven muy bonitos.
Conocen sitios con controles gratuitos?


----------



## fernandoae (Abr 10, 2012)

Yo de nuevo, les comento lo que estoy implementando, un sistema domotico   ya me comunico con el pic por hid (envio y recivo) pero ahora me faltaria implementar un control por puerto tcp para manejar el pic (es un dimmer). Como diablos se hace en vb net 2010? llevo un rato probando y nada de nada!


----------



## fernandoae (Abr 12, 2012)

Ya lo solucione, ahora tengo un problemita de win7, cuando conecto el dimmer en un net samsung de las del estado (que va a ser mi servidor domotico) me tira errores al instalar los drivers, y es raro porque es HID. Puede ser por tener desactivadas las actualizaciones automaticas? (si le adelanto la fecha para que me deje activarlas se me bloquea)


----------



## electrobicho (Ago 13, 2012)

Hola, saludos a todos, e leído los comentarios y me interesa pasar de VB 6 a VB 2010, uso Proton y el easyhid, mi duda es,¿Se puede hacer esto con el easyhid y enlazarlo a visual basic 2010?supongamos que dejo el lado del pic tal como lo hace easyhid y lo modifico como siempre, pero en visual basic 2010 uso la plantilla generada, es mi duda, espero haberme explicado y gracias de antemano


----------



## dinoelectro (Ago 13, 2012)

la plantilla que he publicado te sirve para cualquier dispositivo HID, no importa que programes con proton, PIC-C, HI tech u cualquier otro lenguaje.. 

Tengo entendido que del lado del computador proton genera codigo valido para visual basic 5.0 unicamente..


----------



## elflamen (Sep 4, 2012)

Hola, 
he intentado instalar el template usb hid que menciona "dinoelectro" siguiendo las instrucciones y cuando voy a crear un "nuevo proyecto" en visual basic.net 2008 no veo el ícono del nuevo template en "mis plantillas" en la ventana de "new project"
Estaré omitiendo algún paso?
Muchas gracias y cordiales saludos, 
elflamen


----------



## dinoelectro (Sep 4, 2012)

hola, esta plantilla ha sido probada con visual basic 2010,... recuerda que debes copiar el archivo.rar
en los siguientes directorios:

C:\Users\...l\Documents\Visual Studio 2010\Templates
C:\Users\...\Documents\Visual Studio 2010\Templates\ProjectTemplates

sin descomprimir 

Suerte!!


----------



## elflamen (Sep 4, 2012)

Si, es lo que hago y no aparece el template en la ventana de new project.
Yo tengo VB 2008 y coloqué el archivo.rar en ambos directorios y no me aparece, sin embargo, debería funcionar también en la versión 2008, no se si esto le habrá sucedido a alguien más...
habrá que setar algo más en alguna ventana del compilador?
Muchas gracias!


----------



## dinoelectro (Sep 5, 2012)

talves esto te funcione:

descomprime el arvhivo y luego abre el proyecto con visual studio,  luego vas a ARCHIVO(FILE) y busca la opcion guardar como plantilla (o template si tienes un version en ingles)

saludos


----------



## junior perez (Sep 11, 2012)

dinoelectro dijo:


> aqui tienes una plantilla muy sencilla de utilizar yo la he probado y funciona con visual basic 2010 y windows 7 de 64 bits
> 
> http://helmpcb.com/software/usb-hid-template-for-visual-basic-2005
> 
> saludos



hola amigo estoi co n win 7 de 64 y no e conseguido lod drivers 



hola dinoelectro que deve aparecer despues de haber puesto el zip en templates muchas gracias por su ayuda estoi comenzando con la comuniccion usb


----------



## junior perez (Sep 11, 2012)

amigo al realizar la tarea me salen cuatro errores
Error	2	'$safeprojectname$' is not a valid name and cannot be used as the root namespace name.	HIDSoft
Error	3	'Sub Main' was not found in '$safeprojectname$.My.MyApplication'.	HIDSoft
Error	4	'Settings' is not a member of 'My'.	C:\Users\Junior\Downloads\prueva usb\My Project\Settings.Designer.vb	34	17	HIDSoft
Error	5	Character is not valid.	C:\Users\Junior\Downloads\prueva usb\My Project\Settings.Designer.vb	67	55	HIDSoft
en el archivo txt me dice esto 
*Copie $safeprojectname$.rar (sin descomprimir) en la carpeta My Documents
ese.rar es el mismo .zip por que no lo veo el .rar
grcias por   la ayuda! de antemano


----------



## dinoelectro (Sep 11, 2012)

hola junior... no tengo idea a que se deba el error, yo he probado las dos plantillas (usbTemplate.rar y HIDSoft.rar), las dos funcionan correctamente con visual basic 2010.. al copiar el archivo .rar podras ver una de las dos imagenes:


----------



## junior perez (Sep 11, 2012)

listo dino electro ya no me genera error el cuadro de form1 sale vacio me puede explicar que sigue.. gracias.. el proteus y el ccs ????


----------



## dinoelectro (Sep 12, 2012)

me alegro junior... ahora necesitaras programar (en PIC CCS, si quieres) una aplicacion que envie datos HID

por el momento no tengo a mano un programa para el micro.. pero uno de estos dias lo posteo, asi podras hacer pruebas

saludos


----------



## junior perez (Sep 12, 2012)

dale lo espero muchas garcias por su ayuda
ahh pero una pregunta 
el from no deveria tener los dos botones el de dispositivo conectado y desconectado
de antemano gracias dinoelectro..


----------



## jovier (Feb 9, 2013)

dinoelectro dijo:


> aqui tienes una plantilla muy sencilla de utilizar yo la he probado y funciona con visual basic 2010 y windows 7 de 64 bits
> 
> http://helmpcb.com/software/usb-hid-template-for-visual-basic-2005
> 
> saludos




holaa buenas tardes soy principiante para los pic ya descarguè la plantilla y si todo bien pero ahora me saliò una interrogante como hago el codigo! hay otro programa como mplap donde primero se programa el pic y despues para ver la demas infomacion con el visual ayudaa porque es un tema muy importante


----------



## jovier (Mar 10, 2013)

holaa he estado intentadon simularlo en proteus y visual basic pero no me sale el codigo al convertirlo a visual basic 

en donde sale simulado es  en en visual basic c# pero mi maestro lo quiere en visual basic y no se  apenas le voy entendiendo pues gracias por tu programa Moyano Jonathan apenas lo voy haciendo y gracias por la plantilla dinoelectro  he batallado mucho en entenderle en la comunicacion hid pero ahi voy  el codigo es de un sensor de temperatura y prender 3 leds batallo en la comunicacion devisual al proteus espero que me puedan orientar y ayudar gracias por la ayuda


----------



## dinoelectro (Mar 11, 2013)

En proteus la simulacion USB funciona, a veces, en sistemas operativos de 32 bits,... en realidad no te confies mucho. lo mejor es probar con el microcontrolador en mano, nada virtual.


----------



## jovier (Mar 12, 2013)

ok muchas gracias por contestar


----------



## 13Avallejo82 (Oct 17, 2013)

fernandoae dijo:


> Gracias por responder tan rápido compañero, acá adjunto lo que tengo hecho en VB... del lado del pic se que no hay problemas porque lo tenia funcionando a la perfección en XP, ademas es bien sencillo lo que hace... recibe ocho bytes desde la pc y usa dos para manejar el modulo PWM del pic.
> Lo mismo me pasaba si usaba un botón para enviar la intensidad, se veia un parpadeo y luego se apagaba, es como que se enviaba el byte y luego 0
> Me desorientó este comportamiento...



-----------

Hola fernandoae, agradeciendo el aporte del programa antes de nada y quisiera me puedas dar una idea sobre algo que estoy haciendo, para ser rápido te cuento que usando un PIC18F2550 he conectado 18LEDS en todos los puertos menos el A0, desde el puerto A1 en adelante uso 18 LEDS a las salidas; mediante el programa en VB.NET 2010 controlo el encendido y el apagado de los mismos vía USB, realizando además una verificación el VB de que realmente se encendio la zona y todo funciona perfectamente(para lo cual el PIC me envio un cero o un uno para cada zona); el problema que tengo es el siguiente: ejecuto el program el VB.NET enciendo ciertos LEDS y lo cierro (al VB.NETT) obviamente los LEDS quiero que se queden encendidos y es lo que sucede, pero cuando vuelvo a ejecutar el programa de VB quiero que me lea el estado de todos los LEDS ya que en el formulario tengo los 18 botones y 18 pictureBox que me cambian de color entre amarillo y negro según esté encendido o apagadas las zonas; entonces he probado un bucle For para que una vez el programa reconozca que esta conectado el dispositivo USB envíe automáticamente a mi PIC los códigos que uso para leer los estados  como tengo 18 leds con el bucle for remito 18 datos los cuales son leídos por el PIC y como en el PIC he programado un SELECT CASE cuando ve ese dato lee el puerto al que corresponde y me responde con una bandera si esta encendido o apagado, el bucle es el siguiente:


```
For i As Integer=27 to 54
        BufferOut(0) = 0
        BufferOut(5) = i
        Call WriteSomeData()
        aux_i = 54
Next
```

En la lógica del programa cuando tu envias un dato al PIC(clic a un boton) por USB y este te responde si encendio o no el LED salta automaticamente a la función que se denomina Public Sub OnRead(ByVal pHandle As Integer)... entonces yo suponía que si hago ese for cada que se envie el dato en cada recorrido al for iba a saltar a esa función y leerme el dato pero el problema que tengo es que solo me entra a la función en la ultima corrida del For, es decir para cuando i se encuentra en 54 y para este caso si me cambia el color del picturebox a amarillo si esta encendido el LED o negro si está apagado, pero para los anteriores no me salta a la función, probé con un Do while y me da el mismo problema que solo me lee para el ultimo dato del bucle. 

En vista de no ver resultado probé de otra manera haciendo una subrutina por cada zona con la siguiente estructura:

```
Sub Verifica_estado1()
        'verifica zona 1
        BufferOut(0) = 0
        BufferOut(5) = 37
        Call WriteSomeData()
        aux_i = 37
    End Sub
```

cuando me manda este dato y el PIC me responde entra a la funcion Sub OnRead(ByVal pHandle As Integer)... dentro de esta tengo esto para cada zona obviamente:

```
'ZONA 1
            If BufferIn(2) = 0 And aux_i = 37 Then
                Me.PictureBox1.BackColor = Color.Black
                z1 = False
                Me.Verifica_estado2()
            End If
            If BufferIn(2) = 1 And aux_i = 37 Then
                Me.PictureBox1.BackColor = Color.Yellow
                z1 = True
                Me.Verifica_estado2()
            End If
```

en esta parte  leo si en el BuferIn(2) me llego un cero (zona apagada) o un 1 (zona encendida) y según eso cambio de color entre negro y amarillo mi picture box y la bandera denominada z1 la pongo en el valor que debería tener en vista de que con el mismo botón mando a encender o apagar la zona con esa bandera; luego de esto como se ve llamo a la siguiente subrutina                 Me.Verifica_estado2() para que ahora me haga lo siguiente:


```
Sub Verifica_estado2()
        'verifica zona 2
        BufferOut(0) = 0
        BufferOut(5) = 38
        Call WriteSomeData()
        aux_i = 38
    End Sub
```

Y así hasta que BufferOut(5) = 54 en este caso me funciona correcto para las dos primeras zonas me las lee correctamente pero desde la tercera vez que mando a la subrutina siempre el buffer de entrada tengo como 1.

En mi PIC tengo un SELECT CASE para el valor que envío mediante mi BufferOut(5) un ejemplo es el siguiente:


```
DATO VAR BYTE
(...)
DATO=usbbuffer[4]

SELECT CASE DATO
    CASE 1
        'enciende zona 1
        PORTA.1=1
        SYMBOL Z1E = PORTA.1
        usbbuffer[0] =  0
        usbbuffer[1] = Z1E         
        GOSUB DoUSBOut     
        pause 100    
    CASE 2
        'apaga zona 1
        PORTA.1=0
        SYMBOL Z1A = PORTA.1
        usbbuffer[0] =  0
        usbbuffer[1] = Z1A         
        GOSUB DoUSBOut     
        pause 100    
(...)'desde aqui la parte que verifica estado de cada zona
    case 37
        'verifica estado zona 1
        SYMBOL Z1 = PORTA.1
        usbbuffer[0] =  0
        usbbuffer[1] = Z1        
        GOSUB DoUSBOut     
        pause 100
    CASE 38
        'verifica estado zona 2
        SYMBOL Z2 = PORTA.2
        usbbuffer[0] =  0
        usbbuffer[1] = Z2         
        GOSUB DoUSBOut     
        pause 100
END SELECT
```

Esta es mi inquietud ya que por lo demás el programa funciona perfectamente, agradecería mucho si me pueden ayudar con una idea que funcione para la lectura automática de los puertos, ah por cierto dentro del for y del do while incluso de las subrutinas he probado con         System.Threading.Thread.Sleep(200) para dar una pausa entre los envíos de datos al PIC pero no me ha funcionado tampoco, muchas gracias de antemano, adjunto los archivos y pido disculpas por tanto texto que he escrito jejee


----------



## acj8991 (Oct 24, 2013)

Compañero fernandoae queria preguntarle si la aplicacion que menciona mas arriba se realico en CCS y si es asi... usted como manejo el vector para recibir la informacion gracias


----------

