PIC16F84A como dispositivo USB

PIC16F84A as USB device

(Ahora también en PIC16F627A/628A/648A)

(Now in PIC627A/628A/648A too)

Conversor USB a paralelo para LCD

USB to LCD parallel Converter

 

 

 

 

Este proyecto es la base del desarrollo del programador de PIC's por USB de bajo costo UPP628.   

This project is the base for the development of the low cost USB PIC's programmer UPP628.

 

 

HIDLCD

         La idea de convertir un LCD paralelo a USB surgió para aprovechar las ventajas que éste puerto ofrece con relación al puerto paralelo.

         Los LCD's paralelo necesitan por un lado un puerto de impresora y por otro ser alimentados (normalmente desde un molex) de la fuente de alimentación del PC; se necesita por lo tanto un cable de 25 hilos para conectar el puerto paralelo (por donde se envían los datos) al LCD y uno de 4 (molex) para la alimentación. De esta forma perdemos el puerto paralelo o necesitamos instalar un puerto paralelo adicional en el ordenador si nuestra impresora usa esta conexión. Además, también perderíamos uno de los conectores de alimentación de la fuente de alimentación.

         La ventaja del puerto USB es obvia; con un cable de 4 hilos tenemos resuelto tanto el envío de datos como la alimentación.

        Desde que monté mi primer LCD por el puerto paralelo (hará unos tres años) me rondaba la idea de hacer 'algo' que me permitiera conectar uno de estos LCD's al puerto USB.

 

Me ha costado casi tres años desarrollarlo; dos años dándole vueltas a la idea y leyendo documentación; especificación USB 1.1, especificación HID, especificaciones USB UHCI,OHCI y EHCI ( http://www.usb.org ), estudio y aprendizaje de los ejemplos de Microchip para los PIC's que ya llevan el USB integrado ( http://www.microchip.com ), especificaciones de LCD's compatibles con el estándar 44780 de Hitachi,  y un largo etc. de documentación variada. Y un año aproximadamente en desarrollar el microprograma para el PIC; implementación del protocolo USB: codificación-decodificación NRZI, cálculo y análisis de CRC 16 tanto para su extracción de los datos recibidos como su inclusión en los datos enviados, extracción e inserción de 'bit stuffing' (inserción o extracción de un '0' cada seis '1' seguidos para provocar un cambio en el estado del bus), enumeración, y otro largo etc. La librería DLL para el jaLCDs (programa que saca información hacia el LCD, http://www.jalcds.de ); para ello me he apoyado en el libro USB Complete de Jan Axelson y en los ejemplos de su web ( http://www.lvr.com ); pruebas de compatibilidad; test de USB compliance, etc, etc,etc,... Todo ello aprovechando el tiempo libre que tengo (y robándole horas de sueño a la noche).

    Aunque ya existen PIC's y otros microcontroladores que tienen interfaz USB, son caros y algunos difíciles de conseguir, por ello me decidí ha desarrollarlo con el PIC16F84A que es bastante popular, tenia experiencia con él y suponía un reto para mí, además de hacer realidad una idea que como he comentado al principio, me rondaba en la cabeza desde hacia un par de años.

 

         Se trata de un dispositivo USB 1.1 implementado en 'firmware' que se identifica al S.O. como un dispositivo HID (Human Interface Device) y convierte los datos recibidos por el puerto USB en datos que se envían en modo paralelo de 4 bits, a un LCD compatible con el controlador HD44780 de Hitachi.

 

         Para el manejo del LCD es necesario el programa jaLCDs junto con el plugin correspondiente a este dispositivo concreto (es una DLL).

 

        El esquema eléctrico está aquí.

        El PCB aquí.

         

        Fotos del desarrollo del proyecto:

          

    En la foto se ve el PIC y parte del cableado en la placa de pruebas.

    El desarrollo del programa ensamblador para el PIC16F84A es muy complicado y requiere de un control muy preciso de las instrucciones ejecutadas en cada instante. Se necesita un cuarzo de 24Mhz (en un PIC de 20Mhz) y overclokear el PIC para obtener 6 MIPS de velocidad de proceso (reloj dividido por 4). Para implementar el interfaz USB 1.1 a baja velocidad, (1.5Mbps) tenemos cuatro instrucciones (6MIPS/1.5Mbps) para tratar un bit recibido o enviado por el bus. Esto hace que las temporizaciones sean muy criticas.

   At this picture you can see the PIC and wires into test board.

   The assembler program development for the PIC16F84A is very complicated and require a control very precise of the instructions that it execute at every time. We need use a crystal of  24 Mhz (in a PIC of 20 Mhz) and overclock the PIC to get 6 MIPS speed process (the clock is divided by four).

   To implement the low speed interface USB 1.1 at 1.5 Mbps we have four instructions (6 MIPS/1.5Mbps) to process a bit received or sent in the bus. This make very critics the timeouts.

 

 

          

 

   Instantánea en la que se muestra todo el conjunto, incluido el LCD de 4 filas por 20 caracteres.

   At this picture we can see all the project whit a LCD of 4 rows and 20 columns.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

          

   Otra imagen de como queda implementado un reloj digital en un LCD de 4x20.

   Another picture that show a digital clock in a 4x20 LCD.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    Una vez acabada la fase de desarrollo, se realizó una pequeña placa de circuito impreso en la que se montaron los componentes necesarios y los conectores para dotar al conjunto de la capacidad de ser enchufable a cualquier LCD compatible con el estándar 44780 (Conector superior de 16 agujeros).

    La tira de 5 pines que se muestra a la derecha es el interfaz ICSP (In Circuit Serial Programing) que permite programar el PIC sin necesidad de extraerlo de la placa.

 

   At end of the development stage, it have make a little PCB with the connectors for plug the standard 44780 compatible LCD (upper 16 holes connector).

   The 5 pin connector that we can see at right is the ICSP ( In Circuit Serial Programming) which allow to program the PIC without extract it from the board.

 

 

 

 

 

 

          

    Vista del conjunto con el chip colocado en su zócalo y el resto de componentes soldados.

    Encima del conector de 16 agujeros pueden apreciarse sendos puentes de tres patas cada uno que permiten invertir la polaridad de la tensión que alimenta la iluminación posterior del LCD según el modelo o fabricante de que se trate (patas 15 y 16 del conector, contando de izquierda a derecha).

 

   View with the chip at his socket and the rest of components welded.

   On top of 16 holes connector we can see two  3 pins jumpers which allow to invert the back light power polarity in the LCD, according to the manufacturer model (pins 15 and 16 left to right).      

 

 

 

 

 

 

 

 

 

      

 

    Vista posterior de la placa de circuito impreso en la que se puede apreciar el pequeño trimmer de 20K que permite regular el contraste de la pantalla LCD.

 

    PCB back view which we can see the little 20K trimmer that allow adjust the LCD contrast.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

          

 

   Detalle del conjunto, en el que el conversor USB a LCD paralelo, se encuentra ya enchufado.

 

   Whole detail which the USB to LCD parallel converter is plugged in.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Autor:    Ángel Baños Jiménez

 

Interesados contactar en  HIDLCD@telefonica.net

 To contact  HIDLCD@telefonica.net

 

Nº de visitas: