Conecta Tus Proyectos Al Puerto USB

13
Conecta tus proyectos al puerto USB ELECTRÓNICA / HARDWARE etiquetas: hardware, tutoriales HTTP://WWW.NEOTEO.COM/CONECTA-TUS-PROYECTOS-AL-PUERTO-USB/ El puerto serie y el puerto paralelo ya quedaron atrás. Con la superpoblación de ordenadores portátiles, el espacio de acción de los enlaces por puerto serie comienza a reducirse. Lo mismo ocurre con las conexiones por puerto paralelo. Ya ni siquiera los ordenadores de mesa traen un puerto de este tipo utilizado antiguamente para las impresoras. Hoy todo trae conectividad USB. El mouse, el teclado, la impresora multifunción, el teléfono móvil, el pen drive, el disco duro portátil, el Blu-ray Player, el módem, el router, todo se conecta a través de un puerto USB. En este artículo veremos la manera más sencilla de realizar un circuito con un microcontrolador, encender y apagar un LED desde nuestro ordenador portátil, en una aplicación hecha por ti mismo a través del puerto USB. Conéctate. Las antiguas conexiones de puerto serie o paralelo permitían velocidades de transferencia de datos de hasta 115 kbps., mientras que una conexión USB 1.1 alcanza los 1.2 Mbps. y una USB 2.0 logra 480 Mbps. Sin contar con la sencillez que supone utilizar un único tipo de conector para todos los periféricos necesarios, la posibilidad de conectar y desconectar sin tener que reiniciar el ordenador a cada cambio de equipo es una ventaja que ha llevado al trabajo móvil hasta su máximo potencial. Disponer de instrumentos de campo o de equipos portátiles que permitan monitorear el clima en el lugar de los hechos es, gracias al ordenador móvil, un avance que complementado con la practicidad de los puertos USB se ha ganado la preferencia de la mayoría de los usuarios. Es hora entonces que comiences a transitar el camino de las aplicaciones basadas en conectividad USB. El programa Proton Development Suite posee entre sus herramientas más importantes la que conocemos como EasyHID USB Wizard. Esta prestación se encarga de manera automática de generar los programas necesarios para poder utilizar los microcontroladores de la línea PIC 18F2455, 18F2550, 18F4455 y 18F4550, que será el que utilizaremos para nuestro ejemplo. El código para el PIC, lo genera tanto para Pic Basic Pro como para Proton, mientras que para el ordenador, se encarga de generar el código en Borland Delphi, Visual C++ y Visual Basic. Por supuesto que todos estos parámetros se pueden seleccionar mientras se avanza en la preparación del software. En apenas muy pocos pasos, ya podemos tener una aplicación HID USB lista para comenzar a cargarla de código. Tanto desde el Microcode Studio Plus como desde Proton Development Suite, al iniciar la aplicación, nos encontraremos con pantallas a las que les iremos cargando los datos que el sistema nos vaya pidiendo. En la primer pantalla puedes cargar el nombre del producto que estás desarrollando

Transcript of Conecta Tus Proyectos Al Puerto USB

Page 1: Conecta Tus Proyectos Al Puerto USB

Conecta tus proyectos al puerto USB

ELECTRÓNICA / HARDWARE

etiquetas: hardware, tutoriales

HTTP://WWW.NEOTEO.COM/CONECTA-TUS-PROYECTOS-AL-PUERTO-USB/

El puerto serie y el puerto paralelo ya quedaron atrás. Con la superpoblación de ordenadores portátiles, el espacio de acción de los enlaces por puerto serie comienza a reducirse. Lo mismo ocurre con las conexiones por puerto paralelo. Ya ni siquiera los ordenadores de mesa traen un puerto de este tipo utilizado antiguamente para las impresoras. Hoy todo trae conectividad USB. El mouse, el teclado, la impresora multifunción, el teléfono móvil, el pen drive, el disco duro portátil, el Blu-ray Player, el módem, el router, todo se conecta a través de un puerto USB. En este artículo veremos la manera más sencilla de realizar un circuito con un microcontrolador, encender y apagar un LED desde nuestro ordenador portátil, en una aplicación hecha por ti mismo a través del puerto USB. Conéctate.

Las antiguas conexiones de puerto serie o paralelo permitían velocidades de transferencia de datos de hasta 115 kbps., mientras que una conexión USB 1.1 alcanza los 1.2 Mbps. y una USB 2.0 logra 480 Mbps. Sin contar con la sencillez que supone utilizar un único tipo de conector para todos los periféricos necesarios, la posibilidad de conectar y desconectar sin tener que reiniciar el ordenador a cada cambio de equipo es una ventaja que ha llevado al trabajo móvil hasta su máximo potencial. Disponer de instrumentos de campo o de equipos portátiles que permitan monitorear el clima en el lugar de los hechos es, gracias al ordenador móvil, un avance que complementado con la practicidad de los puertos USB se ha ganado la preferencia de la mayoría de los usuarios. Es hora entonces que comiences a transitar el camino de las aplicaciones basadas en conectividad USB.

El programa Proton Development Suite posee entre sus herramientas más importantes la que conocemos como EasyHID USB Wizard. Esta prestación se encarga de manera automática de generar los programas necesarios para poder utilizar los microcontroladores de la línea PIC 18F2455, 18F2550, 18F4455 y 18F4550, que será el que utilizaremos para nuestro ejemplo. El código para el PIC, lo genera tanto para Pic Basic Pro como para Proton, mientras que para el ordenador, se encarga de generar el código en Borland Delphi, Visual C++ y Visual Basic. Por supuesto que todos estos parámetros se pueden seleccionar mientras se avanza en la preparación del software. En apenas muy pocos pasos, ya podemos tener una aplicación HID USB lista para comenzar a cargarla de código. Tanto desde elMicrocode Studio Plus como desde Proton Development Suite, al iniciar la aplicación, nos encontraremos con pantallas a las que les iremos cargando los datos que el sistema nos vaya pidiendo.

En la primer pantalla puedes cargar el nombre del producto que estás desarrollando

Page 2: Conecta Tus Proyectos Al Puerto USB

No cambies los números de la segunda pantalla, utiliza los que aparecen de muestra Como a este sistema lo estamos preparando para manejar y operar el receptor multibanda NeoTeo, los datos que le agregaremos estarán en coincidencia con esta aplicación. De allí surgen los nombres que ves en las imágenes. Aquí, en esta pequeña guía, sólo te daremos un ejemplo práctico para que te vayas familiarizando con el sistema y sus pequeños secretos para lograr una conexión exitosa. Las pantallas que comiencen a aparecer son las que ves en imagen; tú les colocarás el nombre de la aplicación que más desees. Lo que NO debes cambiar en la segunda pantalla son los números deVendor ID y Product ID. Estos números son asignados por el organismo que regula la autenticidad de los productos USB donde puedes comprar por U$S 4mil una membresía anual con números otorgados exclusivamente a tu desarrollo. Por lo tanto, nuestro consejo es que utilices los números de muestra que provee la aplicación para los proyectos domésticos que realices.

En las primeras aplicaciones te recomendamos utilizar los parámetros preestablecidos

Pantalla final de selección de PIC y destino de carpetas Luego avanzas a la pantalla que te permite ajustar los valores de tiempo en que el ordenador controlará la existencia de la conexión USB (Polling). Este punto es muy importante porque el ordenador interrogará por el enlace y, si no lo encuentra (Atached), te expulsará la conexión y quedarás inactivo (Dettached). Esta acción de comprobación puede ser realizada en forma constante mediante una interrupción con un Timer (TMR1) del microcontrolador o a través de un programa organizado y estructurado de manera apropiada dentro del PIC. El tamaño de los Buffers de entrada y salida quedará en 8 bytes. Hasta que no logres tener buena práctica en la realización de esta clase de aplicaciones, te recomendamos utilizar siempre los valores indicados por default. Son más que suficientes para las aplicaciones a nivel inicial como la que haremos en esta entrega.

Page 3: Conecta Tus Proyectos Al Puerto USB

En la pantalla siguiente puedes seleccionar el lugar donde guardarás los archivos que se cargarán en dos carpetas individuales: una para el programa base del microcontrolador y otra para el software de aplicación que utilizarás en el ordenador. Siempre trata de buscar una locación de nombre corto que se encuentre cercana al árbol raíz del disco duro porque con nombres extensos el compilador puede generar errores al armar los programas. Debajo de la selección del PIC, tienes un casillero para habilitar la generación automática de un programa manejado con interrupciones que mantengan “viva” la conexión USB durante todo el tiempo que estés conectado. Como puedes ver, no tendrás que preocuparte por realizar un programa con los tiempos bien ajustados. Listo, eso es todo. A la siguiente pantalla, el sistema comenzará a organizar y armar el código; tú sólo debes esperar a que termine su trabajo sin errores.

Una vez que hayas realizado estos cinco sencillos pasos, tendrás los programas listos para comenzar a trabajar. Lo primero que debes hacer es definir el tipo de hardware que utilizarás alrededor del microcontrolador seleccionado y en función de él organizar todo el resto de la aplicación. Es decir, en este caso, sólo colocaremos un pulsador y un LED como componentes adicionales y un LCD de 16 caracteres y dos líneas. Además de definir el hardware que utilizarás, también aquí se define la idea básica del software que crearás para utilizar y controlar tu aplicación desde el ordenador. Para nosotros es importante poder controlar de manera autónoma el dispositivo que hemos ideado con el PIC y poder hacerlo a través del ordenador, si es que lo deseamos. En este último caso, al conectarlo al ordenador portátil, los mandos en el hardware dejarán de funcionar y el LCD nos indicará que estamos conectados al ordenador y podremos así operar el hardware directamente a través del puerto USB.

El circuito En el circuito podemos ver claramente definidos los sectores más importantes del desarrollo: el PIC 18F4550, al centro de la imagen, el display LCD 16X2, el conector USB, el conector ICSP para poder programar el PIC en forma serial y sin necesidad de extraerlo del proyecto, el cristal de 20Mhz, el pulsador, el LED que elegimos de color verde y, por último, el ingreso de la señal de 5 volts provenientes desde el ordenador a través del conector USB. Muchos desarrollos basan su alimentación en esta tensión que extraen desde el conector. Un ejemplo de esto es el mecanismo de la carga de baterías de muchos MPX (MP3, MP4, MP5, etc.) o de algún GPS. Los quemadores de PICs suelen extraer alimentación desde este puerto y muchas otras aplicaciones también lo hacen. Debes tener en cuenta que esta salida de tensión tiene un máximo posible de 500 miliamperes; si te excedes de este consumo, puedes dañar la salida del puerto. En muchas oportunidades bastará con reponer un resistor fusible en el motherboard, pero te aconsejamos no jugar con esta suerte.

Page 4: Conecta Tus Proyectos Al Puerto USB

Además, debes recordar que en la tercera pantalla del EasyHID USB Wizard, por default, esta corrientese limita a 50 mA. Este pequeño valor será suficiente para extraer de allí la información que le daremos al programa del PIC para indicarle que nos estamos conectando al ordenador. Pero antes de escribir siquiera una línea de código de programa, debemos grabar el PIC con el firmware que nos generó elEasyHID (previo compilarlo y obtener el .HEX). Luego de grabarlo, procederemos a conectarlo al ordenador para que éste lo reconozca como un nuevo dispositivo HID (Human Interface Device) y para que estemos seguros de que no hayan existido errores en la generación del código, al menos, en el correspondiente al microcontrolador.

Las imágenes aparecerán como al instalar cualquier dispositivo USB

Page 5: Conecta Tus Proyectos Al Puerto USB

Por último, verificas que el dispositivo funcione correctamente El nombre del producto seleccionado en la primera imagen deberá aparecer al conectar el dispositivo avisando que ha encontrado un nuevo hardware. Luego de esto veremos el mensaje que indica que se trata de un dispositivo de interfaz humana USB. Si todo marcha correcto, finalizará la instalación indicando que el dispositivo se ha instalado con éxito y que funciona correctamente. Si todo es así, dentro de Configuración > Panel de Control > Sistema > Hardware > Administrador de Dispositivos, encontrarás una imagen como la que puedes ver a la derecha. Esto es válido para el SO XP.Importante: No intentes ponerte a jugar queriendo insertar y extraer varias veces el conector del ordenador ya que el dispositivo creado se identificará una vez y, para que el ordenador vuelva a reconocerlo, debes reiniciarlo o apagarlo y volver a conectarlo (a tu proyecto). Esto es debido a la estructura del programa que ya veremos cómo funciona y qué parámetros podremos aprender a dominar y manejar a gusto.

El programa dentro del PIC, en el código que genera EasyHID, tiene una lógica muy sencilla pero a la vez muy rígida y al principio complicada de entender. Pero una vez que comprendes el mecanismo de trabajo, tus desarrollos se harán realidad en pocos minutos. La rutina se basa en interrogar, en primera instancia, si el dispositivo está conectado al puerto USB. Si no lo está, queda en un bucle infinito del que no sale hasta detectar la conexión o hasta que se reinicia el PIC. Esto sucede en la última parte donde vemos la etiqueta AttachToUSB. Como puedes ver, allí se repite en un lazo infinito hasta que (UNTIL) el registro interno del PIC detecte la conexión al puerto USB. Para ser claro: si antes de esto pensabas poner un destellador, un blinker, un reproductor de MP3 o lo que se te ocurra dentro de tu PIC, debes saber que hasta que no lo conectes a un puerto USB, el código del programa quedará muerto en ese lazo.

Es por esto que con el simple agregado de una línea de código puedes esquivar esta atadura y salir del lazo. Para esto vamos a utilizar la tensión de entrada de 5Volts que trae el puerto USB, ingresando a través de R6 y R5 a RC0. Si RC0 no detecta tensión de entrada, deberá sacarnos del bucle y llevarnos hacia otro lugar del programa “que agregaremos nosotros” donde no sea necesario estar conectado a un puerto USB y donde podamos realizar cualquier función tal como hacemos con cualquier otro microcontrolador. Dentro de ese lazo cerrado que utilizaremos para realizar una actividad autónoma, podremos escribir/leer una memoria EEPROM, interpretar un teclado, manejar un display LCD y cualquier otra cosa a la que ya estemos acostumbrados.

Page 6: Conecta Tus Proyectos Al Puerto USB

De esta forma, cuando encendamos nuestro dispositivo, apenas caiga en la instrucción de verificar la inserción en el puerto USB, será enviado “fuera” de ese lazo cerrado y pasará a funcionar de manera autónoma. Nosotros hemos decidido mostrar este funcionamiento en el display LCD con el mensaje alusivo correspondiente. Es en esta sección del programa creada por nosotros mismos en la que delinearemos el funcionamiento autónomo del desarrollo. Aquí decidiremos qué hará por sí sola nuestra creación. Para el caso de muestra que nos convoca, sólo encenderemos y apagaremos un LED con un pulsador. Pero tú puedes expandir la aplicación a un sistema de adquisición de datos para aplicaciones de campo que guarde en una tarjeta SD o en memorias EEPROM de gran capacidad datos que después pueden ser analizados en laboratorio. O lo que sea. Nosotros, por ejemplo, utilizaremos esta base para controlar nuestro receptor de VHF-UHF que venimos entregando por secciones cada sábado. También puedes construir un Holter Cardíaco para monitorear pacientes con insuficienciacardiovascular. O lo que tu imaginación sea capaz de lograr.

La condición de funcionamiento de este sistema “dual” se basa en la colocación – en la mayor parte que sea posible – de la rutina que detecte que el USB se ha conectado, es decir, que RC0 se vuelve igual a uno. Aquí ocurrirán dos cosas: por un lado, el programa puede seguir siendo operado desde su teclado nativo (en nuestro ejemplo, un solo botón) o no. En nuestro ejemplo, el botón deja de funcionar; pasa a interesarnos el trabajo a través del ordenador. Y por el otro lado, ya debes ir preparando algunas líneas de programa para el software que hayas seleccionado. Nosotros hemos optado por una aplicación en VB6 que nos muestra varias cosas: por ejemplo, que el sistema se conecta y se desconecta del puerto de manera efectiva y sin inconvenientes (funcionamiento óptimo de la instrucción de PORTC.0). Luego vemos un botón que se encargará de prender y apagar el LED en el dispositivo y un círculo de color que emula esta acción, tal como sucede en el equipo mientras es controlado en forma remota. Por último, un pequeño texto que cambia de “Encendido” a “Apagado” acompañando la acción del LED.

Page 7: Conecta Tus Proyectos Al Puerto USB

Tal como se podía ver en el circuito, hemos conectado al LED en PORTC.1 y al botón en PORTC.2. La aplicación es sencilla pero intenta ser didáctica para que comiences a hacer tus primeros pasos en el manejo del puerto USB. Debes tener conciencia que dominar este puerto es la llave de salida para que tus diseños puedan tener aplicaciones exitosas, efectivas y prácticas, sobre todo, en el mundo de los ordenadores portátiles.

Volviendo a la programación del microcontrolador, que es la más compleja, debemos seguir aclarando puntos difíciles dentro de la rutina del servicio USB. Entre las cuestiones que suelen traernos dolores de cabeza están los “buffers” y su ubicación o numeración dentro del PIC respecto a la numeración que llevarán en el software dentro del ordenador. En Visual Basic, la posición 0 no se puede emplear ya que se la utiliza para el reporte del dispositivo, tal como lo expresa el código generado: … first byte is the report ID, e.g. BufferIn(0) the other bytes are the data from the microcontrolller… Por lo tanto, la enumeración debe iniciarse desde el 1 hasta el 8 y esto corresponderá dentro del PIC en posiciones de Buffer que irán del 0 al 7. Es decir, que lo que en el PIC sea USBBuffer[2] y sea un dato para transmitir, en VB6 será BufferIn(3). Compara entre los listados de los programas que te entregamos, observa este detalle y expándelo utilizando otros botones, otros LEDs, en fin, otros recursos para ampliar las prestaciones del dispositivo remoto desde el ordenador.

Observa que además tienes dos lazos cerrados que si el programa del PIC cae allí dentro se “cuelga” y no sale más hasta que lo reinicies. Estos puntos son los momentos en los que entrega los datos al bus desde el buffer (DoUSBOut) o aquellas instancias en las que solicita los datos cargados dentro del buffer (DoUSBIn). Si en cualquiera de los casos no encuentra valores, se quedará allí esperando que lleguen y tú debes advertirlo rápidamente para sacarlo de esa situación. Por eso te entregamos los programas completos. Para que puedas experimentar a partir de un modelo que sabemos que funciona. Ahora depende de tu imaginación y tu creación. Esto recién comienza, amigo. Proton eEasyHID lograron hacerlo muy fácil, ahora la conectividad USB está en tus manos.

Download :Soft para el PIC y el Ordenador

'****************************************************************

'* Name : USBNeoTeo.BAS <NOMBRE DEL DESARROLLO> *

'* Author : Mario G. Sacco *

'* Notice : Copyright (c) 2009 *

'* : All Rights Reserved *

'* Date : 13/11/2009 *

Page 8: Conecta Tus Proyectos Al Puerto USB

'* Version : 1.0 *

'* Notes : *

'* : *

'****************************************************************

'SELECCIONAMOS EL PIC Y LA FRECUENCIA DE TRABAJO (48Mhz PARA USB)

Device = 18F4550

Xtal = 48

'ESTA FILA LA GENERA EL MISMO "EASYHID USB WIZARD" Y LA COLOCA

'JUNTO A ESTE ARCHIVO .BAS DONDE TRABAJAREMOS LA APLICACIÓN

'(EN LA MISMA CARPETA)

USB_Descriptor = "Receptor2DESC.inc"

'SETEO EL LCD 16X2 PARA 4 CABLES

LCD_DTPin = PORTB.4

LCD_RSPin = PORTB.3

LCD_ENPin = PORTB.2

LCD_Interface = 4

LCD_Lines = 2

LCD_Type = 0

'LOS TAMAÑOS DEL BUFFER USB

Symbol USBBufferSizeMax = 8

Symbol USBBufferSizeTX = 8

Symbol USBBufferSizeRX = 8

Dim USBBuffer[USBBufferSizeMax] As Byte

'VARIABLES AGREGADAS POR MÍ PARA ESTE EJEMPLO

Symbol LED = PORTC.1 'LED SE VÁ A LLAMAR LA SALIDA DE PORTC.1

Dim LEDUSB As Bit 'ESTADO DEL LED (APAGADO O ENCENDIDO)

Dim A As Word 'VARIABLE MULTIFUNCIÓN

Dim B As Bit 'VARIABLE BIESTADO EN LA QUE RECIBO EL BOTÓN

'PARA PRENDER Y APAGAR EL LED

'REGISTROS Y BANDERAS

Dim PP0 As Byte System ' REGISTRO DENTRO DEL PIC USBPOLL STATUS

Symbol CARRY_FLAG = STATUS.0 ' EN ESTADO ALTO SI EL PIC NO TIENE

' EL CONTROL SOBRE EL BUFFER

Symbol ATTACHED_STATE = 6 ' SI USB ESTÁ CONECTADO

Cls 'LIMPIO DISPLAY AL INICIAR

Clear 'LIMPIO LA RAM AL INICIAR

A= 0:B = 0 'PONGO LAS VARIABLES A CERO

GoSub AttachToUSB 'ME VOY A VER SI ESTÀ CONECTADO

'AL INICIAR EL PROGRAMA

' *****************************************************************

' *****************************************************************

' * LAZO PRINCIPAL DEL PROGRAMA MIENTRAS SE ESTÁ CONECTADO A USB; *

' * RECUERDA QUE DEBES MANTENER LA CONEXIÓN "VIVA" CON LLAMADOS *

' * CONSTANTES A LAS RUTINAS USBPoll, USBIn or USBOut CADA ALGUNOS*

' * MILISEGUNDOS O MÁS *

' *****************************************************************

' *****************************************************************

ProgramLoop:

Print At 1,1," Conectado " 'ESCRIBO EN EL LCD QUE ENTRAMOS

Print At 2,1," al bus USB " 'EN EL LAZO DE CONEXIÓN USB

Page 9: Conecta Tus Proyectos Al Puerto USB

USBBuffer[0] = 0 'EL PRIMER BYTE ES DE REPORTE DE CONEXIÓN

USBBuffer[1] = LED 'EL SEGUNDO BYTE SERÁ EL ESTADO DEL LED

'Y HARÁ CAMBIAR EN LA APLICACIÓN EN VB6

'EL COLOR DEL SHAPE DEL LED DE ROJO A VERDE

'EL DE CONEXIÓN, CAMBIA AL DETECTAR

'"PP0 = ATTACHED_STATE"

GoSub DoUSBOut 'TRANSMITO LO ALMACENADO EN EL BUFFER

DelayMS 1 'DOY UN TIEMPO DE DEMORA

GoSub DoUSBIn 'ME VOY A LEER EL BUFFER DE ENTRADA

B = USBBuffer[2] 'UTILIZO OTRO REGISTRO DEL BUFFER

'(TENGO 8 POSIBLES) Y AL VALOR OBTENIDO LO

'CARGO EN LA VARIABLE "B"

If B = 0 Then 'SI NO HAY DATO INGRESADO

GoTo ProgramLoop 'CIERRO EL LAZO DE ESPERA

Else 'SI HAY DATO EN EL LUGAR CORRESPONDIENTE

Toggle LED 'ES PORQUE SE PULSÓ EL BOTÓN EN PANTALLA

End If 'ENTONCES CAMBIO EL ESTADO DEL LED

GoTo ProgramLoop 'CIERRO EL LAZO DESPUÉS DE TODO EL TRABAJO

' ************************************************************

' * RUTINA DE RECEPCIÓN DE DATOS *

' ************************************************************

DoUSBIn:

If PORTC.0 = 0 Then GoTo FUERA 'CONTROLO SI SE DESCONECTÓ DE USB

USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn

Return

' ************************************************************

' * RUTINA DE TRANSMISIÓN DE DATOS *

' ************************************************************

DoUSBOut:

If PORTC.0 = 0 Then GoTo FUERA 'CONTROLO SI SE DESCONECTÓ DE USB

USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut

Return

' ************************************************************

' * ESPERA HASTA QUE EL USB SE CONECTE *

' ************************************************************

AttachToUSB:

If PORTC.0 = 0 Then GoTo FUERA 'CONTROLO SI SE DESCONECTÓ DE USB

Repeat

USBPoll

Until PP0 = ATTACHED_STATE

Return

'******************************************************************************

'******************************************************************************

'** PROGRAMA QUE SE DESARROLLA DE FORMA AUTÓNOMA **

'******************************************************************************

'******************************************************************************

FUERA: 'RUTINA FUERA DEL CONTACTO USB

Cls 'LIMPIO LA PANTALLA AL INICIAR

FUERA2: 'COMIENZO LAZO CERRADO HASTA

'VOLVER A CONECTAR A USB

Print At 1,1," AUTONOMO " 'PUEDO IMPRIMIR

Print At 2,1," SIN USB " 'UN TEXTO EJEMPLO

If LED = 1 Then 'CONTROLAR EL ESTADO DE UNA VARIABLE

Print At 1,14,"LED" 'ESCRIBIR SEGÚN EL ESTADO

Print At 2,14,"ON " 'DE DICHA VARIABLE

Page 10: Conecta Tus Proyectos Al Puerto USB

Else 'SINO

Print At 1,14,"LED" 'ESCRIBIR OTRO TEXTO

Print At 2,14,"OFF"

EndIf 'FINALIZO LA RUTINA DE CONTROL

For A = 1 To 500 'VOY A CONTROLAR DURANTE EL TIEMPO

'QUE DETERMINE "A"

If PORTC.0 = 1 Then GoTo ProgramLoop 'CONTROLO SI SE CONECTÓ A USB

If PORTC.2 = 0 Then 'SI SE PULSA EL BOTÓN

DelayMS 400 '(DOY UN TIEMPO PARA ELLO)

Toggle LED 'CAMBIO EL ESTADO DEL LED

EndIf 'FINALIZA LA CONDICIÓN DE CONTROL DEL BOTÓN

DelayMS 1 'DURANTE ESTE TIEMPO EL LCD HABRÁ ESTADO

Next 'ENCENDIDO

Print At 1,1," " 'BORRO EL LCD

Print At 2,1," "

If LED = 1 Then 'INTERROGO EL ESTADO DEL LED

Print At 1,14,"LED" 'Y LO EXPONGO EN EL LCD

Print At 2,14,"ON "

Else

Print At 1,14,"LED"

Print At 2,14,"OFF"

EndIf

For A = 1 To 500 'VOY A CONTROLAR DURANTE EL TIEMPO

'QUE DETERMINE "A"

If PORTC.0 = 1 Then GoTo ProgramLoop 'CONTROLO SI SE CONECTÓ A USB

If PORTC.2 = 0 Then 'SI SE PULSA EL BOTÓN

DelayMS 400 '(DOY UN TIEMPO PARA ELLO)

Toggle LED 'CAMBIO EL ESTADO DEL LED

EndIf 'FINALIZA LA CONDICIÓN DE CONTROL DEL BOTÓN

DelayMS 1 'DURANTE ESTE TIEMPO EL LCD HABRÁ ESTADO

Next 'APAGADO

If PORTC.0 = 1 Then GoTo ProgramLoop 'CONTROLO SI SE CONECTÓ A USB

GoTo FUERA2 'CIERRO EL LAZO EJEMPLO DE ACTIVIDADES QUE

'PUEDE ESTENDERSE A LA CANTIDAD QUE NECESITEMOS

'DURANTE EL FUNCIONAMIENTO SIN CONEXIÓN USB

Page 11: Conecta Tus Proyectos Al Puerto USB

VISUAL

Attribute VB_Name = "HIDDLLInterface"

' this is the interface to the HID controller DLL - you should not

' normally need to change anything in this file.

'

' WinProc() calls your main form 'event' procedures - these are currently

' set to..

'

' MainForm.OnPlugged(ByVal pHandle as long)

' MainForm.OnUnplugged(ByVal pHandle as long)

' MainForm.OnChanged()

' MainForm.OnRead(ByVal pHandle as long)

Option Explicit

' HID interface API declarations...

Declare Function hidConnect Lib "mcHID.dll" Alias "Connect" (ByVal pHostWin As Long) As

Boolean

Declare Function hidDisconnect Lib "mcHID.dll" Alias "Disconnect" () As Boolean

Declare Function hidGetItem Lib "mcHID.dll" Alias "GetItem" (ByVal pIndex As Long) As

Long

Declare Function hidGetItemCount Lib "mcHID.dll" Alias "GetItemCount" () As Long

Declare Function hidRead Lib "mcHID.dll" Alias "Read" (ByVal pHandle As Long, ByRef pData

As Byte) As Boolean

Declare Function hidWrite Lib "mcHID.dll" Alias "Write" (ByVal pHandle As Long, ByRef

pData As Byte) As Boolean

Declare Function hidReadEx Lib "mcHID.dll" Alias "ReadEx" (ByVal pVendorID As Long, ByVal

pProductID As Long, ByRef pData As Byte) As Boolean

Declare Function hidWriteEx Lib "mcHID.dll" Alias "WriteEx" (ByVal pVendorID As Long,

ByVal pProductID As Long, ByRef pData As Byte) As Boolean

Declare Function hidGetHandle Lib "mcHID.dll" Alias "GetHandle" (ByVal pVendoID As Long,

ByVal pProductID As Long) As Long

Declare Function hidGetVendorID Lib "mcHID.dll" Alias "GetVendorID" (ByVal pHandle As

Long) As Long

Declare Function hidGetProductID Lib "mcHID.dll" Alias "GetProductID" (ByVal pHandle As

Long) As Long

Declare Function hidGetVersion Lib "mcHID.dll" Alias "GetVersion" (ByVal pHandle As Long)

As Long

Declare Function hidGetVendorName Lib "mcHID.dll" Alias "GetVendorName" (ByVal pHandle As

Long, ByVal pText As String, ByVal pLen As Long) As Long

Declare Function hidGetProductName Lib "mcHID.dll" Alias "GetProductName" (ByVal pHandle

As Long, ByVal pText As String, ByVal pLen As Long) As Long

Declare Function hidGetSerialNumber Lib "mcHID.dll" Alias "GetSerialNumber" (ByVal

pHandle As Long, ByVal pText As String, ByVal pLen As Long) As Long

Declare Function hidGetInputReportLength Lib "mcHID.dll" Alias "GetInputReportLength"

(ByVal pHandle As Long) As Long

Declare Function hidGetOutputReportLength Lib "mcHID.dll" Alias "GetOutputReportLength"

(ByVal pHandle As Long) As Long

Declare Sub hidSetReadNotify Lib "mcHID.dll" Alias "SetReadNotify" (ByVal pHandle As

Long, ByVal pValue As Boolean)

Declare Function hidIsReadNotifyEnabled Lib "mcHID.dll" Alias "IsReadNotifyEnabled"

(ByVal pHandle As Long) As Boolean

Declare Function hidIsAvailable Lib "mcHID.dll" Alias "IsAvailable" (ByVal pVendorID As

Long, ByVal pProductID As Long) As Boolean

' windows API declarations - used to set up messaging...

Page 12: Conecta Tus Proyectos Al Puerto USB

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal

lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal

lParam As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As

Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

' windows API Constants

Private Const WM_APP = 32768

Private Const GWL_WNDPROC = -4

' HID message constants

Private Const WM_HID_EVENT = WM_APP + 200

Private Const NOTIFY_PLUGGED = 1

Private Const NOTIFY_UNPLUGGED = 2

Private Const NOTIFY_CHANGED = 3

Private Const NOTIFY_READ = 4

' local variables

Private FPrevWinProc As Long ' Handle to previous window procedure

Private FWinHandle As Long ' Handle to message window

' Set up a windows hook to receive notification

' messages from the HID controller DLL - then connect

' to the controller

Public Function ConnectToHID(ByVal pHostWin As Long) As Boolean

FWinHandle = pHostWin

ConnectToHID = hidConnect(FWinHandle)

FPrevWinProc = SetWindowLong(FWinHandle, GWL_WNDPROC, AddressOf WinProc)

End Function

' Unhook from the HID controller and disconnect...

Public Function DisconnectFromHID() As Boolean

DisconnectFromHID = hidDisconnect

SetWindowLong FWinHandle, GWL_WNDPROC, FPrevWinProc

End Function

' This is the procedure that intercepts the HID controller messages...

Private Function WinProc(ByVal pHWnd As Long, ByVal pMsg As Long, ByVal wParam As Long,

ByVal lParam As Long) As Long

If pMsg = WM_HID_EVENT Then

Select Case wParam

' HID device has been plugged message...

Case Is = NOTIFY_PLUGGED

MainForm.OnPlugged (lParam)

' HID device has been unplugged

Case Is = NOTIFY_UNPLUGGED

MainForm.OnUnplugged (lParam)

' controller has changed...

Case Is = NOTIFY_CHANGED

MainForm.OnChanged

' read event...

Case Is = NOTIFY_READ

MainForm.OnRead (lParam)

End Select

End If

' next...

WinProc = CallWindowProc(FPrevWinProc, pHWnd, pMsg, wParam, lParam)

Page 13: Conecta Tus Proyectos Al Puerto USB

End Function