Sei sulla pagina 1di 22

MARZO – JULIO 2010

UNIVERSIDAD POLITÉCNICA
SALESIANA
SISTEMAS MICROPROCESADOS I

TEMA: TUTORIAL
Comunicación JAVA USB PIC.

DAVID ESPÍN
ANDRÉS MOGRO
CHRISTIAN MORALES
HENRY SUNTAXI

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


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.
5.2_ Elegimos el archivo jpicusb.jar ubicado en la carpeta que acabamos de extraer, en mi
caso D:\Poryecto\jpicusb1.0\jpicusb.jar

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...
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.*;"
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\
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());
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.
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"

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

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:


13.2- Si presionamos el botón luego de conectar el USB:
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...


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
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
ESQUEMATICO CON PIC 18F4550
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
1. http://www.ucontrol.com.ar/forosmf/programacion-en-java/tutorial-
java-pic-usb-(primeros-pasos)/

2. Librerías del software MIkroCode.

Potrebbero piacerti anche