Sharp Rubber Duck

Automation Resources

I don't agree with what you say, but I will defend to the death your right to say it - Voltaire
 
 

Resources for Growing Quality Medical Marijuana

 

Parallel Port Relay Interface



Parallel Port Relay Interface

Below are three examples of controlling a relay from the PC's parallel printer port (LPT1 or LPT2). Figure A shows a solid state relay controlled by one of the parallel port data lines (D0-D7) using a 300 ohm resistor and 5 volt power source. The solid state relay will energize when a "0" is written to the data line. Figure B and C show mechanical relays controlled by two transistors. The relay in figure B is energized when a "1" is written to the data line and the relay in figure C is energized by writing a "0" to the line. In each of the three circuits, a common connection is made from the negative side of the power supply to one of the port ground pins (18-25).

There are three possible base addresses for the parallel port You may need to try all three base addresses to determine the correct address for the port you are using but LPT1 is usually at Hex 0378. The QBasic "OUT" command can be used to send data to the port. OUT, &H0378,0 sets D0-D7 low and OUT, &H378,255 sets D0-D7 high. The parallel port also provides four control lines (C0,C1,C2,C3) that can be set high or low by writing data to the base address+2 so if the base address is Hex 0378 then the address of the control latch would be Hex 037A. Note that three of the control bits are inverted so writing a "0" to the control latch will set C0,C1,C3 high and C2 low.

 

 


Reading Data From The Parallel Port

The diagram below shows 5 switches connected to the 5 input lines of the parallel port. An external 5 volt power supply is used to provide high logic levels to the input pins when the switches are open. Three 1.5 volt batteries in series can be used to obtain 4.5 volts which is close enough. The 330 ohm resistors in series with the port connections provide some protection in case a connection is made to the wrong pin. If you are sure of the connections, the 330 ohm resistors can be left out and the switches connected directly to the input pins. The negative side of the power supply should be connected to the ground point, or any pin from 18 to 25.

The following short QBasic program can be used to read the state of the switches. QBASIC.EXE can be found in the "OLDMSDOS" directory of the Windows 95/98 CD Rom. Note that there are three possible printer port address that correspond to LPT1, LPT2 and LPT3 and LPT1 is usually the one to use which is at address decimal 889. The program waits for the user to press the enter key before reading the state of the 5 input lines. The state of the 5 lines is received as a single 8 bit number between 0-255 which is stored as the value of (V). Each switch input represents a decimal value of 8,16,32,64 and 128 which correspond to pins 15,13,12,10 and 11. The last 3 bits (1,2 and 4) are not used and should return a high level, so the value received with all switches open should be 1+2+4+8+16+32+64=127. If a switch is closed and the input is at ground, the value will be 0 except for pin 11 which is inverted and yields a value of 128 and 0 when high, so the value received when all switches are closed should be 1+2+4+128=135.
-----------------------------------------------------------------------

CLS
DEFINT A-Z
Address = 889: REM 889 = port address, other addresses could be 633 or 957
PRINT "Press the enter key to read printer port pins (15,13,12,10,11)"
PRINT "A (0) reading indicates the pin is at ground level, (1) indicates"
PRINT "the pin is at a high level or unterminated."
INPUT A$
V = INP(Address)
PRINT V
P11 = 1
IF V > 127 THEN P11 = 0: V = V - 128
IF V > 63 THEN P10 = 1: V = V - 64
IF V > 31 THEN P12 = 1: V = V - 32
IF V > 15 THEN P13 = 1: V = V - 16
IF V > 7 THEN P15 = 1
PRINT
PRINT "Pin 15 ="; P15
PRINT "Pin 13 ="; P13
PRINT "Pin 12 ="; P12
PRINT "Pin 10 ="; P10
PRINT "Pin 11 ="; P11
END


Single Transistor Relay Toggle Circuit

The circuit below requires a double pole, double throw relay in conjunction with a single transistor to allow toggling the relay with a momentary push button. One set of relay contacts is used to control the load, while the other is used to provide feedback to keep the relay activated or deactivated. Several push buttons can be wired in parallel to allow toggling the relay from different locations.

In the deactivated state, the relay contacts are arranged so the 1000 uF capacitor will charge to about 2.7 volts. When the switch is closed, the capacitor voltage is applied to the transistor base through a 560 resistor causing the transistor to turn on and activate the relay. In the activated state, the relay contacts are arranged so the 3.3K resistor and 560 ohm resistor provide a continous current to the transistor base maintaining the activated state. While in the activated state, the capacitor is allowed to discharge to zero through the 1K resistor. When the switch is again closed, the capacitor will cause the transistor base to move toward ground deactivating the relay.

The circuit has three distinct advantages, it requires only a few parts, always comes up with the relay deactivated, and doesn't need any switch debouncing. However since the capacitor will begin charging as soon as the button is depressed, the button cannot remain depressed too long to avoid re-engaging the relay. This problem can be minimized with an additional resistor connected from the transistor base to ground so that the base voltage is close to 0.7 volts with the button depressed and the transistor is biased in the linear region. With the button held down, the relay coil voltage should be somewhere between the pull in and drop out voltages so that the relay will maintain the last toggled state. This worked out to about 820 ohms for the circuit I built using a 12 volt, 120 ohm relay coil and 2N3053 transistor. Temperature changes will effect the situation but the operation is still greatly improved. I heated the transistor with a hair dryer and found that the relay will re-engage with the button held down for approximately 1 second, but this is not much of a problem under normal operation.

The base address for LPT1 is stored in the BIOS data area at locatiion 0040h:0008h. If the value of the base address is zero, then the port is not installed. There is also a Configuration Word at 0040h:0010h, whose bits 14-15 holds the number of parallel ports installed.

 

Output Data Register
Receives the byte which is being printed. The address of the this register for LPT1 is stored in the word 0040h:0008h.

 
Valid HTML 4.01 Transitional
Google
 
Web www.emcarthur.com

Add to Your Social Bookmarks: -

Visitors Map
several Site Map - Press Room - Privacy Policy - Disclaimer
Copyright © 1998-2008 E. McArthur unless otherwise indicated
Unauthorized duplication or publication of any materials from this Site is expressly prohibited.
    Hosting by iPower