jueves, 10 de diciembre de 2009

Practicas con puerto USB con PIC 18F2550

Que tal!!!!

Les tengo unos ejemplillos con el pic 18f2550 usando el USB en modo CDC, osea un COM virtual desde un PIC!!

Aqui les dejo el Firmware (que fue una adaptacion de un programita que encontre por ahi), el Software en la PC y el driver.

Descarga aqui

En el firmware vienen 2 proyectos hechos con el compilador CCS desde el MPLAB, en el primer ejemplo (usb1.c) viene el test de la comunicacion usb-serial y encendie 2 leds con una combinacion de letras. En el segundo ejemplo (usb2.c) viene la lectura del puerto B que se envia a la PC y desde la PC se envia el tiempo en alto de un PWM q controla la intensidad de un led.

Los 2 ejemplos los puedes probar con la terminal serial de tu preferencia. Pero para el segundo hice un programita en Visual Basic .NET 2005, en donde con una barra de desplazamiento controlas el PWM y en un label ves la lectura del PORTB, ahi lo puedes poner bonito y q muestre la imagen de los 8 leds o cosas asi.

Tambien viene el driver para q lo instales cuando te lo pida windows al conectar el PIC ya programado a un puerto USB, que de hecho lo puedes ver como un Puerto COM Virtual desde el Administrador de Dispositivos de tu PC.

Ah y ademas en el mismo driver pueden cambiar los datos del dispositivo por el que kieran, por ejemplo: DESCRIPTION="Karlitos USB2SERIAL", solo verifiquen que los datos coincidan con los del archivo usb_desc_cdc.h del proyecto del pic, por ejemplo el vendor_id, el product_id, etc.

Saludos!!

10 comentarios:

  1. Hola,

    Siempre veo que para comunicarse con el puerto USB se usa un PIC. ¿Cual es la razon de esto?. Es decir, no existe alguna funcion de algun compilador de un lenguaje que permita escribir directamente? asi como con el puerto paralelo.

    Disculparas mi pregunta tipo-foro =P

    ResponderEliminar
  2. En realidad la unica razon que encuentro es la ACCESIBILIDAD, tanto para el hardware como para el software y el firmware.

    Primero el PIC es barato, aqui en mexico hay varias tiendas en donde puedes comprarlos a precios accesibles, como aqui: www.cosasdeingenieria.com, además el pic ya viene preparado con un modulo especifico.

    Segundo el programa en el PIC (firmware) es mucho mas facil manejarlo desde lenguaje C cuando se trata de hacer cosas como esta, porque ya vienen las librerias hechas e incluidas en el IDE, y todavia mas si esa IDE es gratuita como lo es MPLAB y sus versiones estudiantiles para pic18, pics24, dsPic, etc

    Tercero, dado que lo mas problematico (en cierto sentido) ya lo resuelve el micro y sus librerias, lo unico q hace falta es la parte del software y es mejor elegir un lenguaje q nos permita configurar nuestra interfaz a la PC (pudiendose ser grafica o no) de manera que se ajuste a nuestras necesidades, y de esto tambien hay versiones gratuitas, como la version EXPRESS de Visual Studio.

    Y bueno los PICs no son los unicos en que puede manejarse la comunicacion USB, hay muchos mas de otras familias, de otras empresas, de muchos lados. Pero siempre es mas facil encontrar informacion de lo que es mas popular y en este sentido creo q los PICs lo son.

    Ahora la comunicación USB no es tan transparente como la del puerto paralelo ya que en la USB, se tiene un protocolo establecido y estandarizado, se comunican cierto tamaño de paquetes en cierto lapso de tiempo y la informacion de cada paquete corresponde al tipo de dispositivo que se esta conectando (de almacenamiento masivo, de interrupcion, de flujo continuo, etc.) y del tipo de sistema q se usa, (host, cliente, on-the-go, etc)

    Si necesitas mayor informacion tecnica la puedes encontrar aqui
    www.usb.org
    o leerte el libro
    "usb complete"

    En realidad esta nota fue creada estilo "COPY-PASTE" para los q no kieren perder el tiempo en chutarse un manual de mil ocho mil paginas para ver algo funcionando. Aunque siempre es importante saber el porque y como.

    Ojala halla sido un poco mas ilustrativo

    Saludos!


    No olviden visitar www.cosasdeingenieria.com :)

    ResponderEliminar
  3. quisiera prender un led con un programa hecho en visual basic, pero no conosco la forma de enviar un bit al pic para poder prenderlo... espero que alguien me pueda ayudar porfavor

    ResponderEliminar
  4. AMIGO TRATO DE SIMULARLO CON PROTEUS PERO NO SE COMUNICA

    ResponderEliminar
  5. karlitos, ya logre comunicarlo pero me doy cuenta que si compilo yo el proyecto no funciona bien.. solo funciona bien con el hex qe ya viene compilado.. sera que no subiste las librerias que usaste ?

    ResponderEliminar
    Respuestas
    1. buen dia amigo, yo intenso simularlo en proteus, podrias ayudarme por favor, como hiciste? te agradeceria eternamente ya que lo necesito para mi tesis...gracias

      Eliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Buen día, muchas gracias por su inteseante aporte, bajé los tres archivos pero no veo el diagrama del circuito, podría enviarme el diagrama para la emulación con Proteus o cualquier otro que usted nos pueda ofrecer. Gracias por anticipado

    ResponderEliminar
  8. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  9. Buen aporte.... un poco mas avanzado que otros tutoriales que vi hasta el momento

    ResponderEliminar