You are on page 1of 113

Digitally signed by Bibin

John

Bibin John
DN: cn=Bibin John, c=IN
Date: 2006.04.14
23:41:17 Z
Reason: I am the author
of this document
Signature Location: Ernakulam
Not Verified

MY EXPERIENCE IN PARALLEL PORT INTERFACING

by
BIBIN JOHN

Digitally signed
by Bibin John

Bibin
DN: cn=Bibin
John, c=IN
Date:
2006.04.15
00:03:49 Z
Reason: I am

Signatur
e Not
Verified
John the author of
this document
Location:
Ernakulam
NOTICE

I am writing this for the Indian newbies in


robotics and for the beginners working in parallel port. This book is the continuation
of my first book ' MY EXPERIENCE IN AUTONOMOUS ROBOTICS '. I thought of
writing parallel port in a more elaborate way. I specially thank Anish Adhikari and
Sanjo for taking the photos of my circuits. I had wasted 3 months to do parallel port
interfacing, which can be studied in a day. I don't want this to happen to other
newbies. If you study this book thoroughly then i can assure you that you can do
parallel port interfacing within 2 days.

I thank my teachers of MNNIT and my colleagues Anil K.M,


O.Praveen Kumar Reddy, M. Satish,Vigith Maurice, J Rajashekhar Reddy, Mahesh
Paliath,Athul Sona and many other members of Robotics Club, MNNIT Allahabad.
So i feel this book can guide you through troubleshooting electronic circuits in
robotics. I thank my teachers of THSS Muttom, Thodupuzha from where i learned the
very basics of electronics.If you find any problems put a post in yahoo group-
booksbybibin or in roboticsindia.

I am providing this book free of cost. You can use this book as
a study material. I don't want my book to be used as a material for business without
my permission. You are not allowed to upload this book in any other sites.

BIBIN JOHN

e-mail:njbibin@yahoo.co.in
website:www.geocities.com/njbibin
Indian forums for robotics and electronics:
Www.roboticsindia.net
Www.migindia.com
http://www.hamradioindia.org
Www.machinegrid.com
www.edaboard.com

Yahoo group:
parallelport
interfacing
magazine:Robotics For You (RFY) , Electronics For You (EFY)
INDEX

Which is the parallel port of my computer???????....................................... 6


Introduction.........................................................................................................7
Data Port..............................................................................................................8
control Register..................................................................................................10
Status Port...........................................................................................................11
Bios Settings........................................................................................................12
Connector ...........................................................................................................15
DB-25 to Centronics...........................................................................................18
My experience with parallel port cable.......................................................... 20
Softwares used in Windows............................................................................ 21
Installing Userport.............................................................................................21
Using LPT.exe.....................................................................................................22
Turbo C commands............................................................................................23
Gcc Commands...................................................................................................24
Java.......................................................................................................................24
Important points to be noted for interface.....................................................25
Troubleshooting Parallel ports.........................................................................27
Let's start..............................................................................................................29
Multimeter..........................................................................................................35
First Program......................................................................................................40
Reading DataPort...............................................................................................41
Writing contorl Port...........................................................................................42
Reading Control Port.........................................................................................42
Reading Status Port............................................................................................42
Troubleshooting .................................................................................................43
Driving Relay......................................................................................................44
Driving a motor..................................................................................................47
H bridge...............................................................................................................48
L293D driving motor.........................................................................................50
Stepper motor driving ......................................................................................52
Unipolar Stepper circuit ...................................................................................56
Why ULN is not used as H-bridge????????....................................................56
7segment display................................................................................................57
LCD display.........................................................................................................61
Analog to Digital Converter..............................................................................66
Temperature Measurement...............................................................................68
LDR sensitivity measurement...........................................................................71
8-channel ADC using analog mux....................................................................73
Measuring Mains Supply...................................................................................75
Computer as CRO...............................................................................................76
Antenna Tracking...............................................................................................76
Reading a comparator .......................................................................................77
Speed measurement of a DC motor.................................................................78
Keypad interfacing.............................................................................................79
Keypad connection with parallel port.............................................................81
Keypad circuit.....................................................................................................82
Key Encoder Intefacing(74922) ........................................................................83
RAM interfacing(7489).......................................................................................86
parallel port expansion......................................................................................88
24 pin output port...............................................................................................88
24 pin input port .................................................................................................89
12 pin inputs and 12 pin outputs......................................................................90
Expanding parallel port for more inputs and outputs..................................93
ROBO DAC..........................................................................................................95
Applications of Robo DAC................................................................................99
Sun Tracker..........................................................................................................99
Line Follower robot...........................................................................................101
Robotic Arm.......................................................................................................102
DITTO..................................................................................................................104
IC Tester..............................................................................................................106
LAN Controlled parallel port..........................................................................113
Game Boy Camera Interface ...........................................................................113
Optical Mouse as Scanner................................................................................113
Which is the parallel port of my computer???????
This will be the first question you are going to ask. See the diagram below,parallel
port of my computer.

Parallel Port is same as the printer port in the back side of computer.Parallel Port
interfacing is the simplest method of interfacing. Now parallel port interfacing is used
for programming microcontrollers and hobby circuit. Here I am going to explain how
to interface it in Windows(all versions),Linux in C and Java.

6
INTRODUCTION
Parallel Port interfacing is thesimplest method of
interfacing. So it is widely used. The main problem with parallel port interfacing is
that it has data transfer speed upto 1Mbytes/sec. USB interfacing are
available having speed near to 12MBytes/sec. Parallel port is basically the 25 pin
Female connector(DB-25) in the back side of the computer(Printer Port). It has 17 input
lines for input port and 12 pins for output port. Out of the 25 pins most pins are
Ground and there is data register(8 bit), control register(4 bit) and status register(5 bit).
We can input port through all the three registers and can output port only through
data and control registers only. Each of these register have their own addresses. By
using that addresses we can program the port. Parallel Port’s are standardized
under the IEEE 1284 standard first released in 1994. This standard defines 5 modes of
operation, which are as follows,
1. Compatibility Mode.
2. Nibble Mode.
3. Byte Mode.
4. EPP Mode (Enhanced Parallel Port).
5. ECP Mode (Enhanced Capabilities Mode).

Here I am explaining bi-directional mode and simple parallel port. EPP and ECP
modes use handshaking signals.

7
DATA PORT

BASE ADDRESS- 0X378 or 0x278 (0x378 mostly used)


TOTEM POLE OUTPUT
The Data Out pins were orginally driven by a 74LS374 octal latch, which could source
2.6 mA and sink 24 mA. There were 0.0022uF capacitors between each line and ground
to reduce transients. The manual warns "It is essential that the external device not try
to pull these lines to ground", as this might cause the 74LS374 to source more current
than it could handle without damage. The Feedback input port for the Data Out
register consisted of a 74LS244 *tri-state buffer*; it is uninverted. Note that this port is
only for diagnostics - if at any time the feedback *buffer* for the data port does
not match the data being output, there is an error (eg: a line stuck high or low).
Exception: bidirectional printer ports allow the 74LS374 (or equivalent) driver chip to
be tri*-*stated, which makes the data feedback port into a legitimate unlatched input
port.

8
Writing Data Port:giving data to the outside circuit
For normal port C5=0(i.e, the fifth bit of control port must be low)
outportb (0x378,0x45);
D7=0 D6=1 D5=0 D4=0 D3=0 D2=1 D1=0 D0=1
reaches the port.It should be noted that dataport is a latch so the last data
send is stored on the port(since it is a latch).
Reading Data Port: Taking data from outside circuit
In order to make data port for inputting the control pin C5=1
outportb(0x37a,0x20);
a=inportb(0x378);
When u execute this program the variable 'a' is stored the value the decimal value of
the data inputted to the port.
Suppose if you input the all the pins to VCC then we get value
a=255
drive load 24mA @ 4.2V (From IBM definition of port)
Note: High Impedance state is considered as HIGH by parallel port. If you read the
data port without connecting any input, we get all high(a=255)(same as that of LS TTL
gates). Suppose if you connect input to D0 and no inputs to the others pins(D1-D7),
then only the value at D0 change, the value at (D1-D7) will remain as same as the
previous value.
9
CONTROL REGISTER

OPEN COLLECTOR OUTPUTS

The Control Out pins were driven by 7405 inverting open collector buffers, pulled to
+5 volts via 4.7K resistors. All data lines except C2 are inverted before going to output
pins; data line C2 is double inverted before going to pin 16 (ie: is not inverted).
Remember that it is better to use 74LS gates at the output because open collector
inputs are read as LOGIC HIGH by the 74LS series IC's.
Open collector means LOGIC HIGH become high impedance and
LOGIC LOW become LOGIC LOW(<.8V)

10
writing Control Port:
outportb(0x37a,0x00);
then you get at the ouput C0=1,C1=1,C2=0, C3=1
because the C0,C1,C3 are inverted pins.

Reading Control Port:


We can read Control Port using the command
a=inportb(0x37a);
No other settings are required.
Don't forget to connect buffer at the output of the control port since the voltage level
of the port is not exactly 5V. Remember to use 74LS buffer.
NOTE:
In documentation it has been told that control port has high impedance instead of
HIGH, but practically i am getting some difference. When i send HIGH to the port
and giving the output to an LED, the LED will glow.

STATUS PORT

Status port is used for reading purpose only. It is an input only port.
A=inportb(0x379); will read the status port. But remember that some pins are
inverted.
11
BIOS SETTINGS

Till now we have talk about the registers of


parallel port. Now let's start to do something. Bios Setting is the most important point
to note while doing interfacing. If you don't set BIOS parallel port option data won't
reach the port correctly. Here are the settings i used for my motherboard

Motherboard used:INTEL845GVSR
In different motherboard there are differnt BIOS configuration.
When system start press 'Delete' key or Ctrl+F2 to enter BIOS and
go to peripheral configuration
then do the following settings

Parallel Port [enabled]


Mode [bidirectional]
Address [0x378]

In other motherboards do the following steps. First find where parallel port option,
then enable it, then set your address as above, you can use 0x278 but normally not
used. Then select bidirectional mode if available, otherwise select any mode which do
not contain ECP and EPP. Don't put these modes because they have different
protocols. Better you select all the modes except ECP , EPP and ECP+EPP and try.

Note:
● Set parallel port mode to any mode except ECP,EPP,ECP+EPP, mostly set to
SPP
● In some branded PC's of IBM etc.. you won't be able to acess BIOS
properly.So in that case you won't be able to use dataport for input. Use only
status port for input.
● You should see the bios setting before you start parallel port interfacing. This
is the most important step.
12
CONNECTOR
Different connectors are shown below.

But accordint to my experience I first used 1284B shown in below diagram with blue
tip is shown, but that does not worked properly before one year, but nowadays we are
getting such connectors and it works fine .I used the same 1284B connector with white
tip(tip means only color). See the my connector 2 years old, still working perfectly. I
have heard of 25 pin male on one side and 25 pin female on other side connector, but i
haven't worked on it. The connector is a normal printer cable which have 25 male pins
on one side and 36 female pins on the other side(circuit side). Better use a 25 – 36 pin
connector which is available commonly, costs around Rs.40 or less(cost of my
connector 2 years back).

Buying Connector:
See whether it have 25 male pins on one side and 36 female pins on other side. It is
normally called centronics connector available in every computer shop. Some people
say it as a printer connector while some others as data cable, so you see the connector
before you bring from the shop whether it is a DB25 connector.
15
Now let's see the different type of wires available. The following figure shows
diffferent wires. The black wires are very good to get inserted into the female pins of
the connctor. They will be held tight and they won't suffer any problems with loose
contact. But these black wires will enlarge the holes of the breadboard as well as the
cable. But you should use this wire to avoid the problem of soldering. If you can
solder the cable then it good. But soldering can cause some short circuits because you
had to solder atleast some 18 wires. If some short circuit occurs, sometimes you won't
be able to detect and it will eat your time , sometimes it can cause damage to the port
also. If you are good in soldering,then no problem. The green wires are medium type
wires which can be inserted to the holes of the connector and the breadboard. But the
contact won't be good. The black and white wires are the wires we use in breadboard
connection. See the thickness of the wires. If you use this wire to connect to the cable
to breadboard, then it will always get loose and create too much problem to you.
16
So better use the black wire. I think you got a confusion now. How 25 pins on one side
become 36 pin on other side???????. I got same, so I opened both sides of the
connector to see the inside connection. Then I drawed the inside connections with the
same color of the wires used inside for my cable. See the diagram below. Now you
should have got the problem solved. See data pins(8)+control pins(4)+status
pins(5)+ground(1)=18pins will be used by us. We will leave the remaining pins
unconnected.

17
18
19
MY EXPERIENCE WITH PARALLEL PORT CABLE:

If you are not getting data properly from port your connector
may or may not be bad. This problem occured to me when I am using a normal
connector ,IEEE1284 Type B connector. It is better to use a connector all the time
when you are taking output from port. I have seen many person using simple wire to
the port and taking output. That is a wrong practice. The connector I brought first can
be opened on both sides. I opened it and identified the colours of the wires connected
to the pins as show in figure above. That is not working properly and not getting
ouput properly. So I brought new one which cannot be opened on both sides.

The property of the holes in the second connector is


that if we insert a wire it is just fixed on the hole, so a small force applied on the wire
won't take the wire out. It is MALE to FEMALE connector and having a White colour
instead of Blue colour in IEEE1284B connector. It is IEEE1284B connector itself.
The following shows the Centronics pins on the other side of the cable(36 pin side)
1-co'
2-do
3-d1
4-d2
5-d3
6-d4
7-d5
8-d6
9-d7
10-s6
11-s7'
12-s5
13-s4
14-c1'
36-c3'
32-s3
31-c2
19-gnd
connect port ground to circuit ground. Then connect the data pins in the order in
bread board at one place.

20
SOFTWARES USED IN WINDOWS

All operating systems of Windows upto Window


ME(included) requires no driver software for parallel port. You can interface it by a
simple program in Turbo C. But operating systems after Windows ME have a security
to parallel port. So we have to break it inorder to interface with outside circuits. This
is done by using USERPORT.

Installing USERPORT:

You can get userport.zip with this file or from yahoo group-parallelport.
http://www.embeddedtronics.com:80/public/Electronics/minidaq/userport/UserPort.zip
Download this file and unzip it
then copy Userport.sys to WINDOWS\SYSTEM32\DRIVERS
then run USERPORT.EXE
u will get a message driver started. Click Start two times then you will get the
following message. This is the next step after BIOS Settings.

Now u do programming in C/C++/JAVA and interface in XP or other version of


Windows. USERPORT is necessary software you should install. If you are using VB or
VC then you can get DLL's from
www.logix4u.net

21
USING LPT.EXE:

This is a small VB program which shows the status of the parallel port registers
You can get it with this book or yahoo group-parallelport or from the link
http://neil.fraser.name/software/lpt/
After BIOS settings and userport installation next step is to check whether your
parallel port will work or not and which ports will work well.

Run lpt.exe

select your port address first as you set on the BIOS. The following diagram shows
how to check port. You 'tick' indicates high on that port. So change tick on the port.
Make it low and high. If it is changing for data register and control register then your
parallel port is working fine and will work fine. But if the 'tick' is not changing then
you won't be able to use it. You won't be able to use the ports in which 'ticks' are not
changing. In the above diagram we can see that Pin1 (strobe C0) is not having tick(i.e
is low), but if you connect an LED then it will glow because C0' is there and the port
get's HIGH. Suppose if you input LOW on pin1 then the Strobe will get HIGH in the
software. So remember this when you do troubleshooting circuits with lpt.

22
TURBO C commands

#include<dos.h>
this header file is used for doing IO operations.
Delay(time_ms);
This function delays time in milliseconds. That is execution will be stopped for
time_ms time.
Outportb(port,data);
This command will send data(data) to the port address (port) in the command
a=inportb(port);
This command will read a port. The data(a) will be in decimal format.
Printf(“%x”,a);
This command will print the hexadecimal value of 'a' on the screen

23
GCC commands
#include<sys/io.h>
#include<unistd.h>
these header files should be used in the program.
ioperm(base,3,1);

This function is used to provide acess to port. You should be in root of the system

ioperm(base,3,0);

this function leave the acess to parallel port.

usleep(time_us);
delay in microseconds.

outb(value, address); inb(address);


This function is used to get value from a given address. There is only small change
in format compared to Turbo C commands.
See the following link:
http://www.faqs.org/docs/Linux-mini/IO-Port-Programming.html
http://www.epanorama.net/circuits/parallel_output.html

Java:

You can get the sourcecode from yahoo group-parallelport. The file named
'interfacing in Java'(.rar file).

24
Important points to be noted for interface:

1.You have to make the port bidirectional before applying the external voltage to the
data port because it can cause problem to your port (C5=1)

2.Don't remove the covering of the cable. If you are using Centronics pin as Female pin
then take wire out of the pins shown above. Don't try to remove covering to take the
wires out, because it can create problem of short-circuiting or you can solder the wires
to a PCB.

3.proper delays must be used in inporting/outporting sequencially


delay functions are defined in <time.h>
delay(value); will halt the program execution for 'value' milliseconds, or you can
apply looping by keeping it in a loop to produce delay. The need of delay is that
Parallel Port has a speed of only 1MB/s, but your program execution speed is
comparable to processor speed, so you should apply some delay between two port
acess commands. But sometimes there is no need ( I got positive result by doing
without delay better to put it). Usually we use parallel port speed about
1KB/sec(delay(1);)

4.don't try to draw power from parallel port. This cause damage to port. So it is
necessary to use external power supply.

5.use only 74LS series IC's to interface between port and the other IC's because the
Parallel Port is LS TTL ouputs and inputs. This is valid for inputting or outputting
also.

6.switch on the circuit first then only connect the connector to the port

7.first disconnect the port then only switch off the circuit

8.don't forget to connect the ground of the port from the connector to the ground of
the circuit.
9.Connect the ouput of the port to the input of the buffer and use the output of the
buffer as the output of the port.

25
Note: When you are inputting the port connect the wire to the input of a buffer and
take the output of the buffer to the port.
NOTE: use only 74LS buffer or 74LS IC's to the port directly.
If you want to connect 40xx,45xx series IC's in the circuit it is better not to connect to
the IC directly to the port. It is better to use buffer in between port and IC.

10. Don't connect motors or relays directly to parallel port. You are allowed to connect
only normal digital IC's and transistor where driving current it low. Connect motors
and relays using power transistors.

11.The data transfer speed of parallel port is 1MB/sec.

12. High Impedance state is considered as HIGH by parallel port That means if u
doesn't connect any input and u apply inportting through port we get all
high(a=255)(same as that of LS TTL gates).

13.If you use 74HC244 then it takes the high impedance state as LOGIC LOW but
74LS244 takes it as LOGIC HIGH.

14.BIOS settings is the main thing to note. Set BIOS to bidirectional port, if not
available set it to any configuration except ECP,EPP,ECP+EPP

15.The external power supply must have the driving capability to drive the external
circuit. You can use the SMPS of the computer you are working on.

16.Remember that all ports are registers, so they all keep the last data
sent to the port

17. Don't extend the parallel port cable for long distance. If you want to use it for long
distance use some buffer(74244) in after the length of the cable. Every cable has some
resistance, capacitance and other factors and the voltage through printer cable is 5V,
so if a HIGH is send from printer port, then it should reach HIGH for the circuit and
this is possible only when you use the cable within limited length. If you see a serial
port cable, you will get more length than parallel port cable because the HIGH for a
serial port cable is -3V to -25V and LOW for 3 to 25V, so a good voltage swing is there
and you can get good distance.

26
TROUBLESHOOTING PARALLEL PORTS:

This is the most important section which normally unavailable in internet. Here I am
saying about my own experiences.

1.) First of all your system has not attacked by any WORM or any other type of virus
like shutdown virus(remember that this problem only comes after when a shutdown
virus given you shutdown message and you run shutdown -a ). This problem occured
with me recently. Then your parallel port won't work.

2.) You must install UserPort.zip for working in Windows operating systems above
Windows ME

3.) For outporting:


check the BIOS settings

4.) check the connector or connector configuration connected be wrong( connector can
be bad but rare condition)

5.) compiler (Turbo C <dos.h>)


VB then apply suitable dll's (get from www.logix4u.net) if you are using any software
or program see it's format to apply (If you are using any software driver for port)

6.) Check proper tightness of the connector to the port. Insert the connector properly
to the port.

7.) Test the buffer you are using whether it is bad or good and it is of 74LS family. If
you are using 74HC which takes the high impedance state as logic LOW where 74LS
take as HIGH.

8.)Power Supply should be correct and check whether the LED's are good or not.

27
9.) You can connect LED directly to port by taking one data pin as the positive
terminal and ground as -ve terminal. The wire should be properly inserted to the
breadboard and the Centronics cable .

10.) The ground of the port and the circuit should be short circuited.

11.) Don't try to connect without any buffer although no serious problem(you can
connect but the voltage level be low)

12.) See any motor or relay connected to the port without power transistor or any
buffer.

13.) See whether the pin number of Centronics is correct. See whether that the bit is
inverted or non-inverted.

14.) proper delays must be used in outporting sequencially.

15.) For inputting the port:


It is better to apply input the port using a buffer ( the advantage is that if overvoltage
occurs the buffer will get damaged first, port is secured)

16.) While inporting data port then make sure that C5=1
In inputting status port there is no problem occur mostly.

17.)If your data port reading of Turbo C gives a reading 170(in decimal) and the input
you had given is a different one, but lpt.exe is reading the input correctly, then reboot
the system. This the problem occuring with Turbo C in hardware interfacing.

28
LET'S START

Before starting let me explain the components i am going to use. First about my power
supply. I am using the adapter of 12V,500mA with voltage ranging from 1.5V-12V. I
have explained it on my first book MY EXPERIENCE ON AUTONOMOUS
ROBOTICS.I want to show you how i am doing things so that you will be able to do
all the projects given in this book very fastly and follow the right way.

SMPS is prefered over adapter. The knob of my adapter is shown below.

29
30
Now come to Breadboard. This is the breadboard of my college.

31
This is an LED connected in series with a 100 ohm resistor. This white led gives red
light.
32
See this figure carefully. See how i connected the individual ports. See I have used
different wires. A thick black wire from cable to breadboard. I used a green wire
also. The wires in the breadboard are small size as I shown it previously.

33
35
Here is the multimeter which i am using. It costs around Rs300. I have talked about
this multimeter in my previous book MY EXPERIENCE IN AUTONOMOUS
ROBOTICS. Now we can start. First install userport.zip and do bios settings.

Now let's check the voltage from different ports.

Make the data port all high.

36
In the above diagram you can see that i checked the voltage at the data port. In that I
connected LED and multimeter to same point. Let's remove Led and check

37
see the voltage difference. Here i used 100 ohm series with LED.

38
This diagram shows how i check for the control port. The voltage of control port is
high compared to data port.

39
First Program

Writing to data port


#include"bparlib.c"
void main()
{
Write_DataPort(0x99);
}

Program: 1.c

This program sends 0x99 to data port i.e D0=1,D3=1,D4=1,D7=1 and remaining are
LOGIC LOW. Now check the status using an LED. Figure below shows the status of
D7. Check the status at every pin of data port.

40
Reading Data Port

Program: 2.c
#include"bparlib.c"
void main()
{
printf("%x",Read_DataPort());
}
Here I used %x to print the hexadecimal value instead of decimal value.
Now let's connect some input to data port and check. In the figure below I am
connecting LOW to D0. Now run this program. You can see the output is 0x98. Only
the value at D0 has changed, the remaining values from D1-D7 remains unchanged.

41
Writing to Control Port
Program: 3.c
#include"bparlib.c"
void main()
{
Write_ControlPort(0x00);
}

This program will send 0x00 to control port. i.e c0,c1,c3 led has glown because they are
inverted pins and C2=0.
Reading Control Port

program:4.c
#include"bparlib.c"
void main()
{
printf("%x",Read_ControlPort());
}

i connected c2=high, remember that previous values will be stored in the port. The
output of pgm4 is 4. ie. C2=1 and remaining all others are LOW.
Reading Status Port

program:5.c
#include"bparlib.c"
void main()
{
printf("%x",Read_StatusPort());
}
first execute this program without connecting any inputs. I got the value 0x78. Now
connected Pin4 to HIGH then it read 0x78 again because the Pin4 is already high in
this program.

42
NOTE:
1. Use lpt.exe to see the status of every ports everytime when you execute the
program.
2. You can use this as an ideal status detector.

3. Try all different combinations by sending different values to port as well as


inputting different values.
4. Remember that when you input the voltage should not be greater than 5V.
Make sure this first, then only you do this. You can use the output of other port
as input to some other port. Do thorough with reading and writing different
ports first then only go for the next programs.
5. Take some time to do this because this is the basic step and you should be
thorough with that for the other programs.

TROUBLESHOOTING
1. The cable may not be good some time. This occurred to me in the beginning.
So You had to see this problem first. Now let's see how to do it
2. Use multimeter continuity tester to test continuity between the wires of the
breadboard and the copper strip of the cable. Try to vary values, ie. Apply
both LOW and HIGH to see whether the wire is properly inserted into the
cable and the continuity is good. This is the main step.
3. See for any problems with breadboard.
4. Careful about ground. You have to short circuit external ground and ground
of parallel port.
5. See whether there is any short circuit between the pins of the cable or wires.
Solve this first. This may occur if you go for soldering.
6. There might be some loose contact between cable and wire. Fix it properly. In
order to avoid this use wires of good thickness.
7. Always check the voltage of external power supply. It should not be greater
than 5V. Otherwise sometimes, some problems can occur to the parallel port.
8. See whether your parallel port is working using lpt.exe by changing the 'ticks'
If 'ticks' are not changing then you won't be able to use that port.

43
Driving a Relay:

for tutorials see my previous book MY EXPERIENCE IN AUTONOMOUS ROBOTICS.


Here I am going to use a 6V relay which is more comfortable in terms of supply. The
other end of the relay can be connected to even a home equipment work on 230V.
Specifications: 6V,100 ohm ,1.5A , 230V relay. Figure below show the connections.

44
45
By default LED is ON, if you send High to D0 then relay will become active and LED
will turn OFF.
Program: relay.c

You can use this circuit to control your home equipments using computer. Here if you
use 12 relays using both control and data port of parallel port, you can control 12
equipments working upto 230V(including). Here I used LED to explain it clearly. See
troubleshooting tips on my previous book MY EXPERIENCE IN AUTONOMOUS
ROBOTICS.

DO IT:
Try to make a timed control of your home equipment. Suppose you want to turn
ON your equipments after Ton time and work it for Toff time and turn OFF. i.e, the
equipment work for Toff time. Suppose if you set Ton=1hr and Toff=1/2 hour. Then
the equipment will become ON after 1hr. From now and work for ½ hours and turn
OFF after this ½ hour. Also try to make your home voice controlled using VB or
Java. See the link below:
http://www.roboticsindia.com/modules.php?name=News&file=article&sid=115

46
Driving a motor

Use the same circuit to drive motor. You connect collector to one end of motor and
other end of motor to the Vcc(12V or 6V according to your motor).
Program: motor.c

47
H-BRIDGE

See the circuit diagram above you will get it.


For forward motion transistors (1,3) should be ON and remaining (2,4) OFF. For
Backward motion transistors (2,0) should be ON and (1,3) should be OFF. For
stopping(0,0) condition of H-bridge, Transistors(1,3) should be ON and (0,3) should be
OFF. For braking(1,1) transistors (1,2) should be ON and (0,3) should be OFF. So make
a programm according to this to turn motor forward,backward,brake.

Program: HBRIDGMO.c
see not to short circuit Vcc and power supply by making (2,3) ON, first condition and
(0,1) ON another condition when Vcc is connected to ground and short circuit occurs.
But if you use power transistor then the heat sink will get heated too much.
adapter o/p 6.42v,voltage across motor 2.35v.

48
49
L293D driving motor

program: L293d.c
D0,D1 outputs are used as inputs of L293D.

50
See how to troubleshoot L293D in my previous book MY EXPERIENCE IN
AutONOMOUS RobOTICS. See the program.

DO IT:

try to control a robot forward,backward and stop using L293D. Try to make it voice
controlled. See this link to make a parallel port controlled bot
http://www.roboticsindia.com/modules.php?name=News&file=article&sid=65
http://www.roboticsindia.com/modules.php?name=News&file=article&sid=115

51
STEPPER MOTOR DRIVING

Figure shows a general stepper motor. This is a 6 wire stepper motor which can be
used both as unipolar and bipolar stepper motor. Figure below shows the stepper
motor i used costs around Rs.270. The first task is to identify terminals (a,b,c,d,e,f).
They are identified and as show below
hold it like a 2X3 row
1,1 is common 1,2 is one end of coil 1, 1,3 other end of coil1
2,1 is common of coil2 and so on.
The resistance of one coil is 108 ohm and between (a,c) is 54 ohm( I checked it).
Programs for driving stepper motor as
bipoloar: bipolar.c
unipolar: unipolar.c
use separate power supply for logic and control circuit
http://www.seattlerobotics.org/encoder/may98/steppers.html
http://micromouse.cannock.ac.uk/motors/stepper_driving.htm

These links gives the circuit diagram.

52
UNIPOLAR STEPPER CIRCUIT
Above diagram shows how i connected the stepper circuit.
This diagram above has one wire missing. The circuit is given below

a,b,c,d corresponds to (D0,D1,D2,D3). See the program unipolar.c


Why ULN is not used as an H-bridge????
You can see that ULN is coming as a single IC package and it is of cheap cost
compared to power transistors used for H-bridge. Still no one is using ULN as H-
bridge for driving motor, although it is convenient in circuit making and cost.

Suppose V1=0 then both transistors are cut off and no current will flow. When
V1=HIGH then both transistors are ON and the 'output' will become LOW(0v)(i.e,
emitter will get gnd). So at V1=0 it has 'output'=Z and V1=1 has 'output'=LOW. A
power transistor has two states, there is short circuit between E and Collector or there
is no connection. But in ULN the collector will get either high impedance or a LOW
voltage(gnd). So it can't be used for H-bridge. Here when the input is HIGH the
transistor emitter will get ground instead of a short circuit between E and C.

56
DISPLAYS
7-segment display

The above circuit shows how to connect multiple displays with a single decoder. You
can do it without a decoder and some transistors. But here I am using 74126 a tri-state
buffer and a 7segment decoder. Corresponding pins of displays are short ciruited
together. i.e, 'a' of all displays are short circuited, same as b'.

Program:led.c

Algoritham
Clear_ControlPort_bit(0);
Clear_ControlPort_bit(1);
Clear_ControlPort_bit(2);
Clear_ControlPort_bit(3);
This is used to remove the Vcc to all displays so that nothing can be seen on display.
57
Here we use the technique of persistance of vision. i.e, our eye cannot detect what is
happening within 1/16 of a second. Delay(7); This command gives a delay of 7ms and
the digits to be displayed on LED are given to the data port and the corresponding
control bit is taken.

Suppose if the input number is 1234


So 4 should be displayed on the last 7 segment. So we first get digit 4 from the input
and send it to the data port and Set C3 to HIGH. Thus we get 4 on last display and it
last for 7ms, while in the mean time the power supply for other displays are OFF and
nothing will be displayed on them. After 7ms we make C3=LOW to OFF the display
and we send '3' to the data port and enable the C2 = HIGH. So the second last 7
segment will display for 7ms and after that it will become OFF, while all other
displays are OFF. This will continue for (j<1000, an arbitary time). When one cycle is
over, the same process will repeat. See all these events are happening in milliseconds
and for one cycle it will take at max.50ms(let's say by calculating all other time). This
time of 50ms is too small for our eye to detect and our eye will perceive as displays are
ON all the time.

Troubleshooting:
1. Check the connections like 'a' of all are short circuited.
2. Check whether all the segments of the display are working by connecting Vcc of
all to Power supply and LT'=GND. In that case all displays should glow.
3. See whether your breadboard has any problems and the connections are
interchanged or not
4. The pin3 and pin8 can be used for VCC but only one at a time.
5. Here i have not used resistor, it is better to insert a series resistance of 100 ohm
according to the intensity of the display.

58
59
60
LCD DISPLAY

Here I am using a 16X2 LCD display available for


around Rs.140. The LCD JHD162A

61
More tutorials about LCD is available on the following links
http://www.roboticsindia.com/modules.php?name=News&file=print&sid=75
http://www.beyondlogic.org/parlcd/parlcd.htm
http://www.eio.com/lcdintro.htm
http://home.iae.nl/users/pouweha/lcd/lcd0.shtml#hd44780
http://ee.cleversoul.com/lcd_project.html

See the commands from the first link and see the program.
Program: lcd.c
62
first select the instruction register to write these following commands. See the table of
commands
init[0] = 0x01;
init[1] = 0x38;
init[2] = 0x0c;
init[3] = 0x06;
init[4] = 0x80;

0x01 is used to clear display


0x38 for 2 lines and 8 bits
0x0c
0x06
0x80 is the CRA Address Corresponds to the cursor address. This is the main thing
you should do first

Now select the data register and write the data you want to send. Delays should be
proper for the display to set.
The following program writes some data into the LCD which will remain stored in the
RAM of LCD

TROUBLESHOOTING:

1. Make the LCD ON by varying the contrast. You vary the potentiometer knob so
that the contrast will vary and you will get dark matrix on the screen.
2. Reduce the contrast so that dark dot's of less intensity will be seen.
3. Now run the program, check for parallel port troubleshooting.
4. The delay inserted in the program should be sufficient.
5. The CRA address should be correct.

63
Here is the output of the program.

64
65
ANALOG TO DIGITAL CONVERTER

program: adc2.c
Here I used Vref=Vcc=5V. This voltage may change depending on load. You can use
any other Vref using a potentiometer at the Vref/2 pin. See datasheet for the
maximum value of Vref. Digital and analog grounds are short circuited. Here the 10K
and 150pF determines the speed of conversion. The normal speed is 100uSec. You can
change this. If you increase the speed, then it is called overclocking. I used 222pF
instead of 150pF. So if you don't get 150 pF then u can use other values but the speed
of conversion will vary. Here I am using the free running mode of operation for
easiness. Mainly used mode is interrupt mode. In free running mode ADC will never
end the conversion. Some power is wasted in this case compared to interrupt mode.
First we have to Enable Write pin then disable it after some time. This time will be in
milliseconds because the conversion time of ADC is in terms of milliseconds(.1ms). So
the conversion time of ADC in our program is 2ms. i.e, you can get 500 conversions in
a second. Most of the application this much speed is enough, especially when we used
sensors in robotics. You can try for a better speed. Here the voltage is calculated using
the formula
V=ouput of ADC/(2^8-1)*Vref. Here Vcc=5V and output of ADC is of 8 bit so we
divide it by 255. See the least count of ADC = 5/255=1/51=.02V . You can see that if
you decrease Vref, then we can get a better accuracy.

66
Program: adc1.c

This program is used to check what is the output of the ADC when chip select and
read are not enabled. The output will be 0xff not Z(high impedance). In most of the
cases you have to see it if you use it with some multiplexed bus. Suppose if you want
to expand parallel port and by using control signals we disable ADC but still a voltage
of HIGH remains at the output. So be careful about multiplexing ADC with any bus.
Use a buffer to the output of the ADC to enable the chip reading when you are using
multiplexed bus.

67
TEMPERATURE MEASUREMENT

The most commonly available LM35 is LM35DZ measures temperature from 0 to 100
degree.Output is 10mV* degree in Celsius. That is if the temperature is 29 degree then
Vout=.29V. Therefore we require a least count of .01V for measurement of
temperature with 1degree difference.
So we should select a proper Vref least count=Vref/255 , gives Vref=2.55. So we have
to apply 2.55/2(Vref/2) to the pin9.

Program:lm35.c

68
69
70
LDR SENSITIVITY MEASUREMENT

How to measure the sensitivity of an LDR?????? I thought of using ADC to measure


and see the time difference between three consecutive different reading. I can't say this
method is ideal, but this method can somehow measure the sensitivity to an extent.
By this method i got sensitivity around 3ms, but I have seen that LDR sensitivity is
around 10ms. Anyway this circuit can be used to read LDR output in digital format.

Program: ldr.c
read the LDR 400 times continously and take the least count in which consecutive 3
readings will differ. You can use this circuit to change the parameters of your
computer monitor so that you will feel same effect with variation in external light.

71
72
8-CHANNEL ADC(USING ANALOG MUX)

Figure shows analog mux is used to multiplex 8 analog voltages to the ADC. Here we
are using an analog mux MC14051 or CD4051. The selection pins of the analog mux is
connected to the output of the control port.INH is disabled. Thus by selecting proper
inputs we can get different channel outputs. Analog mux can work as a digital mux
while digital mux can't.

Program:amux.c

73
74
MEASURING MAINS SUPPLY:

You can measure mains supply using the


same circuit of ADC. You can measure instantaneous voltage, peak voltage and
frequency(maximum 500Hz) of the mains supply. First step is to reduce the analog
230v,50Hz supply within 5V range. You can do this using a transformer which can
reduce 230V to 5V. But there is a problem of negative voltage exist. i.e, for -230V you
will get -5V from the transformer. So you have to use a comparator to determine
whether the voltage is above or below 0V. So you give the output of transformer to the
input of comparator and ground the other terminal (V+), so that comparator output
will become HIGH when voltage is below ground. Now you have to convert -5V
output of transformer to 5V. i.e,you have to avoid -ve voltage and make that voltage to
equivalent +ve supply. You can do this using a bridge rectifier(full wave rectifier) or a
center tap rectifier(usually available transformers are center tap transformers). But
there will be some significant drop across the diode. You had to compensate for it in
your program. Mostly available transformers are 230V/15V center tap transformers.
So here you have to step down voltage to 5V. You can do this using 3 resistor in series
with output and voltage input to ADC is taken across the last resistor whose other pin
is ground, so that you will get 5V corresponding to 15V. But this method can create
some errors due to drops across diodes and other losses. But this is the simplest
method to measure main supply. Compensate losses in your program and make the
reading ideal. You can get voltage from 0-255V with 1v as least count. Remember that
if most of the 15V transformers have output greater than 15V sometimes(suppose if
voltage is greater than 230V). So be careful to see the maximum voltage in your
design. The transformers won't be ideal enough to give a maximum of 15V output. So
beware of that also. Now you can get instantaneous voltages, from that you can get
the maximum voltage(peak voltage) and the comparator output gives the frequency of
the sinal.

75
COMPUTER AS CRO:
http://www.geocities.com/lptscope/hw.html
Here you can use the same logic as you used in above project. But there is a limitation
for maximum frequency in this case. Here we have to use some method so that we can
measure high frequency. So we have to remove delay(1) and use some C graphics to
plot the waveform. Circuit for this was published in Electronics For You. See the
above link. Here also we required to plot the negative side, so in this case also we use
comparator. Go for some high speed ADC's to get good performance. It is better to use
Interrupt mode for this, so that we can get speed upto 10Khz and we can measure and
plot the same. You can overclock the ADC to measure high frequencies.

See this link where you can get a high speed one using USB
http://www.eix.co.uk/Ethernet/USB/

see this link for making CRO using audio port


http://www.roboticsindia.com/modules.php?name=News&file=article&sid=112

ANTENNA TRACKING:

The aim of antenna tracking is to place antenna in a position to get the maximum
signal. So in this case we are holding the antenna vertically in a platform which can be
rotated using a simple DC motor. So we have to measure the signal strength(i.e,output
voltage) at every point in the rotation of the motor. We connect the signal output to
ADC to measure the maxium voltage. Step down the signal voltage, if it is above the
maximum ratings of the antenna. So rotate the antenna using the motor. Make a 360
degree rotation and get the maximum peak signal. Store the maxium peak signal and
again rotate the antenna such that it is aligned to the direction from which maximum
signal strength is received. You can rotate the antenna from 0-180 in one direction and
0-180 in opposite direction or 0-360 in one direction depends on your mechanical
structure. This setup can be used to align the antenna to the direction of maximum
signal strength when you shift it from one place to another.

76
REDING A COMPARATOR

It is often required to read a compartor for


sensing black and white using a comparator or some other applications using
comparator. Here I am using status port to read the comparator.

Here you can see I am connecting comparator output to the status port pin7. The
output of comparator may not be accurately 5V . It is in the range of 3.5V . But all
voltages above 2.4V is treated as HIGH by the digital circuits. Here you can use
potentiometer output as the reference voltage.

Program:lm324.c

77
SPEED MEASUREMENT OF A DC MOTOR:
Most of the DC motors have maximum speed about 2400 rpm . Ie, 40 rotation/sec. So
we can measure this using a sensor whose sensitivity is greater than 1/40 in a second.
Suppose if you use an LDR or a photo diode, then we can measure the speed easily.
Attaching some spikes at the shaft or at the wheel of the motor(or make wheel in that
type construction), use photo diode or LDR. A photo diode is the best option which
can have have distance upto 5-7cm, but LDR is not having that much because of
external light. Use IRLED+photo diode combination. Use a series resistance with a
photo diode and connect the resistance voltage to the comparator. Count the number
of spikes passed. The spikes are placed at equal angles with the center. Meaure the
speed using number of spikes moved, diameter of the wheel and the time taken. This
is the simple method instead of usingshaft encoders. See the mechanical setup to
measure the position of a mouse in a ball mouse(not optical mouse), then you can
understand better.

78
KEYPAD INTERFACING

This section i will explain about connecting keypad to


the parallel port. Let's see the keypad connection. A normal keypad costs around
Rs.150. A keypad has a problem of keydebouncing and we have to eliminate it in our
program.

79
80
KEYPAD CONNECTION WITH PARALLEL PORT

81
KEYPAD CIRCUIT

See the above circuit diagram and understand the connection. Take Row 0 and column
0. A switch has four leads in which two leads are short circuited internaly to form a
swich. Suppose if you press the switch then all the terminals will be short circuited. If
we send C0=1 and C2=C1=C3=0 then first row become active and remain rows will
be deactive. One row of all switches get HIGH (i.e, switches in row 0 , one terminal
will get high). If you won't press a switch in the row then output will be zero(you can
see the output terminal of the switch is short circuited to No Connection terminal of
the switch. So by default the output is zero at d1,d2,d0,d3.

82
Suppose if you press row 0 and column1 switch then d1
become HIGH and all remaining d0,d2,d3 become LOW. Here we are using a
resistance with every output to see the output voltage. When no switch is pressed the
output voltage will be zero and when switch is pressed output voltage will become
HIGH. In all the cases you can see that bottom 2 switches of all row become HIGH and
top one is not connected=LOW and other is output. So when you press the switch all
become HIGH if you had selected the row for that switch.

Program: keypad.c

TROUBLESHOOTING:

1. You should avoid key debouncing problem by inserting proper delays in the
program. A normal person can press only 10 switches in a second (at max). So
insert a delay of 100ms after pressing a switch to void keydebouncing.
2. See the appropriate keydebouncing algoritham.
3. Soldering should be proper.Better go for a redymade keypad.
4. At the starting of the program make all output ports low. Make sure when you
make a particular row HIGH, other rows should be LOW.
5. IF you want to avoid keydebouncing problem and a software making then go
for 74922 or 74923.

KEY ENCODER INTERFACING(74922)

Mostly available keyencoders like 74147,74148 have a


problem of key debouncing. So in order to eliminate it we had to use 74922 or 74923
encoders. It costs around Rs.200! And you had to make the keypad. You can use the
above keypad for this purpose. Using this we can avoid software burden and the
listening of the program for keypad. The encoder has 5 outputs. 4 data and one Data
Available. So when a key is pressed Data Avaiable become HIGH and parallel port
has to sense this to read the keypad. See the capacitance values properly. I used .01uF
as C . The capacitance values should be C and 10C for proper operation otherwise
keydebouncing problem won't be eliminated properly.

83
84
Here I have short circuited X2 and Y1 so the output will be 1.
Program:922.c

The program will wait for a keypress (i.e short circuiting between two pins(x, y)) and
print the pressed value.

85
RAM INTERFACING(7489)

7489 is a 64 bit RAM arranged in 16x4 memory


locations.

Here you can see that RAM's address bus is of 4


bits(2^4=16) and input data of 4 bits and output data of 4 bits(complemented). 4 bit of
address bus is connected to D0-D3 of data port and 4 bits of data input is connected to
D4-D7 of data port and output of RAM is connected to S7-S4 and the chip select and
W/R select is connected to C0 and C1 respectively.
Program:7489.c
You should insert proper delays in the program to
acess RAM. See the datasheet for the delays. In the program I am writing to a speicific
memory location and I am reading it again.

86
87
PARALLEL PORT EXPANSION

In some cases you want more outputs or more


inputs from the parallel port than how many inputs and outputs we have from the
output of the parallel port. So you want to expand parallel port. You can use 8255 to
expand the parallel port input and output. You can get either 24 output pins or 24
input pins or 8 input and 16 output pins using 8255. But 8255 is costlier. We can get
same solution using D flipflops(or u can do using any latch).

24 PIN OUTPUT PORT

88
Here you can see that output of data port is
connected to the input of D flip flop and control port pins as the clock of the D flip
flop. The clock for 74374 is produced by making the clock pin HIGH from a LOW
state of the clock pin. The output should be enabled. First you write the data you
want to write to the flip flop into the data register of the parallel port and the clock the
flip flop. Suppose if you want to write to flip flop connected to C0, then

Write_DataPort(data to be written to flip flop)


Clear_ControlPort_bit(0);
delay(1);
Set_ControlPort_bit(0);

24 PIN INPUT PORT

89
The buffers become active only when a LOW is applied to the control pin of the buffer.
So in the starting of the program we have to make all pins HIGH so that two buffers
are not selected at a time. Suppose if you want to select the first flip flop connected to
C0.
Clear_ControlPort_bit(0);
a=Read_DataPort();
Set_ControlPort_bit(0);

you should make the pin high before you leave the buffer. This way we can get 24
inputs from the parallel port.

12 PIN INPUTS AND 12 PIN OUTPUTS

90
First you should disable the output of the
buffers(74244's) in the beginning of the program. Make the clock to the flip flop by
making the corresponding control port pin LOW and then HIGH. Buffers input
should be made LOW to read the buffer and the data port should be made for input
before reading the buffer

program: exp1.c

91
92
EXPANDING PARALLEL PORT FOR MORE INPUTS AND OUTPUTS

Here I am using decoder at the output of the


control port for more inputs and outputs. If you have a 3x8 decoder then you can
make 7x8 outputs or 7x8 inputs or (nx8 inputs and (7-n)x8 outputs). If you use a 4x16
decoder then you can expand it further to produce higher number of inputs and
higher number of outputs. A decoder has 8 outputs, but we can use only 7 outputs
because if we want to output to a flip flop and flip flop want clock transition from 0 to
1 for a flip flop connected to output 4 of the decoder and output 7 is not connected,
then first put the data to the data port of the flip flop and write control port to 4 and
after some delay write again to control port (7). So when control port gets 4 then
clock=0 and when control port is 7 then clock=1 and we get a transition from 0 to 1
and data latched into the flip flop. Suppose if you want to use 8 flip flops then when
we select 4 first then we have to select another value to make clock to 1, suppose if you
select 7 then clock of the flip flop connected to 7 gets 0 and we next had to write data
to 7 otherwise the flip flop data will get corrupted.

93
ROBO DAC

A data acquisition Card is always need to get data in different form, analog or digital .
The data can be inputted or outputted or used as a independent counter / timer. But
in Robo DAC we are having 8 analog inputs, 8 digital inputs and 8 digital outpus. We
can also expand the number of digital outputs and digital inputs.
Here you can see that first flip flop is used for 8 digital outputs and second flip flop for
controlling the DAC like ADC signalling, used as select pins for the analog mux. In
DAC there is facility for extending 8 analog inputs or 32 digital inputs or 32 digital
outputs or 16 digital inputs and outputs. So first we clock the first flip flop to output a
digital data. Then we use control flip flop to select different channels of analog mux
and signalling ADC conversion. The output of ADC conversion is given to the input of
one 74244 buffer which is read by making C3 pin LOW.

Program:dac.c
remember that in the program you are taking the value as decimal and you will get
output of the flipflop as hexadecimal.

96
97
98
APPLICATIONS OF ROBO DAC

SUN TRACKER:

Sun Tracker is a mechanism which keep Solar Panels always perpendicular to Sun.
The maximum radiation is obtained when Solar panel is perpendicular to sunlight, so
maximum power. Everyday sun moves from East to West and a lateral shift of
23.5degree on both sides of normal(i.e, change with seasons like summer and
winter).See http://www.eaas.co.uk/news/seasons.html. So we need two axis
tracking. Sun sets at west and our system shut downs automatically when
a particular intensity of light is reached (i.e in night and in rain time). When it set at
west and during morning it had to come back to east i.e in morning it had to shift 180
degree.. Sun Tracker should work perfectly with Sunlight and in darkroom in
presence of sodium vapor lamp.

99
100
RA0,RA1,RA2,RA3 is the output of the flip flop(74374).

You can connect the output of 74374 to the enable of L293D. When the LDR resistance
is too high , the enable of L293D should be disabled because there is no need of
moving sun tracker because the availability of light is less. You can decide it in your
program. There should be an option for suntracker to align automatically to the
direction of maximum sunlight when it is shifted from one position to other. You can
provide a suitable algoritham in your program. You can disable the L293D for
sometime and thus power consumption is somewhat reduced(see in case of big
motors H-bridge consuming good amount of power) .

LINE FOLLOWER ROBOT

Suppose you want to make a line follower robot with 4 sensors on each side and 16
speed reductions then you can make it using ROBO DAC. If you use varying supply
voltage to drive the motor then you can use this circuit. Make a proper algoritham for
driving the motor.
101
ROBOTIC ARM

A robotic arm requires precise movement of the motor. You can make a robotic arm
using steppers,but it won't have enough torque to drive the arm. Normal robotic arms
are made using Servo motors which are very costly. We can have a less cost solution
using a DC motor and a potentiometer. Potentiometer will give the feedback to the
computer. But only 270 degree rotation is possible with a potentiometer. We couple
DC motor shaft with the knob of a potentiometer, so that relative motion between DC
motor shaft and potentiometer is zero. Then connect the output to ROBO DAC and
measure the voltage corresponding to a specific angle. Suppose if you want to move
the arm to a specific angle,then we should see the database, corresponding voltage for
that angle . Rotate that motor until the potentiometer output reaches the
corresponding value.

102
103
DITTO

This is a robotic arm which makes equivalent movement with the movement of the
other robotic arm. You might have seen in some vidoes of humanoid robots that if our
hand moves equivalent movement occurs in the hand of the humanoid robot. In this
case we use a robotic arm. Use ROBO DAC to sense the movement.
105
IC TESTER

We all know that different IC's have different input and output pins.The first
procedure is to program which pins are for input and output. This programming is
done by writing data into control register. That is the name of that register is control
register. We can only input 13 data from parallel port at a time. But this is not
sufficient. So what I am doing is that I am storing data into data register and read the
output from all pins. This will work with all digital IC's work on 5v. I tested it for
74/40/45 series.(don't forget to buy 74LS244 not 74HC244)

WORKING:
Before reading this you have to see the datasheet of the IC's and how it work(if you
don't know about these IC's). First we see the testing of combinationl circuits.So I am
taking a simple IC 7404, same logic for all other IC's working without clock.
106
Before programming you have to see the control port pins. You can see that c2,c1',c0' .
So see the below table for corresponding IC's.From the table we can see that if you
want the output of the decoder to be Q0 then we have to write 3 to control port ,i.e,011
so the output of port will be 000. Always use this table when you are seeing code.
decoder software
03
12
21
30
47
56
75
First connect pin1 of IC to the 1 shown in circuit
diagram.

Now next aim to set control register. You can see that pin 1,3,5 are for input and 2,4,6
for output and 7 for ground, 8 is not used in diagram. So we want to send voltages to
pins 1,3,5,7.
First setting control register(2)
1.select control register(2): since Q2 of decoder is connected to clock of the register. So
first select the register by decoder. First make clock to 0 by 0x01. Now we get clock
low. Then we write to data port. Then select any other pin of decoder which is not
connected. I am using the unconnected output of decoder that is Q7(0x04). So control
register got the data from data port. I am using this way for all registers.
107
2.Write to data port:
so we want the input to be 10101010(pin1-1 and so on) Now we configured pins 1,3,5,7
for input by applying high to the control of tri-state buffer.But you know that D0 is
connected to Do7(data port) so we have to read from right to left for corresponding
data to be send to data port.
outportb(0x37a,0x01);
D;
outportb(0x378,0x55);//1010,1010 first three is for ic's
//next 1 is for ground next one no need so i made it Z
D;
outportb(0x37a,0x04);
D;
/* control register(2) is configured*/
Here D is the delay of 1mS
Setting for control register(1):
outportb(0x37a,0x00);
D;
outportb(0x378,0x2b);//1101,0100 first Vcc three ic's and a Z
D;
outportb(0x37a,0x04);
D;
/* control register(1) is configured*/
use the same step of control register(2) to control register(1)
first select control register(1) by selecting that register by
writing 0x00 to control port (that is clock is low). Then make the
corresponding data control to control register. Then select another
decoder output(0x04 as default)
/*first sending all to low*/
outportb(0x37a,0x02);
D;
outportb(0x378,0x00);//all zero since ground is there
D;
outportb(0x37a,0x04);
D;
/*data register(2) is entered zeros*/
outportb(0x37a,0x03);
D;
outportb(0x378,0x01 );//1000,0000 since pin 14 is VCC
D;
108
outportb(0x37a,0x04);
D;
/*data register(1) is enterd zer0*/
inporting should be done by using C5=1,and select the enable of 74LS244
/* data inputting for all zeros*/
outportb(0x37a,0x26);
D;
a=inportb(0x378);
D;
printf("pins from 1 t0 8, reading float as zero\n");
printf("a(0)d2=%d\n",a);
D;
printf("output should be=01010100\n");
D;
// data inputted for lower pins1 to 8
outportb(0x37a,0x27);
D;
a=inportb(0x378);
D;
printf("pins 16 to 9, reading floating as one\n");
D;
printf("a(0)d1=%d\n",a);
D;
printf("output should be=10101011");
D;
//data inputted for higher pins 16 to 9
/*data outputted all high*/
outportb(0x37a,0x02);
D;
outportb(0x378,0xbf);//1111,1101
D;
outportb(0x37a,0x04);
D;
//data entered data(2)
outportb(0x37a,0x03);
D;

109
outportb(0x378,0xff);
D;
outportb(0x37a,0x04);
D;
//data entered data(1)
//started entering all high
/* inputting all high*/
outportb(0x37a,0x26);
D;
a=inportb(0x378);
D;
printf("all high for and floating zero pin 1 to 8");
D;
printf("a(1)d2=%d",a);
D;
printf("output is a=10101000");
D;
//data from data register(2)
outportb(0x37a,0x27);
D;
getch();
a=inportb(0x378);
D;
printf("all high for pin 16 to 9");
D;
printf("a(1)d1=%d",a);
printf("output is a=11010101");
D;
//data from data register(1)
}
This way you can test combinational logic IC's
For clock driven IC's
first clock check reset and set using normal IC's combinational IC's.
For applying clock first apply data register pin to 1 then apply the
corresponding pin to 0. Thus we get clock for -ve edge level triggering.
I think you will sometimes won't be getting this. Just think of it, you can
get. See the code below you will get it
outcontrol3(0x99);
outcontrol2(0xff);
110
//apply reset
outdata0(0x55);
outdata1(0x7b);
a=inp5();
bin(a,b);
if(b[1]==0) ic[1]+=1;
if(b[5]==0) ic[2]+=1;
//apply set
outdata0(0xb3);
outdata1(0xbd);
a=inp5();
bin(a,b);
if(b[1]==1) ic[1]+=1;
if(b[5]==1) ic[2]+=1;
//J=1 , K=0
outdata0(0xa2);
outdata1(0xff);
//apply clk
outdata1(0xde);
a=inp5();
bin(a,b);
if(b[1]==1) ic[1]+=1;
if(b[5]==1) ic[2]+=1;
//J=0, K=1
outdata0(0x55);
outdata1(0xf7);
//apply clk
outdata1(0xd6);
a=inp5();
bin(a,b);
if(b[1]==0) ic[1]+=1;
if(b[5]==0) ic[2]+=1;
//J=K=0
//applying reset
outdata1(0x7b);
outdata0(0x44);
outdata1(0xf7);

111
//apply clk
outdata1(0xd6);
a=inp5();
bin(a,b);
if(b[1]==0) ic[1]+=1;
if(b[5]==0) ic[2]+=1;
//applying set
outdata1(0xbd);
outdata0(0x22);
outdata1(0xf7);
//apply clk
outdata1(0xd6);
a=inp5();
bin(a,b);
if(b[1]==1) ic[1]+=1;
if(b[5]==1) ic[2]+=1;
//apply J=K=1
//apply reset
outdata1(0x7b);
outdata0(0xb3);
outdata1(0xff);
//apply clk
outdata1(0xde);
a=inp5();
bin(a,b);
if(b[1]==1) ic[1]+=1;
if(b[5]==1) ic[2]+=1;
//next clk
outdata1(0xff);
outdata1(0xde);
a=inp5();
bin(a,b);
if(b[1]==0) ic[1]+=1;
if(b[5]==0) ic[2]+=1;

112
LAN CONTROLLED PARALLEL PORT

You might have heard of controlling home equipments using Lan or internet. Here we
are going to use one for Lan. The folder named lan controlled parallel port has the
source code and executable file. This program has been done by Mahesh Paliath. He
used VC++ and WinSock library to make the program.

GAME BOY CAMERA INTERFACE

Here are some links for game boy camera interface


http://geocities.com/vjkemp/gbcam.htm
http://pages.zoom.co.uk/andyc/camera.htm
http://sophiateam.undrgnd.free.fr/microcontroller/camera/index.html

you can buy game boy camera using a credit card from www.ebay.com

OPTICAL MOUSE AS SCANNER


http://prism.mem.drexel.edu/stanciu/Web_page/optical_mouse.htm
http://www.engadget.com/2006/01/08/turn-your-optical-mouse-into-a-crappy-
scanner/
http://slashdot.org/articles/06/01/08/1536200.shtml

113
I am winding up this book hoping this book will help newbies to start
with parallel port interfacing. All the source codes given are tested and verified. I
haven't verified the following sourcecodes
bipolar.c
unipolar.c
keypad.c
The remaining source codes worked well with me and it will work for you. Once you
have completed this book then go for microcontroller . My next book will be on AVR
microcontroller.

BIBIN JOHN

You might also like