Controlling LEDs (Light Emiting Diodes) with Parallel Port
Introduction:
This article is on reaching ports, controlling external devices and
electronics. Perhaps you are asking "why?" The idea is simple: It is to
achieve something that is real, physical and emotional. As a freelancer I
have been coding for about 4 years for my own interest. At first I
started with C but now for the GUI, I use mostly C# .
PART 1 - Some basics of a parallel port:
What is a port?
A port contains a set of signal lines that the CPU sends or receives
data with other components. We use ports to communicate via modem,
printer, keyboard, mouse etc. In signaling, open signals are "1" and
close signals are "0" so it is like binary system [See Part 3]. A
parallel port sends 8 bits and receives 5 bits at a time. The serial
port RS-232 sends only 1 bit at a time but it is multidirectional so it
can send 1 bit and receive 1 bit at a time...
Parallel Port - Data Ports:
In my application, I used the data ports which can be seen in the picture from D0 to D7
Parallel Port - Status Ports:
These ports are made for reading signals. The range is like in data
ports which are S0-S7. But S0, S1, S2 are invisible in the connector
(See my picture in the article). I mentioned these are for reading
signals but S0 is different, this bit is for timeout flag in EPP
(Enhanced Parallel Port) compatible ports. The address of this status
port is 0x379 . this will always be refer to "DATA+1" and it can send 5
numeric data from the 10 - 11 - 12 - 13 - 15 th pins. So how can we
reach the data ports? It is simple: every parallel port has an address.
In Windows 2000, you can see yours by Settings > Control Panel >
System > Hardware > Device Manager > Ports (COM & LPT) >
Printer Port(LPT1) > Properties = in Resources > Resource Setting
and you can see your address for your parallel port. For Ex: Mine is
0378-037F. This is hexadecimal like in math (mod 16). 0x378 belongs to
888 in decimal form. In this way you can look for your com port or game
port addresses. Let's enlighten these bits with a printer example:
S0: This bit becomes higher (1) if a timeout operation occurs in EPP mode.
S1: Not used (Maybe for decoration :))
S2: Mostly not used but sometime this bit shows the cut condition (PIRQ) of the port
S3: If the printer determines an error it becomes lower (0). Which is called Error or Fault
S4: It is high (1) when the data inputs are active. Which is called Select
S5: It is high(1) when there is no paper in printer. Which is called Paper End, Paper Empty or P Error
S6: It sends low impact signaling when the printer gets a one byte data. Which is called Ack or Acknowledge
S7: This is the only reversed pin on the connector (see my
table in the article) . If the printer is busy and it cannot get any
additional data this pin becomes lower. Which is called Bus
Parallel Port - Control Ports:
This port usually used for outputting but these can be used for
inputting. The range is like in data ports C0-C7 but C4, C5, C6, C7 are
invisible in connector. And the address for this is 0x37A
C0: This pin is reversed. It sends a command to read D0-D7 on the
port. When the computer starts it is high in the connector. Which is
called nStrobe
C1: This pin is reversed. It sends a command to the printer to
feed the next line. It is high in the connector after the machine
starts. Which is called Auto LF
C2: This pin is for reset the printer and clear the buffer. Which is called nInit, nInitialize
C3: This pin is reversed. Sends a high(1) for opening data
inputs. It is low after the machine starts. Which is called nSelectIn
C4: Opens the cut operation for the printer. Not visible in the connector...
C5: Sets the direction control in multidirectional ports. Not visible in the connector...
C6: Not used and also Not visible in the connector...
C7: Mostly not used but it is used as a C5 in some ports. Not visible in the connector...
Parallel Port -Ground Pins:
These are (G0 - G7) the pins from 18 to 25 . These are mostly used for completing the circuit.
After these I used data ports in my application because there are
reversed pins in control and status ports. Here is an explanation for
reversed pins: While you are not sending any signals to the data port it
is in closed position like "00000000" so the 8 pins have no voltage on
it (0 Volt) .If you send decimal "255" (binary "11111111") every pin
(D0-D7) has a +5 Volt... On the other hand, if I used control ports,
there are reversed pins which are C0, C1 and C3 so while we send nothing
to the control port its behaviour is "0100" in binary (decimal "11")...
If I receive e-mails from you I can make apps using control and status
ports...
PART 2 - Electricity
I made an electrical circuit to show you how our circuit work. It is shown in the picture...
Schematic Diagram of the circuit:
Original Circuit after making it on a board.
Ok then let's find out what we have to supply:
1 or 2 meter parallel port cable (3 mt is acceptable but the voltage drops from 5 V to 4.7 V)
9 assembling cables (8 go to resistance and 1 go to ground)
A Breadboard (white one in the picture) or you can solder the cables but with a breadboard you don't have to...
8 Leds (2,5 V)
8 Resistances (470 ohm) (For not to make the leds garbage because of +5V)
A Multimeter (Not needed but if something happens you can check the wiring with this...)
My Program to make your circuit live :)
Part - 3 - Software
My software is required to make your circuit alive. I am included both source code and compiled project file. You have to just download and run it.
.::Download::.
0 comments:
Post a Comment