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

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

Adjuntos

  • comunicacion hid.rar
    907.3 KB · Visitas: 47
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.
 
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 :confused:
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:

Código:
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:
Código:
    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:
Código:
            '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:

Código:
    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:

Código:
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 :rolleyes:
 

Adjuntos

  • PROGRAMA PIC.rar
    150.4 KB · Visitas: 35
Última edición por un moderador:
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
 
Atrás
Arriba