Tutorial

24
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS I TEMA: TUTORIAL Comunicación JAVA USB PIC. DAVID ESPÍN ANDRÉS MOGRO CHRISTIAN MORALES HENRY SUNTAXI

Transcript of Tutorial

Page 1: Tutorial

UNIVERSIDAD POLITÉCNICA

SALESIANA

SISTEMAS MICROPROCESADOS I

TEMA: TUTORIAL Comunicación JAVA USB PIC.

DAVID ESPÍN

ANDRÉS MOGRO

CHRISTIAN MORALES

HENRY SUNTAXI

MARZO – JULIO 2010

QUITO -

Page 2: Tutorial

UNIVERSIDAD POLITECNICA SALESIANA

SISTEMAS MICROPROCESADOS I

TUTORIAL COMUNICACIÓN USB JAVA

Primera aplicación en Java para comunicarnos con nuestro PIC vía USB usando la interfaz

JPICUSB.

Herramientas:

JPICUSB 1.0 http://divideandconquer.com.ar/dyq/2009/01/jpicusb-comunicacion-pic-usb-

usando-java/

NetBeans IDE 6.5 http://www.netbeans.org/downloads/start.html?

platform=windows&lang=en&option=javase&version=6.5

A tener en cuenta:

Todo archivo Java debe contener una clase cuyo nombre sea idéntico al nombre del

archivo

La clase que contenga el método estático publico "public static void main(String[]

args)", puede ser usada como Main Class

Todos los métodos de la interfaz jpicusb son estáticos, por lo que no es necesario crear

una instancia de la clase para utilizarlos.

Pasos a Seguir:

1.- Creamos una carpeta donde alojaremos nuestra aplicación, en mi caso D:\Proyecto\

2.- Ejecutamos NetBeans IDE 6.5

3.- Creamos un nuevo Proyecto

Page 3: Tutorial

3.1- File -> New Project

3.2- Choose Project

Esto nos presenta una ventana donde la IDE nos presenta que tipo de proyectos puede crear,

nos inclinamos sobre "Java Application" de la categoría "Java".

3_2_ Name and Location

Acá proporcionamos la ubicación y nombre de nuestro proyecto

Project Name: se eligió JavaUSB

Project Location: D:\Proyecto\ la carpeta que creamos para alojar nuestro proyecto en el paso

1

3.3_ Presionamos en Finish así NetBeans crea el esqueleto para nuestro proyecto

4.- Extraemos jpicusb1.0.rar en nuestra carpeta D:\Proyecto\

Así obtenemos el que contiene todas las librerías USB e interfaz para poder comunicarnos con

nuestro PIC

5.- Agregamos la librería jpicusb a nuestro proyecto

5.1- En el árbol de nuestro Proyecto, presionamos con el botón derecho sobre Libraries y

elegimos la opción Add JAR/Folder.

Page 4: Tutorial

5.2_ Elegimos el archivo jpicusb.jar ubicado en la carpeta que acabamos de extraer, en mi

caso D:\Poryecto\jpicusb1.0\jpicusb.jar

Page 5: Tutorial

5.3- Ahora podemos corroborar que la librería está ubicada en árbol de nuestro proyecto bajo

el nodo Libraries

Ahora nuestra aplicación tendrá una interfaz grafica

6.- Borramos el archivo Main.java porque no nos sirve.

6.1- Botón derecho sobre Main.java -> Delete

7.- Creamos una interfaz con la JFC Swing

7.1- Botón derecho sobre el paquete javausb que está en "Source Packages" y nos dirigimos a

New -> Other...

Page 6: Tutorial

7.2- Nos dirigimos a la categoría "Swing GUI Forms"

7.3- Y después de leer las  descripciones nos inclinamos sobre "JFrame Form"

7.4- Rellenamos la información sobre el JFrame

Class Name: Principal

7.5- Y listo, le damos en finish, y vemos como nos creó un nuevo archivo Picusb.java

8.- Importamos la clase de la interfaz jpicusb. Esto lo hacemos en cada clase en la que vallamos

a utilizar la interfaz jpicusb.

8.1- Editamos el archivo Picusb.java dirigiéndonos a la pestaña "Source"

8.2- Debajo del texto "package javausb;" agregamos nuestro "import jPicUsb.*;"

Page 7: Tutorial

8.3- Cambiamos la carpeta donde nuestro proyecto se ejecutara cuando probemos nuestra

aplicación usando el IDE. Esto lo hacemos así nuestra aplicación encuentre el archivo

jpicusb.dll

8.3.1 Botón derecho sobre la raíz de nuestro proyecto "JavaUSB" y elegimos la opción

Properties.

8.3.2 Nos vamos a la sección "Run" y en "Working Directory" elegimos la carpeta jpicusb1.0, en

mi caso D:\Proyecto\jpicusb1.0\

Page 8: Tutorial

9.- Iniciamos el vinculo con la interfaz llamando su método load(), lo que nos habilitara llamar

a cualquier otro método. La llamada al método debe ser realizada solo una vez. Y puede ser

llamada en cualquier lugar del código.

9.1- Buscamos el constructor de nuestra clase "public Picusb()" y agregamos la línea

"iface.load();"

En versiones de jpicusb mayores a 1.0, se debe capturar la excepción lanzada por load, es

decir que en vez de la línea "iface.load();" se deben agregar las siguientes líneas:

        try{

            iface.load();

        }catch(Exception e){

            System.out.println("Error al cargar jpicusb.dll.");

            System.out.println(e.getMessage());

Page 9: Tutorial

            return;

        }

10_ Agregamos un Botón y un TextBox

o 10_1_ Nos dirigimos a la pestaña Design de Picusb.java y en la paleta de componentes,

elegimos "Button" de la categoría "Swing Controls" y lo agregamos a nuestro JFrame

o 10_2_ Repetimos el paso anterior solo que ahora agregamos un Text Area. Luego de

agregarlo, podemos cambiarle el tamaño.

Page 10: Tutorial

o 10_3_ Cambiamos el texto de los componentes y la variable que los identifica.

Texto del Botón: Elegimos el botón, presionamos F2 y escribimos su Label, se puso

"Comando FirmWare Version" a pesar de lo que se vea en la imagen (Botón) .

Variable: Apretamos con el botón derecho sobre el botón y elegimos "Change Variable Name"

Page 11: Tutorial

Hacemos lo mismo para cambiar el nombre de la variable del "jTextArea1" a "texto".

No le cambiamos el texto que contiene porque es al vicio.

11.- Agregamos código que se ejecutara al presionar el botón.

Lo que haremos será enviar el comando 99 al pic y el nos responderá con una cadena de 6

bytes indicando la versión de su firmware.

11.1- Hacemos doble click sobre el botón para que nos lleve a la porción de código que se

ejecutara al hacerle click

11.2- Agregamos el código necesario para que la respuesta del pic se escriba en el Cuadro

de Texto llamado "texto"

    private void botonActionPerformed(java.awt.event.ActionEvent evt) {

        //Creamos un arreglo de bytes de tamaño 64

        byte[] out = new byte[64];

        //agregamos el comando 99 en el primer byte del arreglo

        out[0] = 99;

        //configuramos el vid_pid del dispositivo así podemos usar las funciones "rápidas" de

la interfaz

Page 12: Tutorial

        iface.set_vidpid("vid_04d8&pid_000b");

        //configuramos la instancia del dispositivo así podemos usar las funciones "rápidas" de

la interfaz

        iface.set_instance(0);

        try {

            //iface.WriteRead(byte[] salida, int writeout, int readin, long timeoutmsec)

            //Parametro 1: arreglo de bytes con los datos a enviar (out)

            //Parametro 2: cantidad de bytes del arreglo que se enviaran vía USB (1)

            //Parametro 3: cantidad de bytes que se esperan de respuesta vía USB (6)

            //Parametro 4: tiempo máximo que se esperara al dispositivo en el envió y la

recepción (1 segundo)

            //Retorna: arreglo de bytes con la respuesta del dispositivo USB

            byte[] respuesta = iface.QWriteRead(out, 1, 6, 1000);

            //convertimos el arreglo de bytes recibido en una cadena con codificación utf-8

            String data_in = new String(respuesta, "utf-8");

            //verificamos que se hayan recibido datos

            if (data_in.length() == 0) {

                texto.setText(texto.getText() + "No se recibieron datos\n");

            } else {

                texto.setText(texto.getText() + "Datos recibidos:" + data_in + "\n");

            }

        } catch (Exception ex) {

            System.out.println("ERROR:" + ex.getMessage());

        }

    }

12.- Ejecutamos y probamos el código.

12.1- Presionamos en el botón para compilar, o presionamos F11 para compilar nuestro

código.

Page 13: Tutorial

12.2- presionamos en el botón de Play, o presionamos F6 para ejecutar nuestro código

recién compilado.

Pero ahora, NetBeans nos avisa que no puede encontrar la Main Class que nuestro proyecto

tenia, pues en el paso 6 borramos el archivo Main.java que contenía el método estático

"public static void main()", pero NetBeans nos avisa que encontró otra clase que tiene

dicho método, y que puede ser usada como Main Class de la aplicación, así que le damos a

OK para que la configure como Main Class y listo.

13.- Tenemos nuestro proyecto corriendo...

Y vemos algunas screens.

13.1- Si presionamos el botón cuando el USB no está conectado:

Page 14: Tutorial

13.2- Si presionamos el botón luego de conectar el USB:

Page 15: Tutorial

CODIGO RELIZADO EN MICRO CODE PARA COMUNICACIÓN USB

DEFINE OSC 48

DEFINE LOADER_USED 1

TRISB=0

TRISD=%01111111

S1 VAR PORTD.0

L1 VAR PORTD.7

USBBufferSizeMax con 8 ' maximum buffer size

USBBufferSizeTX con 8 ' input

USBBufferSizeRX con 8 ' output

LOW L1

' the USB buffer...

Page 16: Tutorial

USBBuffer Var Byte[USBBufferSizeMax]

USBBufferCount Var Byte

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

' * main program loop - remember, you must keep the USB *

' * connection alive with a call to USBService every couple *

' * of milliseconds or so... *

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

usbinit ' initialise USB...

ProgramStart:

;gosub DoUSBIn

;PORTB=USBBuffer[0]

;IF S1=1 THEN USBBuffer[0]=55:HIGH L1

;IF S1=0 THEN USBBuffer[0]=99:LOW L1

USBBuffer[0]=99

USBBuffer[1]=99

USBBuffer[2]=99

USBBuffer[3]=99

USBBuffer[4]=99

USBBuffer[5]=99

USBBuffer[6]=99

USBBuffer[7]=99

gosub DoUSBOut

PAUSE 500

Page 17: Tutorial

LOW L1

goto ProgramStart

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

' * receive data from the USB bus *

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

DoUSBIn:

USBBufferCount = USBBufferSizeRX ' RX buffer size

USBService ' keep connection alive

USBIn 1, USBBuffer, USBBufferCount, DoUSBIn ' read data, if available

return

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

' * wait for USB interface to attach *

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

DoUSBOut:

USBBufferCount = USBBufferSizeTX ' TX buffer size

USBService ' keep connection alive

USBOut 1, USBBuffer, USBBufferCount, DoUSBOut ' if bus available, transmit data

HIGH L1

Return

Page 18: Tutorial
Page 19: Tutorial

ESQUEMATICO CON PIC 18F4550

Page 20: Tutorial

CIRCUITO ARMADADO EN EL PROTOBOAR

CONCLUCIONES

Ahí que seguir cada paso correctamente para lograr la comunicación y es importante tanto el programa realizado en java en este caso en NETBENs, la programación para el PIC 18f4550 se la realizo en micro code ya que este es mas factible realizar la comunicación y generar los drivers necesarios para la comunicación USB

En microbasic se trato de realizar la comunicación pero no se obtuvieron resultados favorables.

BIBLIOGRAFÍA

Page 21: Tutorial

1. http://www.ucontrol.com.ar/forosmf/programacion-en-java/tutorial-java-pic-usb-(primeros-pasos)/

2. Librerías del software MIkroCode.