USB interface for parallel LCDs

Adding a cheap LCD to your PC is a popular diy project for many beginners in electronics. The parallel port however, is dead. It's obsolete. It's big...ugly and just awful. The solution? Add a USB interface to your existing LCDs. The circuit interfaces to a standard HD44780 compatible LCD and emulates the CrystalFontz serial protocol over a virtual COM port created by the FTDI chip. This enables you to use already existing software to speak to the LCD, for example the popular program LCD Smartie. The circuit uses an AVR microcontroller, the tiny2313, and a USB chip from FTDI. The usb chip creates a virtual COM port on the computer. It has an external EEPROM programmable via USB to store information and settings. You can for example have the chip report back the name of your project when you plug it in. Very neat.

The backlight and contrast can be controlled from the computer. They are each connected to one of the PWM outputs on the AVR. Since the CrystalFontz protocol support software control of contrast and backlight, this seemed like a nice feature to add. Only LED backlights are supported, no EL backlights. The backlight can be powered from the USB port if its current draw is less than about 420 mA. If you need more, an external supply can be connected.

Schematic and board layout

This is the schematic of the circuit. It's made in EAGLE PCB. Click to enlarge.

Board top and bottom:

Current limiting resistor R6 is only necessary if you want to power your backlight via the USB port. If you are doing so, +5V and GND to the backlight can be taken from the AVR ISP connector. Just connect a wire from the ISP connector to JP1 (the backlight supply connector). If you are using an external supply for your backlight, connect that to JP1 and replace R6 with a piece of wire. Note that the ceramic resonator connected to the AVR is there for a reason. Do NOT use the internal RC oscillator! Its frequency stability is very poor. Oh, and remember to set the fuses to use an external crystal and also unprogram the CKDIV8 fuse. The byte value to set the fuses (low byte fuses!) is 0xEE.

Component list

Name   Value Package
R1   470 Ohm 1206
R2   1 kOhm 1206
R3 27 Ohm 1206
R4 27 Ohm 1206
R5 1.5 kOhm 1206
R6 10 Ohm (optional, se note above) 0204/7
R7 4.7 kOhm 1206
R8 470 Ohm 1206
R9 2.2 kOhm 1206
R10 10 kOhm 1206
R11 1 MOhm 1206
C1 100 nF 1206
C2 10 nF 1206
C3 33 nF 0805
C4 100 nF 1206
C5 100 nF 1206
C6 10 µF CT6032
C7 100 nF 1206
IC2 tiny2313 SO-20
IC3 93LCS56SN SO-08
Q1 BC337 (and NPN will do, just check max current) TO-92
XC1 6 MHz resonator (Murata CSTCC6,00MG-T)
XC2 8 MHz resonator (Murata CSTCC8,00MG-TC)
CON1 USB-B connector
JP1 1x2 pin header (backlight supply) 2.54 mm pin distance
JP2 1x16 pin header (LCD header) 2.54 mm pin distance
JP3 2x3 pin header (AVR ISP) 2.54 mm pin distance












Source code

The code is written in C and compiled on AVR-GCC. I have implemented as many of the CrystalFontz functions as is necessary to make the display work with LCD Smartie. There are still a few commands left to be implemented. If you download the source and implement them, feel free to email me () and I'll update the files. You will need to make adjustments in the source if your display size is something other than 20x4. You can also program the EEPROM connected to the FTDI chip using their Mprog utility. You will also need drivers for the FTDI chip. There are drivers available for nearly all modern operating systems.


AVR source code
EAGLE schematic and board layout files (EAGLE PCB can be found at the Cadsoft website)


Photos of my finished circuit.

Visitors since 22/2-05: