# Puerto USB con java



## hardwaresabs

Saludos amigos  . Soy totalmente nuevo en este foro y me alegra mucho que existan sitios como estos en donde nos ayudemos mutuamente.

Estoy realizando un proyecto en donde desde el Pic 18f4550 envio y recibo datos al puerto USB. Todo muy bien pero lo que no he podido montar es una aplicacion en java que lea y envie datos por dicho puerto. Estuve averiguando y encontre algunas Apis para manejo de este puerto pero funcionan perfectamente en Linux y yo estoy trabajando es en Windows Xp. He buscado mucho y lo que he encontrado de manejo de USB en java con Windows ha sido muy poco, complejo y no me ha funcionado.
Agradezco mucho si alguien sabe o tiene información, ejemplos y todo lo que haya de esto y me pueda colaborar, ya que me urge culminar esto con exito. 

Gracias y que Dios y la felicidad los acompañe.


----------



## _Beto_

Saludos hardwaresabs . . . 

Yo he programado el puerto USB con un PIC18F4550 y un programa en Java, por lo que comentas no tienes problemas con el PIC, tu problema es con el programa en Java, para realizar el programa necesitas utilizar la JNI que es una herramienta de Java que te permite utilizar codigo escrito en otro lenguaje en tus clases de Java. 
A grandes razgos lo que tienes que hacer es escribir el codigo de una clase Java para el USB declarando los metodos con el modificador "native", despues debes utilizar la JNI sobre el archivo de la clase Java, esto te dara como resultado un archvio *.h que contiene las definiciones de los metodos de tu clase pero en lenguaje C, posteriormente tienes que escribir la definicion de los metodos en un archivo *.c o *.cpp y compilarlo junto con el *.h como biblioteca de vinculos dinamicos o DLL.  En realidad el puerto USB lo debes programar en C dentro de la definicion de las funciones en el archivo *.c o *.cpp.

En efecto puede ser un metodo complicado y si lo usas debes tener mucho cuidado con las herramientas de programacion que utilizas, te recomiendo que para enlazar la DLL utilices el compliador de C de Visual Studio ( CL ) y que todo lo compiles desde la linea de comandos utilizando Makefiles.

. . .  espero que aun te sirva de algo


----------



## dangc27

Saludos Amigos
Me gustaria saber como lograr la comunicacion USB entre el pic 18f4550 y java en linux... q drivers usar, codigo, etc... He trabajado comunicacion USB con el pic 18f4550 en c# en windows, y ps ahi es muy sencillo, pero ahora para un proyecto me piden en linux y no tengo idea....


----------



## afprog

la única seria manejarlo por hid (human interfas device) paro no se que api se utilice en linux, o la otra seria programar los drivers que seria mas difícil creo. yo he podido hacerla comunicación pic-pc usb con java pero solo en windows.


----------



## dangc27

Gracias por tu respuesta.. pero me podrias explicar o dar una idea de lo q es el hid?


----------



## ja_fileiv2

Hola AFProg, como estas?

Te comento que lei en un post que vos pudiste realizar una comunicacion de un pic con java via el puerto usb, me podrias contar como hiciste? algun ejemplo de codigo? usaste las dll nativas de windows? porque vi el post de jPIC y el problema es que usa la dll de Microchip y queria si podia ser mas generico con alguna nativa de windows.

Desde ya, muchas gracias!


----------



## isabelp528

Hola, soy nueva en este foro, pero con respecto a la programacion del PIC 18F4550 para comunicarlo con usb con el computador me gustaria saber si el micro es mas facil programarlo en C o en assembler. Gracias


----------



## ja_fileiv2

A mi entender es mas facil programarlo en C. La diferencia esta en que al programarlo en ASM tenes un control total, en cambio en C por ahi hace cosas que vos no te das cuenta y tarda un poco mas. Lo bueno de C es que te encapsula muchas lineas de assembly en una funcioncita de C (mas alla de la portabilidad del C y otras cuestiones...)


----------



## danrod

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


----------



## DAV

Hola a todos, resulta que estoy realizando un proyecto y necesitaria saber el esquema electrico para montar un programador para el pic18f4550. Tengo el programa realizado con el compilador CCS y me he bajado el winpic800.
He visto que hay varios programadores como el pickit, el art2003 y el gtp-usb. Pero bueno, me gustaria saber, cual de ellos es mejor, y el esquema para montarlo.

Muchas gracias de antemano.


----------



## ja_fileiv2

yo me hice una especie de placa de desarrollo para el 18f2550, como el bootloader inicialmente lo tendras que cargar por medio de ICSP no tenes mas remedio que hacer uno como el que esta en la pagina de pablin.com.ar, que se utiliza con el winpic800 y con el puerto paralelo de tu PC. Luego para usar el bootloader, se utiliza una conexion dependiendo de FW de bootloader que hayas grabado por medio del cable ICSP. Yo actualemnte estoy trabajando en uno tipo ISP para los atmel tipo at89s52 con el PIC 18f2550 y conexion USB; pero nuevamente pasa lo mismo, la primer grabacion de bootloader debe hacerse por ICSP (cable paralelo).
Para este tipo de grabaciones en los pics se necesita una tension de programacion VPP que si no equivoco es de entre 11 y 13 volt, hay que re leer la hoja de datos.
Resumiendo... si necesitas programacion ICSP, con el de pablin va bien... www.pablin.com.ar


----------



## DAV

Muchas Gracias, ire probando y te comento.


----------



## DAV

Hola ja_fileiv2, he probado el pablin2 con ic-prog pero me salta un error de verificacion al grabar en 00000h, pero es que ademas no se enciende el led de PIC, porque puede ser? 

   He estado eyendo en foros y dicen que es por la Vpp baja, pero tengo puesto un potenciometro para regular la tension y subirla para probar, pero nada.


----------



## ja_fileiv2

Que raro! A mi me anda de maravilla! La tension VPP la logro con un 78L08, y claro esta la 5v con un 7805.

Mandame el esquematico que usas...reconoce el winpic tu micro?



DAV dijo:


> Hola ja_fileiv2, he probado el pablin2 con ic-prog....



Usa el winpic800!


----------



## danrod

En cuanto a programadores... yo estuve buscando programadores USB hace como 2 meses y pregunte... y la respuesta esta aqui en el foro.. buscar por PIC KIT 2 CLONE.... el firmware es gratuito y programa correctamente casi cualquier micro.......
PIC18F
Saludos


----------



## flucasf

Esta api de java para windows tiene un funcionamiento bueno y es simple de usar..
http://javausbapi.blogspot.com/

Hay un ejemplo como conectar un microcontrolador Freescale JM60 a traves de USB a la PC en un program en JAVA


----------



## ingenieria2008

Muy buen aporte funciona perfectamente...
quisiera lograr mayor velocidad de comunicacion como puedo hacerlo.
porque tan solo logro 60Kbps y eso es muy lento?


----------



## ja_fileiv2

Si requeris velocidad yo personalmente usaria la clase CDC (Communication Device Class). Esta clase te presenta un COM virtual en el SO. Entonces en java solo seria como abrir un puerto serie.


----------



## flucasf

Para lograr mayor velocidad debes usar transferencia bulk y configurar el tamaño de los buffers de los Endpoint a 64 bit. Logras una velocidad FullSpeed (1,5Mbit/seg).


----------



## roma3535

yo he logrado hacer interfaces con los JNI de java con el puerto paralelo.

lo que quisiera es q me ayudaran a poder crear la dll del pic18f4550 y ai poder sacar los datos


----------



## ByAxel

roma3535 dijo:


> yo he logrado hacer interfaces con los JNI de java con el puerto paralelo.
> 
> lo que quisiera es q me ayudaran a poder crear la dll del pic18f4550 y ai poder sacar los datos



Manejar USB con Java o C


----------



## jompi

afprog dijo:


> la única seria manejarlo por hid (human interfas device) paro no se que api se utilice en linux, o la otra seria programar los drivers que seria mas difícil creo. yo he podido hacerla comunicación pic-pc usb con java pero solo en windows.



Java es S.O. Independiente. No veo porque podria variar algo que funciona en MS Windows con respecto a Linux. Aunque podria no funcionar al revés (ja ja). Por qué a los electrónicos les gusta sufrir con MS?


----------



## kmiz

La javausbapi que se comenta mas atras, no funciona en linux, y la famosa jsr80 en teoria no funciona en windows.

Java es S.O. independiente, pero para cosas como los puertos serie o usb accede a librerias externas (normalmente independientes para cada S.O.)
Asi por ejemplo, la RxTx que es multiplataforma, tiene una dll para  windows y una so para linux que debes incluir (ambas) si quieres que ese soft funcione en ambos S.O.
Pero para Usb, yo al menos aun no he encontrado una libreria java comun para varios So. Si tu la conoces te agradeceria si me dices cual es.


----------



## andresaat

flucasf dijo:


> Para lograr mayor velocidad debes usar transferencia bulk y configurar el tamaño de los buffers de los Endpoint a 64 bit. Logras una velocidad FullSpeed (1,5Mbit/seg).



Hola, e probado usando el ADC del pic (18f2550) y mediante usb (bulk) enviando 4 canales de datos, visualizando las señales en visual basic, pero no puedo lograr velocidades de muestreo sobre las 500 Muestras/seg, que me podría estar pasando.
e configurado los Endpoint en 64b.
creo q mi problema está en el software, ya que e probado enviando 1 2 3 4..8 canales de datos (18f4550) y mantengo la misma velocidad, además e visto por ahí que los delay entre cada envio o lectira de los paquetes es en ms, se puede mejorar eso y como se configura...
saludos..


----------

