about

 

 

LPT-16-O

16bit Output Interface for the Parallel Port

Connection

Through a DB25M connection to the Parallel Port.

Features

  • Easy connection to the PC without disassembling it.
  • Easily programmed
  • Easily expandable
  • Lack Power connection therefore a power supply is needed for the card.
  • The circuit was developed only to drive some relays and therefore only output is available

 

Schematic - click here

 

Note

The ULN2803 are there to sink more current than the 74LS573 can handle and to act as isolators to the output.

 

Function

Two latches provide 8 output ports each. They get there input ports from the parallel port data.

The two latches are each enabled from the Strobe (1) and the Autofeed (14) which are accessed from the control register.

The output of the latches is always enabled. The above schematic buffers the output of the latches using ULN2803 which are able to sink about 0.5A.

Power should be supplied from an external regulated voltage supply. Power connections are not shown.


Programming the card

The actual programming is shown below. It is basically outputting the data out to the latches, then enable one latch to read the input. You can mirror both latches by enabling both latches at the same time. Note that the latches are in total control of the status of the Strobe pin and the Autofeed pin.

On older computers and some BIOSes, the parallel port pins are pulled up and down during the booting process. This would result in the activating of lines from the card.

#include "dos.h"

#include "stdio.h"

void out16bit(unsigned char a, unsigned char b);

{

int base_address=0x378;
outportb(base_address+0,a); // a is now shown in the parallel port Data pins
outportb(base_address+2, 3); // C0 and C1 are low (active low)
outportb(base_address+2, 2) ; // C0 high and C1 low (first 74573 enables input latch)
outportb(base_address+2, 3); // C0 and C1 are low (active low)
outportb(base_address+0,b); // b is now shown in the parallel port Data pins
outportb(base_address+2, 3); // C0 and C1 are low (active low)
outportb(base_address+2, 1); // C0 low and C1 high (second 74573 enables input latch)
outportb(base_address+2, 3); // C0 and C1 are low (activelow)

}


Using the Parallel port

The Parallel port has a number of ports available to the developer namely :8 Input/Output data lines D0-D7 - using data register


4 Output ports C0-C3 - using the control register
5 Input ports S3-S7 - using the status register


Pinouts and functions are showed in the following table

 

Pin Number Parallel Port PinName Pin Register Name Comments
1 -Strobe C0 >0.5us to send
2 +Data 0 D0  
3 +Data 1 D1  
4 +Data 2 D2  
5 +Data 3 D3  
6 +Data 4 D4  
7 +Data 5 D5  
8 +Data 6 D6  
9 +Data 7 D7  
10 -ACK S6

Low Pulse ~5us,after accept

11 +Busy S7 High for Busy, offline or error
12 +Paperend S5 High for out of paper
13 +Selectin S4 High for printer selected
14 -AutoFd C1 Set low to autofeed one line
15 -Error S3 Low for error,offline or paperend
16 -Init C2 Set low pulse >50us to init
17 -Select C3 Set low to select printer
18-25 Ground    

Note that the Parallel port pin name denotes '+' active high and '-' active low

A good tutorial can be found at The Beyond Logic site

 

Programming the Parallel Port

Programming the parallel port is very easy.

First find the parallel port address that you are using :


378h - 37Fh Usual Address For LPT 1
278h - 27Fh Usual Address For LPT 2
3BCh - 3BFh other LPT

This will be your base address then you have access to the various registers as follows

Base Address + 0 Data Port

Base Address + 1 Status Port

Base Address + 2 Control Port


Now all you have to note is where the pins are active low or activehigh.



This pdf shows schematic as well as PCB masks.



Mail me for any queries or problems.

Back to the electronic page

   
1