Utilizando la comunicación USB

Vamos a aprender a utilizar el módulo de comunicación “USB” para poder conectar a una computadora nuestra placa microcontrolada.

NIPLE permite comunicarse con amplia variedad de dispositivos mediante diferentes protocolos de comunicación. En este tutorial veremos como utilizar el Bus Serie Universal (USB) para poder interactuar con aplicaciones instaladas en una computadora.

El USB, es un bus estándar industrial que define los cables, conectores y protocolos usados en un bus para conectar, comunicar y proveer de alimentación eléctrica entre computadoras, periféricos y dispositivos electrónicos.

NIPLE incorpora la comunicación USB HID (Human Interface Device). Implementar la clase HID posee una característica que la hace muy interesante que es que la mayoría de sistemas operativos modernos implementan los controladores necesarios para poder comunicarse con ellos sin ser necesaria la instalación de ningún driver adicional por parte del usuario.

USB pinout (1)

NIPLE actualmente dispone de 20 microcontroladores de la familia 18F con capacidades USB:

  • PIC18F1220
  • PIC18F4431
  • PIC18F2455
  • PIC18F2620
  • PIC18F1320
  • PIC18F2420
  • PIC18F2550
  • PIC18F4525
  • PIC18F2331
  • PIC18F2520
  • PIC18F4455
  • PIC18F4620
  • PIC18F2431
  • PIC18F4420
  • PIC18F4550
  • PIC18F13K50
  • PIC18F4331
  • PIC18F4520
  • PIC18F2525
  • PIC18F14K50

Configuración del módulo

Para poder utilizar la comunicación USB es necesario declarar el módulo. Para esto seguimos la ruta: DECLARACIÓN DE DISPOSITIVOS >>> NUEVO DISPOSITIVO >>> COMUNICACIONES >>> USB.

configuracion

Los parámetros a configurar son:

  • DESCRIPCIÓN: es el nombre que aparecerá al conectar el dispositivo.
  • ID VENDOR: es el código del fabricante. Por defecto 1240.
  • ID PRODUCT: es el código del dispositivo. Por defecto 10.

Programación

Si no configuramos correctamente el CPU antes de declarar la comunicación, NIPLE nos obligará a hacerlo. En esta ventana debemos configurar un cristal de 20MHz y activar el módulo USB.

usb

Una vez que están todos los parámetros configurados deberemos inicializar la comunicación insertando el bloque “Inicializar”.

bloque_inicializar

Acto seguido es necesario insertar el bloque “Refrescar”. Esta acción mantiene activa la comunicación USB. Un dato a tener en cuenta es que la rutina dura aproximadamente 12uS y el tiempo entre refrescos debe ser menor a 50mS. Es decir que deberemos refrescar la comunicación cada 50mS como máximo, insertando bloques en toda la rutina.

bloque_refrescar

Como esto puede llegar a ser ineficiente, el método adecuado para realizar el refresco es utilizar un temporizador interno y generar una interrupción.

Configuración del “Timer 0”

Para no perder la conexión tenemos que refrescarla, una manera de hacerlo es mediante una rutina generada por la interrupción del timer 0.

Insertamos el temporizador interno TMR0 y lo configuramos como “temporizador”.

configuracion_timer

Cabe recordar que el tiempo entre refresco debe ser menor a 50mS, por lo tanto activamos la opción “Temporizar” y elegimos 10mS con una precisión aproximada.

Una vez ingresados todos estos parámetros, se activará el timer 0 y se generará la rutina de interrupción por desborde del timer.

Rutina de refresco

NIPLE genera de manera automática una rutina con varios bloques que son indispensables para el uso correcto de la interrupción.

rutina_refresco

El bloque condicional “tiempo_t0=1” es el que evalúa la finalización del tiempo configurado, es decir que transcurridos aproximadamente 10mS esta condición se hará verdadera y ejecutará el bloque siguiente.

En este punto deberemos incluir nuestro bloque de refresco de la conexión USB. Acto seguido deberemos incluir los bloques de “fin de interrupción” en ambas ramas del bloque condicional.

Enviar datos

Una vez completados todos los pasos anteriores podremos hacer uso de los bloques de envío y recepción de datos.

enviar

Para enviar datos debemos configurar algunos parámetros:

ID BUS: elección del bus de comunicación USB.
ACCIÓN: Enviar.
TIPO: Bytes .
CANTIDAD: elección de la cantidad de bytes a enviar.
BYTE: elección del tipo de dato a enviar (registro, decimal, hexadecimal, binario, ASCII).

En caso de ser necesario se puede activar una demora entre el envío de datos.

Recibir datos

Para recibir datos debemos configurar algunos parámetros:

recibir

ID BUS: elección del bus de comunicación USB.
ACCIÓN: Recibir.
TIPO: Fijo.
CANTIDAD: elección de la cantidad de bytes a recibir.

Por último será necesario indicar el o los registros donde se almacenarán los datos obtenidos.

Puede descargar los archivos que complementan al tutorial (código fuente, esquemas y datasheets) haciendo clic AQUÍ.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInShare on TumblrPin on PinterestDigg thisShare on RedditEmail this to someonePrint this page