A description for do-it-yourself;
Device no more available,
see bottom of page for possible alternatives
This device
enables connecting of a
USB printer to an old-style parallel port.
LPTzUSB
kann be attached either directly or with an extension cable to computer's
printer port. (LPTzUSB has a 25-pin SubD male connector).
On the other face of LPTzUSB, a standard USB cable has to be connected
to the printer (LPTzUSB has a 4-pin USB-A socket).
The Host Controller used supports USB Full-Speed (12 Mbit/s)
and Low-Speed (1,5 Mbit/s) but not High-Speed (480 Mbit/s).
All known printers use USB Full-Speed.
The use of an external AC/DC adaptor is highly recommended.
It must supply (exactly or at least, depending on revision, see below)
5 V and at least 50 mA.
USB hubs between LPTzUSB and printer are currently not supported.
However, multi-function devices (with scanners, card readers, etc.)
are supported, but only for printing.
This device is not suitable for capturing
printer data with another PC!
For this purpose, another project named
LptCap exists.
That device allows, in conjunction with my service-like application software
SPE,
re-formatting of printer data to any Windows printer
(including PDF generators and FAX transmitters),
i.e. translation of printer languages.
This device is not suitable for the opposite direction!
For this purpose, USB→ParallelPrinter converters are widely available
for about 5 € each.
For connecting things other than printers, my project
USB2LPT exists.
Recommended for connecting USB printers to:
Windows95 systems (or older)
There must exist an appropriate printer driver
for the desired operating system!
Or the printer must support a common language like
PostScript, PCL, ESC/P or Text-Only
older PCs or laptops/notebooks
There are IMHO no ISA USB cards around
Parallel Printer Switch Boxes (2 PCs at 1 printer or similar)
You may combine with
USB to Parallel Converters too!
Pocket databases, ancient computers (Apple Classic, C64, Amiga, Atari…)
Bureau machines, cash stations, store-managing systems
Tool machines (e.g. for a protocol printer)
Not recommended for:
Computers with PCI slots should be upgraded with (cheap)
USB cards
Something else than printers.
USB memory will be supported in the future,
LPTzUSB will then simulate a remote computer for Total Commander.
USB dongles (software protection devices) cannot be supported ever!
DOS software that runs in a Windows' DOS box and will print to an LPT:
Here, a software-only solution is much better that redirects output to USB.
(VDD in preparation)
Successor model:
A successor of the device described below is in preparation using either
PIC32MX420,
AT32UC3B0128,
or
LM3S5632 microcontroller.
This will break the 30 kByte/s data transfer rate of the current design,
and is even cheaper.
Use as development kit:
Because this converter contains a well-known microcontroller
ATmega16 and a „bidirectional“ USB Host+Device controller,
an enthusiastic programmer can make very different things.
For example, a USB mouse to serial or PS/2 converter,
a USB keyboard to DIN or PS/2 converter, a copy device
from a USB scanner or digital camera to a USB printer (via Hub) etc.
Making the device
I have used professional PCBs. All production data is available
in Eagle (a German PCB CAD software) format.
For minimizing effort for reflow process, all SMDs are on one side only.
Parts list / Bill Of Materials
Bill Of Materials (BOM)
Device
Order code
Price
USB Host/Device controller SL811HST-AC
428-1464-ND
6,74+
Voltage regulator TPS76133
296-11010-1-ND
0,89+
Voltage regulator
µA78L05
0,12
MCU ATmega16
ATMEGA 16-16 TQ
2,55
Crystal 12000 kHz
12,0000-HC49U-S
0,23
SubD male plug 25-pin
D-SUB ST 25
0,10
LED red + LED green
LED 3mm rt
0,05
LED 3mm gn
0,05
USB socket Type A
USB AW
0,20
Hollow socket
HEBW 21
0,26
„Infantry“
PCC2233CT-ND
0,156+ *2
X7R-G0603 100n
0,05 *2
NPO-G0603 22p
0,05 *2
BCN16 22k
0,02
BCN16 22
0,02
SMD-0805 2k2
0,08 *2
BAT 54C
0,07
1N4148SMD
0,04
Housing
COM 938
0,30
PCB
ul-11.brd
5,00
USB cable
AK 672/2-2,0
0,60
Component placement
SMD components and crystal are placed as usual.
Known from USB2LPT there are two sockets that
will be placed as edge-mount devices although not suited for.
The SubD plug can be easily mounted in edge-mount technology.
Housing: Don't forget the holes for LEDs and the labels.
Programming
Programming of ATmega16 will be done with AC/DC converter and a special
parallel-port adapter
directly at the parallel port, e.g. with PonyProg.
The RESET connection will be done via internal solder bridge SJ2.
This bridge must be closed for programming
and may remain closed for operating the device.
All JTAG signals are fed to the SubD plug too (for programming and/or debugging),
but I've not used these pins anymore.
The PonyProg configuration bits must be set as shown in the following picture:
An AC/DC adaptor with regulated output voltage 5 V
is highly recommended!
The device is protected against wrong polarization but not against overvoltage!
Rev.1 (after 2007)
An AC/DC adaptor with at least 8 V output voltage is necessary.
Non-regulated output is sufficient.
For running of LPTzUSB, a RS232 to TTL converter is recommended too.
So you can observe data transmission and other useful things,
e.g. using HyperTerminal at 38400 Baud. See following picture:
Note that the ATmega16 program instructs HyperTerminal to draws the
colored picture. There is no special Windows program necessary for nice output.
The bytes of descriptors shown have following meaning:
USB address (without HUB always 01)
USB device class (printer: 07)
USB device subclass
USB protocol
Number of Configuration (mostly 01)
Number of Interface (mostly 00)
Number of Alternate Setting (mostly 00)
Number of Endpoints (not counting EP0)
EP0: Bits:
7: Direction (1=IN) [Not valid for EP0]
6: Toggle
5-4: Transfer type, 00=Control, 01=ISO, 10=Bulk, 11=Interrupt
3-0: Endpoint Number
EP0: FIFO size
EPx: Bits for next Endpoint etc.
EPx: FIFO size for next Endpoint etc.
Delivery
Although this device requires an AC/DC adaptor, supplying this heavy device
outside Germany is not recommended!
Frequently Asked Questions
Why I can't get such a device from my local computer store?
Such devices are not commonly useful:-)
Furthermore, you have the possibility to print to a file
and copy the .PRN file to a USB capable PC and print it out there.
Moreover, Ethernet to USB printer converters are widely available.
Making such a device is possible since one or two years(!)
Is there a high-speed version?
No. It's almost useless because data at parallel port is commonly much
slower than USB Full-Speed. And data must be transferred through the
microcontroller.
High-speed USB host controllers with microcontroller interface are
not known yet.
For Low-Speed there are much cheaper solutions around! Why bother?
There are no Low-Speed printers. Only mice and keyboards.
For Full-Speed simulation, all known microcontrollers are too slow.
What about the USB-ID (US$1500)?
Not necessary for host controllers.
A USB device that needs power – is that a bit brain-dead?
Attention: This is a USB host,
it must be able to supply other devices too!
Supplying power in reverse direction is never intended in the host-centric
USB specification.
Do I need a AC/DC adaptor?
Let's say: yes. Always.
You can watch the current voltage at HyperTerminal.
Can I clone this?
Yes. Only for assigning serial numbers I want feedback.
Dumb question (see questions above): Is the SL811HST used as USB Host?
Yes. This device was designed while microcontrollers with integrated
USB host/OTG controllers were not available.
A software-only solution like V-USB isn't possible because printers
use full-speed USB.
Does the converter work with any brand of USB printer?
Yes.
However, LPTzUSB (and AFAIK all other products listed at the end of this page)
does not translate printer language, so the parallel-printing device must
“speak” a printer language the attached USB printer understands.
Wheel re-invented! Sorry.
The company
C-Logic
in India has built such a device, as you can't see at this Cypress page.
For obtaining you should write to C-Logic.
lpt2usb.net
has one for 69 US$ (2010, VAT ??),
it's IMHO the cheapest commercial thing.
Note that all devices listed here obviously do
not translate printer languages!
If your application requires some processing of printer data, have a look to my
LptCap
project.
Keeping state-of-the-art
The following, more modern solutions, need power too.
The second solution needs another PC.
Development board with USB host controller
I would prefer using
Raspberry Pi.
All what you need is a connection between its GPIO port to a 25-pin male SubD connector —
or whatever your old computer needs.
To protect the 3.3 V GPIO against overvoltage and excess current,
use series resistors (few kΩ) or level converters.
Add an 8-bit latch, or, when some GPIO pins are missed,
a parallel-serial shift register (74LVC299) for the eight data lines.
With some extra circuitry, it will serve as a capture register
for the data for the very short (12 µs) STROBE pulse.
This schematic gives an idea on what's to do.
Then you need a piece of software continuously running on that Raspberry,
that will take the parallel port data, possibly filter them, and put them to your USB printer.
Typically this is best done with the “native” language
Python.
LptCap and a PC
If you already have a PC near your problem, you can capture parallel port data into USB
using this incredible simple circuitry,
with no 5 V ↔ 3.3 V level conversion hassle at all.
The PC then can process and output (redirect) to any printer.
The page above offers solutions ready to run on Windows.
The glue logic that is sometimes required when using an FT245R chip can be avoided
by using a dedicated microcontroller like ATmega32U4 on an Arduino Mini board
or a naked PIC16F2459 on a breadboard (that chip doesn't need a crystal).