Professional Documents
Culture Documents
256 LPT
256 LPT
single PC. Our project aims at the same and could be used to control the printer power, loads
& other household electrical appliances. The circuit comprises decoder, inverter, latch &
relay driver sections. To control these equipments we are using PCs Parallel port. The
program of controlling is written in C language. It is compiled using Turbo C compiler.
The project though a bit expensive, is very efficient in control of real world peripherals.
Contents:
1.
2.
3.
4.
INTRODUCTION
PARTS LIST
BLOCK DIAGRAM
COMPONENT DESCRIPTION
o Parallel Port
o IC 74LS154
o IC 74LS74
o 1C 74 LS05
o 1C ULN 2803
o Relay
5. CIRCUIT DESCRIPTION AND WORKING
6. SOFTWARE PROGRAM
7. CONCLUSION
INTRODUCTION:
The PC parallel port is an expensive yet a powerful platform for implementing projects
dealing with the control of real-world peripherals. This port can be used to control the printer
as also household and other electrical appliances. The computer program through the
interface circuit controls the relays, which, in turn, switch the appliances on or off.
The parallel port has 12 outputs including 8 data lines and 4 control lines. The circuit
described here can be used to control up to 255 electrical appliances using only eight data
lines from the parallel port. Besides, the software program allows the users to know the
current status of the loads.
PARTS LIST:
Semiconductors:
ICl, IC2, IC3
IC4, IC5, IC6
IC7-ICI4
ICI5, IC16
Misc.
Power supply
Relay
BLOCK DIAGRAM:
The block diagram in Fig. 1 depicts the main components of the switching system for 255
electrical loads using PC. The control command to switch on/off the appliances is given
through the keyboard. The software program scans the input and as per the input command,
the data is available at the parallel port.
4. HEX INVERTER:
It is used for inversion of input signal. Since outputs from the de-multiplexers are active low,
we invert them. This IC has 6 not-gates and hence called a hex-inverter.
5. ULN-2803 : OCTAL PERIPHERAL DRIVER ARRAYS:
The eight NPN Darlington connected transistors in this family of arrays are ideally suited for
interfacing between low logic level digital circuitry (such as TTL, CMOS or PMOS/NMOS)
and the higher current/voltage requirements of lamps, relays, printer hammers or other similar
loads for a broad range of computer, industrial, and consumer applications. All devices
feature open-collector outputs and freewheeling clamp diodes for transient suppression. The
ULN2803 is designed to be compatible with standard TTL families while the ULN2804 is
optimized for 6 to 15volt high-level CMOS or PMOS.
6. RELAYS:
The relay is a device by means of which an electrical circuit can be controlled (opened or
closed) by sensing a change in the circuit in which it is connected. The relays can be either
electromagnetic or electronic. In this circuit the electromagnetic relay is used to connect or
disconnect the supply to the appliance to be controlled. It works on the principle of
electromagnetic attraction and electromagnetic induction. These relays can be actuated by AC
or DC quantities. In these relays there are one or more coils, movable elements, contact
systems etc.
CIRCUIT DESCRIPTION AND WORKING:
The circuit comprises decoder, inverter, latch circuit, and relay driver sections. The circuit,
excluding relay drivers and relays, is powered by a 5V DC regulated supply. Relay drivers
and relays are driven by a 12V DC regulated supply. Each relay is rated 12V,200-ohm.
The circuit for switching on/off 6 loads is shown in Fig. 2. For more than 6 loads, you can
add more ICs in a similar way as shown in this circuit. IC 74LSI54 is a 24-pin, 4-to-16 line
decoder IC. This IC is designed to accept four inputs and provide 16outputs. Input addresses
Al through A4 to pins 20 through 23 of IC1 and IC2 (IC 74LSI54) each are given from the
data lines of the computer parallel port.
In this circuit, only pins 2 through 9 of the parallel port are used, where data lines D0 through
D3 form the 4-bit data input and D4 through D7 are address-select or control lines for the
circuit. Pins 18 through 25 are shorted to ground. Data lines D0 through D3 are the input
addresses for IC2, and data linesD4 through D7 are the input addresses for IC1.
When Enable pins EI and E2 (active low) are high, all the outputs go high irrespective of the
address inputs (AI through A4). Enable pins EI and E2 of ICI are grounded and its output
pins YO through YI5 are connected to Enable pins of the respective decoder ICs.
Initially all the data inputs (D0 through D7) are low. Thus, except Y0,all the outputs of ICI
and IC2 are high. The output Y0 of IC2 is not used, for the reason that when all the input data
is low, none of the outputs of IC 74LSI54 is used for switching the loads. Suppose, out of
eight input data lines, D0 is high. So, except Y1, all the outputs of IC2 will be high. YI is
then inverted using IC4 (IC 74LS05). The output of IC4 at pin 2 is given to pin 3 of IC7 (lC
74LS74). IC 74LS74 is a dual D-type flip-flop used for latching the data.
With an active rising edge of the clock pulse (CP-1 or CP-2), the data input will be locked in
IC7 through IC14 until the next rising edge of the input clock pulse. The outputs of ICs
74LS74 are given to relay driver ICs ULN2803 (lC-15 and IC-16), which, in turn, drive the
relays. The relays are used to switch on/off the appliances.
SOFTWARE :
The program to control the appliances is written in C. it is compiled using Turbo C compiler.
The flow chart of the program is as follows
The very first option shows the list of the loads that could be controlled using this software
along with their codes.
The outstanding part of this software is activating of required PROFILES at once so that the
burden of controlling of individual devices is eliminated.
The activation of night profile is as shown below. We can even set the user defined profiles.
As a basic requirement the control over individual devices is also provided. If the user by
mistake tries to switch ON the device which is already ON, the software detects it & the
corresponding message is displayed.
The software also allows the user to know the current status of the loads.
SOURCE CODE:
/* PROGRAM TO CONTROL MULTIPLE DEVICES USING PCS PARALLEL PORT */
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
#include<string.h>
FILE *status;
int ch;
char *dev_list[]={idle,TUBELIGHT,FAN,NIGHTLAMP,TELEVISION,
AIRCOOLER,REFRIGERATOR,DVD_PLAYER,end };
int day[]={0,2,4,6,0,1,3,5,7,0};
int night[]={0,1,2,3,5,6,7,0,4,0};
int out[]={0,3,0,1,2,4,5,6,7,0};
int reset[]={0,0,1,2,3,4,5,6,7,0};
int device[256];
int port=0378;
void activate(int *ptr);
void switch_load(int);
main()
{
int disp_menu();
void disp_load();
void profiles();
void switching();
void load_status();
void exit_code();
int welcome();
int choice;
int hour;
status_file();
for(;;)
{
clrscr();
hour=welcome();
choice=disp_menu();
switch(choice)
{
case 1: disp_load();
printf(\n\n\n Press any key to continue.);
getch();
break;
case 2: profiles();
break;
case 3: switching();
break;
case 4: load_status();
break;
case 5: exit_code(hour);
int choice;
printf(\n 1.LIST OF LOADS & THEIR CODES);
printf(\n 2.STANDARD PROFILES(DAY/NIGHT));
printf(\n 3.SWITCHING);
printf(\n 4.LOADS STATUS);
printf(\n 5.EXIT\n);
printf(\t\t\t\t ENTER YOUR CHOICE:);
scanf(%d,&choice);
return(choice);
}
void disp_load()
{
int i;
clrscr();
printf(\n THE LIST OF LOADS WHICH CAN BE CONTROLLED ARE:\n\n);
for(i=1;strcmpi(&dev_list[i][0],end);i++)
printf(\n\t %2d.%s,i,dev_list[i]);
return;
}
void profiles()
{
char p;
for(;;)
{
clrscr();
printf(\n STANDARD PROFILES:\n);
printf(\n\n\t\t 1.DAY MODE);
printf(\n\t\t 2.NIGHT MODE);
printf(\n\t\t 3.OUT OF STATION);
printf(\n\t\t 4.RESET);
printf(\n\t\t 5.EXIT);
printf(\n\n\n\n ENTER YOUR CHOICE: );
p=getchar();
switch(p)
{
case d:
case D:
case 1: activate(day);
return;
case n:
case N:
case 2: activate(night);
return;
case o:
case O:
case 3: activate(out);
return;
case r:
case R:
case 4: activate(reset);
return;
case e:
case E:
case 5: return;
}
}
}
void activate(int *ptr)
{
int i;
char c;
printf(\n\nTHE FOLLOWING DEVICES WILL BE SWITCHED ON..\n);
for(i=1;ptr[i]!=0;i++)
printf(\n%d.%s,ptr[i],dev_list[ptr[i]]);
printf(\n\nTHE FOLLOWING DEVICES WILL BE SWITCHED OFF..\n);
for(i++;ptr[i]!=0;i++)
printf(\n%d.%s,ptr[i],dev_list[ptr[i]]);
printf(\n\n DO YOU WANT TO ACTIVATE THIS PROFILE.(y/n):);
c=getch();
printf(%c,c);
getch();
if(c==y'||c==Y')
{
for(i=1;ptr[i]!=0;i++)
if(device[ptr[i]]==0)
switch_load(ptr[i]);
for(i++;ptr[i]!=0;i++)
if(device[ptr[i]]==1)
switch_load(ptr[i]);
}
}
void switching()
{
int i,on_off;
disp_load();
printf(\n\n\n\nEnter the code of the device to be switched:);
scanf(%d,&i);
printf(OPTIONS:);
printf(\t 0OFF\t 1ON\n);
printf(\n ENTER YOUR CHOICE:);
reenter: scanf(%d,&on_off) ;
if(on_off==1)
{
if(device[i]==1)
{
printf(\nThe Device is already ON);
getch();
}
else
switch_load(i);
}
else if(on_off==0)
{
if(device[i]==0)
{
printf(\nThe Device is already OFF);
getch();
}
else
switch_load(i);
}
else
{
printf(Invalid option\n Please Re-enter);
goto reenter;
}
}
void load_status()
{
int i;
clrscr();
printf(\n\n THE FOLLOWING DEVICES ARE ON:\n);
for(i=1;strcmpi(&dev_list[i][0],end);i++)
if(device[i]==1)
printf(\n%d.%s,i,dev_list[i]);
printf(\n\nTHE FOLLOWING DEVICES ARE OFF:\n);
for(i=1;strcmpi(&dev_list[i][0],end);i++)
if(device[i]==0)
printf(\n%d.%s,i,dev_list[i]);
printf(\n\n\n\nPress any key to continue);
getch();
}
void switch_load(int adrr)
{
if(device[adrr]==0)
{
device[adrr]=1;
outportb(port,adrr);
delay(50);
outportb(port,000);
}
else
{
evice[adrr]=0;
outportb(port,adrr);
delay(50);
outportb(port,000);
}
}
void exit_code(int hour)
{
clrscr();
printf(\t\t\t THANK YOU FOR USING THIS SOFTWARE \n);
if(hour>=013||hour<=04)
printf(\n\n GOOD NIGHT.\n);
file_update();
printf(\n\n\n\n\n\n\n Press any key to EXIT);
getch();
exit(0);
}
file_update()
{
int i=0;
status=fopen(status.txt,w+);
if(status==NULL)
{
puts(Unable to open device status file);
exit(1);
}
while(1)
{
ch=device[i];
if(i>=256)
break;
else
fputc(ch,status);
i++;
}
fclose(status);
return 0;
}
CONCLUSION:
This project, can be effectively and conveniently utilized for the control of different
appliances. As this project could be extended to control about 255 devices, this could be used
for computerization of an office, home, or a firm. Though it is quiet costlier, the circuit is
simple and the working mechanism could be easily understood. An added advantage of this
project is that we are able to know the status of the device to be controlled. The program to
control the appliances is written in C language which is more user friendly and easy to
understand than other programming languages.
Disadvantages / Improvements:If at all a new device has to be added to the hardware the software doesnt support this to