You are on page 1of 91

Visvesvaraya Technological University, Belgaum

Project Work II (EC8P2) Report


on

LINE FOLLOWING ROBOT

Submitted in partial fulfillment of the requirement of VIII semester


ELECTRONICS & COMMUNICATION Engineering by
AMITHASH E. PRASAD (1GA01EC002)
Under the guidance of

Internal Guide
B. N. Manjunatha Reddy
Assistant Professor
Dept. of E&C, GAT

Department of Electronics and Communication Engineering

Global Academy of Technology, Bangalore-98

2005
GLOBAL ACADEMY OF TECHNOLOGY
(National Education Foundation)
Rajarajeshwari Nagar, Ideal Home Township,
Off. Mysore Road, Bangalore – 560098.

DEPARTMENT OF ELECTRONICS AND COMMUNICATION

CERTIFICATE
Certified that the project work entitled LINE FOLLOWING ROBOT carried out by Mr
Amithash E, Prasad USN 1GA01EC002 a bonafide student of 8th Semester in partial
fulfillment for the award of Bachelor of Engineering in Electronics and Communication of
Visvesvaraya Technological University, Belgaum, during the year 2005. It is certified that
the corrections/suggestions indicated for Internal Assessment have been incorporated in the
Report department library. The project report has been approved as it satisfies the academic
requirements in respect of project work prescribed for the said degree.

Signature of the Guide Signature of the HOD Signature of the Principal


(B. N. Manjunatha Reddy) (Prof.N. Narasimha Swamy) (Dr.T.R.Seetharam)

External Viva
Name of the Examiners Signature with date
1.

2.
ACKNOWLEDGEMENT
An endeavor over long period can be successful only with advice and guidance of many well
wishers.

My sincere thanks to the management and Dr. T. S. Seetharam, principal, Global Academy
of Technology, for providing me the opportunity to conduct my project work.

I am highly indebted to N.Narasimha Swamy, H.O.D, Electronics & Communication


Department, GAT for his assistance and constant source of encouragement.

I wish to express my profound and deep sense of gratitude to H. S. Manjunatha Reddy,


Assistant professor, Department of Electronics and Communication, Project Co-ordinator, for
sparing his valuable time to extend help in every step of my project work.

I whole heartedly express my thanks to, B. N. Manjunatha Reddy, Assistant Professor,


Electronics & Communication Department, GAT for sparing time to go through every tiny
detail and give his valuable suggestions to make this project and report a success.

I would also like to thank the staff of E& C Dept for their generous guidance.

I’d like to thank Prof. A. J. Menon, Instrumentation department, IISC, Bangalore, for his
valuable support and guidance throughout the project.

Last but not the least we would like to thank our friends and family for their help in every
way for the success of this project report.

AMITHASH E. PRASAD
CONTENTS

1. SYNOPSIS………………………………………………………………. 01
2. PREAMBLE……………………………………………………………... 03
2.1 INTRODUCTION………………………………………….... 03
2.2 PROBLEM DEFINITION………………………..………... 04
2.3 OBJECTIVES OF THE STUDY……………………………. 04
2.4 SCOPE OF STUDY…………………………………………. 05
2.5 REVIEW OF LITERATURE……………………………….. 05
2.6 APPLICATIONS………………………………………......... 06
2.7 LIMITATIONS…………………………………………….... 06
2.8 METHODOLOGY…………………………………………... 07
3. THEORY……………………………………………………………….... 09
3.1 THE DIFFRENTIAL STEERING SYSTEM……………….. 09
3.2 D.C. MOTORS……………………………………………… 10
3.3 H-BRIDGE MOTOR CONTROL…………………………... 11
3.4 INTELLIGENCE……………………………………………. 14
3.5 THE PIC 16F873 MICROCONTROLLER…………………. 16
3.6 PWM SPEED CONTROL…………………………………... 18
3.7 THE PICMICRO CCP MODULES…………………………. 18
4. DESIGN AND IMPLEMENTATION…………………………………. 22
4.1 SCHEMATIC……………………………………….………... 22
4.2 PROCESS EXPLANATION…………………………..……... 35
4.3 FLOW CHART………………………………..…….……….. 37
4.4 CODE……………………………………………………….... 40
4.5 CODE EXPLANATION…………………………...………… 51
5. RESULT & CONCLUSION………………………………………….. 55
6. BIBLIOGRAPHY……………………………………………………….. 56
7. APPENDIX……………………………………………………………… 58
LINE FOLLOWING ROBOT

1. SYNOPSIS
The line following robot, operates as the name specifies. It is programmed to
follow a dark line on a white background and detect turns or deviations and modify the
motors appropriately. The optical sensor is an array of commercially available IR
reflective type sensors.

The core of the robot is the PIC 16F873 microcontroller. The speed control of the
motors is achieved by the two PWM modules in the µC. The direction control is provided
by 2 I/O pins. The H-Bridge motor driving/control chip takes these signals and translates
it into current direction entering the motor armature. The motors require separate supply
for operation.

The differential steering system is used to turn the robot. In this system, each back
wheel has a dedicated motor while the front wheels are free to rotate. To move in a
straight line, both the motors are given the same voltage (same polarity). To manage a
turn of different sharpness, the motor on the side of the turn required is given lesser
voltage. To take a sharp turn, its polarity is reversed.

The sensor is an array of 7 IR LED-Phototransistor pairs arranged in the form of


an inverted V. The output of each sensor is fed into an analog comparator with the
threshold voltage (used to calibrate the intensity level difference of the line with respect
to the surface). These 7 signals (from each photo-reflective sensor) is given to a priority
encoder, the output of which to the microcontroller.

The control has 6 modes of operation, turn left/right, move left/right, and drift
left/right. The actual action is caused by controlling the direction/speed of the two motors
(the two back wheels), thus causing a turn. The actual implementation is a behavior based
(neural) control with the sensors providing the inputs. The robot can also be programmed
to find the line by pseudo-random movement in case no line is detected by the optical
sensor.

1
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Main Motor
Clock
Power Power
4 MHz
Supply Supply

Left
H - Bridge Motor
PIC 16F873 DC Motor
Microcontroller HEX Control
Inverter Right
Motor

Priority
Encoder Threshold
Analog
Comparators Voltage
NOR
Gate

Sensor Array

Figure 1.1: Block Diagram of the Line Following Robot

2
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

2. PREAMBLE

2.1. INTRODUCTION
The robots of the movies, such as C-3PO and the Terminator are portrayed as
fantastic, intelligent, even dangerous forms of artificial life. However, robots of today are
not exactly the walking, talking intelligent machines of movies, stories and our dreams.

In the 1970’s scientists proposed that in the year 2000 we would have created
artificial life forms, almost perfect in terms of intelligence and capabilities. The dream of
free and efficient labor made the researchers of the time go on day and night to bring the
dream to existence. But the task was futile due to the lack of compact processors to carry
out the calculations which were oh so necessary. Now in the year 2000, the micro-
processor technology is thousands of times more advanced than what existed back then.
But still the robots of today are no way close to what our movies portray them to be. This
is not only due to drawbacks in processor technology, but also in various other fields such
as vision, motor control so and so forth.

Robots may never make it to our kitchens or living rooms as personal slaves, but
they certainly have made their way to the manufacturing industry, aero-space industry,
and yes to the work benches of robotic hobbyists. Robots are now working in dangerous
places, such as nuclear disposal, space explorers, fire fighting, etc.

The word "robot" originates from the Czech word for forced labor or serf. Robots
are electronic devices intended to perform a desired function. Many refer to them as
"machines", however, a drill press is a machine, yet it requires an operator to perform its
function, where robots can be programmed to do it themselves. Robots have the potential
to change our economy, our health, our standard of living, our knowledge and the world
in which we live. As the technology progresses, we are finding new ways to use robots.
Each new use brings new hope and possibilities, but also potential dangers and risks.
Robotics is not only a science, but it is also an art. The bots we build reflect the ideas and
personalities we portray. There are many different versions of robots that can be made.
From turtle bots to vehicles like the Mars rovers to rovers like R2-D2. From walkers that
have anywhere from 1 to 10 legs to robotic arms to androids. Whatever you can dream,
you can create. The level of expertise you want your robot to have and how much

3
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

learning and research you want to do is up to you. For those who have relative experience
in computer programming and electronics, this may come easier to you than anyone new
to the hobby. Those who build models, RC vehicles, and other artwork will find it
challenging to modify some of their previous projects.

We have seen how ants always travel in a line, following an invisible route in
search of food, or back home. How on roads we follow lanes to avoid accidents and
traffic jams. Ever thought about a robot which follows line? A perfect or near perfect
mimic of mother-nature? After all the purpose of robotics is to recreate in terms of
machines what we see around to solve a problem or fulfill a requirement.

Programming intelligence into a robot (or computer) is a difficult task and one
that has not been very successful to date even when supercomputers are used. This is not
to say that robots cannot be programmed to perform very useful, detailed, and difficult
tasks; they are. Some tasks are impossible for humans to perform quickly and
productively. For instance, imagine trying to solder 28 filament wires to a 1/4in square
sliver of silicon in 2 s to make an integrated circuit chip. It’s not very likely that a human
would be able to accomplish this task without a machine. But machine task performance,
as impressive as it is, isn’t intelligence.

2.2. PROBLEM DEFINITION


In the industry carriers are required to carry products from one manufacturing
plant to another which are usually in different buildings or separate blocks.
Conventionally, carts or trucks were used with human drivers. Unreliability and
inefficiency in this part of the assembly line formed the weakest link. The project is to
automate this sector, using carts to follow a line instead of laying railway tracks which are
both costly and an inconvenience.

2.3. OBJECTIVES OF THE STUDY

• The robot must be capable of following a line.


• It should be capable of taking various degrees of turns
• It must be prepared of a situation that it runs into a territory which has no line to
follow. (Barren land syndrome)
• The robot must also be capable of following a line even if it has breaks.
4
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

• The robot must be insensitive to environmental factors such as lighting and noise.
• It must allow calibration of the line’s darkness threshold.
• The robot must be reliable
• Scalability must be a primary concern in the design.
• The color of the line must not be a factor as long as it is darker than the
surroundings.

2.4. SCOPE OF STUDY


The robot can be further enhanced to let the user decide whether it is a dark line
on a white background or a white line on a dark background. The robot can also be
programmed to decide what kind of line it is, instead of a user interface. The motor
control could be modified to steer a convectional vehicle, and not require a differential
steering system. The robot could be modified to be a four wheel drive. Extra sensors
could be attached to allow the robot to detect obstacles, and if possible bypass it and get
back to the line. In other words, it must be capable predicting the line beyond the
obstacle. Speed control could also be incorporated. Position and distance sensing devices
could also be built in which can transmit information to a mother station, which would be
useful in tracking a lost carrier.

2.5. REVIEW OF LITERATURE


First and foremost, no robot could have been built to completion without a strong
hold on the microcontroller used. Most of the basic, intermediate, and advanced literature
about the PIC microcontroller was found in the book “Programming and Customizing the
PIC Microcontroller” by Myke Predko. His detailed explanation of every topic made it
possible to overcome many problems which were encountered during design and
implementation. The book also provided a programmer for the PIC microcontroller which
was an indispensable tool helping me experiment with algorithms rather than blindly copy
code from the NET.

The next resource for the PIC microcontroller was the MIDRANGE MANUAL
which provides a detailed explanation of each and every hardware feature and the
instruction set. The most helpful is the design tips section which answered most of the
questions which were bogging my head down.

5
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Looking through the library on books on robotics, there was one thing I noticed.
There are no books which deal with understandable basics, or implementation. After a lot
of search, I found “PIC Robotics, A beginner’s guide to robotics projects using the
PICmicro” by John Iovine on the net in the form of an e-Book, which I later printed out
and got it bound! This book is an excellent compliment to the book by Predko.

Robotics by C. K. Kuo was another book I referred for this project. Even though it
was of no direct use to this project, it made me understand many aspects of robotics
which I’d have ignored otherwise. Hopefully, the knowledge I have gained by this book
will come in handy in my next robotic endeavor.

Last but definitely not the least, the Internet. This is where I found websites giving
detailed explanations on a few terminologies. Reference of similar projects created by
others and badly needed tutorials. There is no other place to easily get the data sheets of
the used components. I have listed out a few websites which were of most help for the
project. And in the finale, a huge thanks to Google.com, no other search engine is even
close! No I could not have done anything without the NET even if I had a million books.
The NET is worth much more.

2.6. APPLICATION
• Industrial automated equipment carriers
• Entertainment and small household applications.
• Automated cars.
• Tour guides in museums and other similar applications.
• Second wave robotic reconnaissance operations.

2.7. LIMITATIONS
• Choice of line is made in the hardware abstraction and cannot be changed by
software.
• Calibration is difficult, and it is not easy to set a perfect value.
• The steering mechanism is not easily implemented in huge vehicles and
impossible for non-electric vehicles (petrol powered).
• Few curves are not made efficiently, and must be avoided.
• Lack of a four wheel drive, makes it not suitable for a rough terrain.
6
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

• Use of IR even though solves a lot of problems pertaining to interference, makes it


hard to debug a faulty sensor.
• Lack of speed control makes the robot unstable at times.

2.8. METHODOLOGY
The first idea was to use optical imaging (CCD cameras) to see the line. This was
later given up due to various reasons including complexity and unavailability of
components. Later a choice was made to use an array of sensors which solved most of
the problems pertaining to complexity.

The resistor values used in the sensor array were experimentally determined rather
than theoretical mathematical design calculations. This was done as the data sheets of
the proximity sensor was not available anywhere and most of the parameters had to be
determined experimentally.

The L293D chip is used as it was a much better option than forming an H-Bridge
out of discrete transistors, which would make the design unstable and prone to risk of
damage.
The PIC microcontroller was used as it is the only device I have a full practical
knowledge about, and most of all a RISC processor which are better suited for real-
time operations. Thus the midrange devices were chosen. The part 16F873 was used
as it has 2 CCP modules which I could use in PWM mode thus simplifying the
software routines which I’d otherwise had to write to generate the PWM control for
the motors.

A priority encoder was used to reduce the number of I/O lines used, which
reduces it to 5 which otherwise would require 7 and a lot of additional complexity in
software which only results is sluggish operation and inefficiency.

Extra hardware was added to let the robot know if it is on a surface or not. This
helps it from not running off a table or preserving battery if manually lifted off the
floor.

7
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Software was coded day and night, deciding on a few algorithms and few tiny
details which gradually got the robot to do what was required. Then extra code was
put to find a line if it is not on one.

The PCB is the only thing in the whole project for which I turned for outside help.
By the time the design became successful, time had run out. I no longer had time or
resources to create a PCM myself. This was done by JI Electronics.

The project was entirely (other than PCB) designed, created, soldered, tested and
coded by me. For which I’m thankful for, as I have learnt much more in the processes and
not to mention the fun had.

8
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

3. THEORY

3.1. THE DIFFERENTIAL STEERING SYSTEM

The differential steering system is familiar from ordinary life because it is the
arrangement used in a wheelchair. Two wheels mounted on a single axis are
independently powered and controlled, thus providing both drive and steering. Additional
passive wheels (usually casters) are provided for support. Most of us have an intuitive
grasp of the basic behavior of a differential steering system. If both drive wheels turn in
tandem, the robot moves in a straight line. If one wheel turns faster than the other, the
robot follows a curved path. If the wheels turn at equal speed, but in opposite directions,
the robot pivots.

Figure 3.1: The Differential steering model

where give the displacement (distance traveled) for the left and right wheels
respectively, is the turn radius for the inner (left) wheel, is the distance between
wheels (from center-to-center along the length of the axle), and is the angle of the turn

9
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

in radians ( ). is the speed at the center point on the main


axle. In this discussion, we will treat the axle's center point as the origin of the simulated
robot's frame of reference.

Once we've established the simple geometry for the differential steering system, it
is easy to develop algorithms for controlling the robot's path. Note, though, that we did
make an important simplifying assumption: the wheels maintain a steady velocity. We
neglected the effects of acceleration. If the wheels are allowed to accelerate, the curve
which describes the robot's trajectory can become much more complicated. When
working with very light robots, where the mass (and inertia) of the platform is small, we
can often get away with treating changes in speed as nearly instantaneous. The path that
the robot follows will not be truly circular, but it will be close enough for many
applications. For larger and heavier robots, of course mass is important and acceleration
must be considered.

If the right wheel is moving at a velocity of VR and the left wheel at a velocity of VL, then
the following equation can be derived.

Where a positive θ implies counter-clockwise rotation; the above equation clearly shows
that the angle of the turn can be increased by either,
• Increasing the difference in the wheel’s velocities (VR – VL), or
• Keep the wheels at the different velocity for a longer time (t)
All this while b remains constant; in the line following robot, both these parameters are
dynamically changed by the sensors in order to keep the robot on the line.

3.2. D.C. MOTORS


DC motors are widely used, inexpensive, small and powerful for their size.
Reduction gearboxes are often required to reduce the speed and increase the torque output
of the motor. Unfortunately more sophisticated control algorithms are required to achieve
accurate control over the axial rotation of these motors. Although recent developments in
stepper motor technologies have come a long way, the benefits offered by smooth control
and high levels of acceleration with DC motors far outweigh any disadvantages.

10
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Several characteristics are important when selecting DC motors and these can be
split into two specific categories. The first category is associated with the input ratings of
the motor and specifies its electrical requirements, like operating voltage and current.
The second category is related to the motor's output characteristics and specifies the
physical limitations of the motor in terms of speed, torque and power.

Example specifications of the motors used are given below:

Characteristic Value

Operating Voltage: 6V to 12V

Operating Current: 2A Max. (Stall)

Speed: 2400 rpm

Torque: 30 gm-cm

As noticed, the torque provided can hardly move 30gm of weight around with
wheel diameter of about 2cm. This is a fairly a huge drawback as the robot could easily
weigh about a kg. This is accomplished by gears which reduce the speed (2400 rpm is
highly impractical) and effectively increase the torque. If the speed is reduced by using a
gear system by a factor of ρ then the torque is increased by the same factor. For
example, if the speed is reduced from 2400 rpm, to 30 rpm, then the torque is increased
by a factor of (2400/30 = 80) in other words the torque becomes 30 × 80 2400 gm-cm or
2.4 kg-cm which is more than sufficient.

3.3. H-BRIDGE MOTOR CONTROL


DC motors are generally bi-directional motors. That is, their direction of rotation
can be changed by just reversing the polarity. But once the motors are fixed, control
becomes tricky. This is done using the H-Bridge. The figure is given below.
A B C D ACTION

1 0 0 1 CLOCKWISE

0 1 1 0 COUNTER-CLOCKWISE

0/1 0/1 1/0 1/0 BRAKE

ANY OTHER STATE FORBIDDEN

11
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Figure 3.2: The H-Bridge Using Relays.

The Explanation is simple, If A & D are turned on, then the current flows in the direction
shown in the figure below.

Figure 3.3: Clockwise rotation

If B & C are turned on, then the motor rotates in counter clockwise direction.

Figure 3.4: Counter-Clockwise rotation


12
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

If you turn on the two upper circuits, the motor resists turning, so you effectively
have a breaking mechanism. The same is true if you turn on both of the lower circuits.
This is because the motor is a generator and when it turns it generates a voltage. If the
terminals of the motor are connected (shorted), then the voltage generated counteracts the
motors freedom to turn. It is as if you are applying a similar but opposite voltage to the
one generated by the motor being turned. In other words, it acts like a brake. Any other
state like A & C = ON or B & D = ON will cause a direct path to ground causing a very
high current to pass through the relays thus causing a burnt fuse (if it exists).

The following figure shows an H-Bridge using only transistors. The same theory
applies.

Figure 3.5: H-Bridge using transistors.

Usually, the above circuitry can be used only for direction control. The Existing H-Bridge
is further modified to include another transistor, now making speed control possible too.
This is shown in the figure below.

Figure 3.6: Enhanced H-Bridge


13
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

The same direction rules apply, but now the motor will behave as per the direction
control only when a ‘1’ is given to the EN input. Speed control is usually done by giving
a PWM signal, and the duty cycle is varied to vary the speed of the motor. Usually
protection diodes are also incorporated across the transistors to catch the back voltage that
is generated by the motor's coil when the power is switched on and off. This fly-back
voltage can be many times higher than the supply voltage! If diodes are not used, the
transistors have a good chance to get burnt.

3.4. INTELLIGENCE
There are two schools of thought concerning the creation of intelligence in
artificial systems. The first approach programs an expert system (top down); the second is
a neural or behavior based system (bottom up). The expert system uses rules to guide the
robot in task performance. Behavior based programs create an “artificial” behavior in the
robot that causes it to reflectively (automatically) perform the task required. Behaviors
may be programmed (software) or may be hardwired into the robot. Behavior based
intelligence doesn’t require a central processor, although such a system may have one.

Let’s look at a practical programming problem and see how each approach differs.
Suppose you worked for a company that designed a new robotic vacuum cleaner. The
purpose of the robot is to vacuum the floor of a customer’s home or apartment. Your job
is to program the navigation system. The robot needs to move autonomously throughout
the house. How would you go about programming the robot to accomplish navigation
around the home so it could travel in and out of rooms without destroying the place?

Let’s assume you first decide to try an expert navigation system. This approach uses brute
force programming and a lot of memory. You might begin by dividing the task of
vacuuming the apartment or home into smaller tasks such as vacuuming individual
rooms. You begin by programming into the robot’s memory an electronic map (floor
plan) of the home or area where the robot needs to vacuum. Then you map out each
individual room and its contents. The robot must have the ability to measure its
movement as it moves as well as compass direction to maintain its location integrity.
Once this is accomplished, the robot must have an exact start location on the floor plan.

14
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

The robot’s movement from the start position is measured and plotted on its
internal floor plan map. Problems occur if an object is positioned differently or is out of
place, such as a trash receptacle or chair that has been moved. In this situation the real
world does not match the robot’s internal map. Similar problems occur if new objects are
left on the floor such as a bag, toy, or pet.

Even so, these obstacles would not present too much of a problem for an expert
system. To compensate, a secondary collision detection subprogram could be written to
detect, map, and go around an obstacle not existing on the internal map. The robot
continues to move and vacuum the floor. Keep in mind that as the robot navigates around
new obstacles, it’s continually updating its internal map as it travels, to maintain its
location integrity. These tasks are gobbling up computer time and memory.

The robot vacuum accomplished its task. Now suppose you w ant to share this
robot or rent it. Now you have a problem. Each new house and every room in the new
house would require its own electronic map. Although expert programming does work, it
tends to be inflexible and not adaptive toward new or innovative situations.

Now let’s try the other approach that uses behavior based or bottom-up
programming. Instead of programming internal maps, we program sensor responses and
behavior based algorithms (feed-forward and feedback loops) for sensing and traveling
around obstacles and avoiding getting stuck underneath furniture or trapped in corners.
Without any internal map we allow the robot to travel and move around the house in a
random manner. The idea is that while traveling in a haphazard manner, it will eventually
make its way throughout the rooms, cleaning the floor as it goes. Because the robot
travels randomly, it will take longer for the robot to vacuum the entire floor, and it may
miss a spot here and there, but it gets the job done. Since this behavior based type of robot
vacuum isn’t programmed for a particular house or room, it may be used in any house in
any room at any time.

While our example is simple, it does illustrate the main differences between
expert and behavior based (neural) programming. But let’s look at just one more example
before we move on.

15
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Expert systems typically have all the answers that the designers believe will be required
by the system programmed into the system before it begins. It may store and categorize
new information, but based on previously determined categories and existing knowledge.
An example of this system could be a rock identification system. The robot examines
unknown rocks based on known characteristics of rocks, such as color, hardness,
scratchability, acid reaction tests, mass, etc. The expert system fails if it inadvertently
picks up a piece of ice that melts to water during the tests. Well, it fails as long as the
designer(s) never anticipated the robot picking up a piece of ice by mistake and made
allowances for it.

Neural (behavior based) systems are not programmed and are more adaptive, as
shown in the previous example. But is a neural system suitable for this task of rock
identification? Probably not! There are instances in which expert systems are the method
of choice. One shouldn’t blindly assume one system is better than the other in all cases.

To date, behavior based robots are more successful at task accomplishments such
as traveling over unfamiliar and rough terrain than are programmed robots. (Other neural
based intelligence includes speech recognition, artificial vision, speech generation,
complex analysis of stock market data, and life insurance policies.)

The line following robot uses behavior based programming, to accomplish the
task at hand. For one, the system may not be a “neural” system pre say. But this is
simulated in software.

3.5. THE PIC 16F873 MICROCONTROLLER


The PIC microcontrollers are a group of 8 – bit microcontrollers of RISC
(Reduced Instruction Set Computer) architecture. It has various features few of which are
given below.
Microcontroller Core Features:
• Only 35 single word instructions to learn
• All single cycle instructions except for program branches which are two cycle
• Operating speed: DC - 20 MHz clock input
• 4K x 14 words of FLASH Program Memory,
• Up to 192 x 8 bytes of Data Memory (RAM)

16
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

• Up to 128 x 8 bytes of EEPROM Data Memory


• Interrupt capability (up to 13 sources)
• Eight level deep hardware stack
• Direct, indirect and relative addressing modes
• Power-on Reset (POR)
• Power-up Timer (PWRT) and Oscillator Start-up Timer (OST)
• Watchdog Timer (WDT) with its own on-chip RC oscillator for reliable
operation
• Programmable code protection
• Power saving SLEEP mode
• Selectable oscillator options
• Low power, high speed CMOS FLASH/EEPROM technology
• Fully static design
• In-Circuit Serial Programming (ICSP) via two pins
• Single 5V In-Circuit Serial Programming capability
• Processor read/write access to program memory

Peripheral Features:
• Port A: 6bit bidirectional port
• Port B & C: 8bit bidirectional port
• Timer0: 8-bit timer/counter with 8-bit pre-scalar
• Timer1: 16-bit timer/counter with pre-scalar, can be incremented during
SLEEP via external crystal/clock
• Timer2: 8-bit timer/counter with 8-bit period register, pre-scalar and post-
scalar
• Two Capture, Compare, PWM modules (CCP modules)
• 10-bit, 5 - channel Analog-to-Digital converter
• Synchronous Serial Port (SSP) with SPI (Master mode) and I2C
(Master/Slave)
Universal Synchronous Asynchronous Receiver
• Transmitter (USART/SCI) with 9-bit address detection
• Brown-out detection circuitry for Brown-out Reset (BOR)

17
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

128 bytes in the RAM is reserved for the special purpose registers which show the
status or allows configuring of the microcontroller. The rest of the features are explained
as they are used in the following sections. The programming is done via an ICSP
compatible programmer. The Line following robot was programmed using the ElCheapo
programmer.

3.6. PWM SPEED CONTROL

Figure 3.7: PWM signal

1
t∫
A= vdt

t
1 ON
t ∫0
A= + 5dt

t ON
= 12V × ρ
A = 12
t
Where ρ is the duty cycle of the PWM control signal; this shows that by varying the
duty cycle of the PWM control, we effectively vary the DC voltage supplied to the
motors, thus controlling their speed. This is generated by the microcontroller built-in
hardware.

3.7. THE PICMICRO CCP MODULES


Each CCP (Capture/Compare/PWM) module contains a 16-bit register which can
operate as a 16-bit capture register, as a 16-bit compare register or as a 10-bit PWM
master/slave Duty Cycle register. The CCP modules are identical in operation, with the
exception of the operation of the special event trigger.

Each CCP module has 3 registers. Multiple CCP modules may exist on a single
device. Throughout this section we’ll use generic names for the CCP registers. These
generic names are shown in the table below.

18
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Generic Name CCP1 CCP2 Comment


CCPxCON CCP1CON CCP2CON CCP control register
CCPRxH CCPR1H CCPR2H CCP High byte
CCPRxL CCPR1L CCPR2L CCP Low byte
CCPx CCP1 CCP2 CCP pin

The PIC 16F873 has 2 CCP modules, with a common timer resource. Thus, if
both the CCP modules are configured as PWM modules, then both of they will have the
same period, but can have different duty cycles. In PWM mode, the timer 2 resource is
used and hence should not be used for other purposes.

In Pulse Width Modulation (PWM) mode, the CCPx pin produces up to a 10-bit
resolution PWM output. Since the CCPx pin is multiplexed with the PORT data latch, the
corresponding TRIS bit must be cleared to make the CCPx pin an output. The PWM
module’s block diagram is shown in the figure below.

Figure 3.8: The PICmicro PWM module

19
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Figure 3.8: The PWM output


When timer 2 just crosses PR2, it is forced to zero and the second comparator
asserts a high, setting the RS flip-flow, thus the CCPx pin goes high. Immediately, as the
timer 2 is reset the output of the second comparator goes back to 0 but the flip-flop holds
the high state. As timer 2 counts up and TMR2:Qx (10 bit, where Qx is the 2bit internal
clock which increments every clock cycle) reaches the value DCxB9:DCxB0 (10 bit,
formed with the CCPRxH concatenated with the bits CCPxCON<5:4>), the first
comparator goes high thus resetting the flip-flop forcing the CCPx pin to go low. This
state is maintained till timer 2 counts to PR2 again and the whole process repeats thus
generating a PWM signal at the CCPx pin. If both the CCP modules are configured as
PWM mode, then the timer 2 module (which decides the period) will be used by both the
modules. This effectively means that both the PWM signals at CCP1 & CCP2 pins will
have the same period but can have different duty cycle which depends on DC1B9:DC1B0
& DC2B9:DC2B0. This process is shown in the above diagram. The content of CCPRxL
is latched to the CCPRxH register every time timer counts up to PR2. Any change in the
duty cycle must be written to the CCPRxL register and not the CCPRxH register.

PWM duty cycle


ρ=
PWM period
For example
Desired PWM frequency is 78.125 kHz, Fosc = 20 MHz & TMR2 prescale = 1
1/78.125 kHz= [(PR2) + 1] • 4 • 1/20 MHz • 1
12.8 μ s = [(PR2) + 1] • 4 • 50 ns • 1
PR2 = 63

20
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

25
To achieve a 25% duty cycle, then PWM duty cycle = 12.8 μ s × = 3.2 μs .
100
3.2 μ s = [DCx] • 50 ns • 1
DCx = 64 = 1000000b
Thus, clear the bits DCxB1 & DCxB0 and load 10000b i.e. 16 into the CCPRxL register.

21
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4. DESIGN AND IMPLEMENTATION

4.1. SCHEMATIC
The schematic of the “Line following robot” is shown in the figure. The main
component is the PIC 16F873 microcontroller. Due to page limitations, the schematic is
divided into two sections; one the Sensor Array Board, and the other the motor-control or
main board.

The main features incorporated into the hardware are given below:
• The PIC 16F873 microcontroller
• The voltage regulator and supporting components.
• Crystal oscillator (4MHz)
• The 74HC04 CMOS inverters
• The H-bridge motor control IC (L293D)
• Motors, with coupled reduction gears.
• The 74HC148 priority encoder
• The 74HC27 NOR gate.
• 12V, 1.2AH Lead-Acid battery.
• MOC7811 IR interrupt sensor, modified to be a reflective sensor.
• The LM339 quad comparator IC
• A POT to calibrate the reference voltage.
• Connectors to join the different boards to form one functional device.

The 74HCTXX versions of the IC’s are used whenever possible. This is due to their
higher speed and better TTL and CMOS compatibility. The 74HCXX versions are used
only when the corresponding HCT version is not available. Note that the 74LSXX are
TTL logic IC’s where as their HC & HCT counterparts are CMOS logic IC’s.

Each of the hardware is dissected and was designed/implemented separately for their
functional and later incorporated as one whole application. This helped in the debugging
processes. In similar fashion the separate modules forming the ensemble will be
explained separately.

22
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Figure 4.1 Schematic – Main Board


23
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Figure 4.2: Sensor array


24
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.1.1. THE MICROCONTROLLER

The PIC microcontroller was used as it’s a RISC processor which is better suited
for real-time operations. Thus the midrange devices were chosen. The part 16F873 was
used as it has 2 CCP modules which could be used in PWM mode thus simplifying the
software routines to generate the PWM control for the motors.

4.1.2 CRYSTAL OSCILLATOR

Figure 4.3: Crystal oscillator


The clock frequency is provided by one 4Mhz crystal which is connected across
the OSC1 & OSC2 pins as shown above. This provides an instruction execution time of
1 μ s.

4.1.3. BATTERY
Motors on a robot consume most of the power. For most of them, each DC motor
typically consumes 1.5W on the average. For differential steering, two DC motors
consume up to 3W. By comparison, the logic components typically draw a total of about
80mA. Even at a supply voltage of 12V, the logic component only consumes 1W.

If we assume the whole robot consume 5W, it requires 4500J of energy to last 15
minutes. If we use a 12V battery, it must have a capacity of 4500J/12V=375Asec or
104mAH. This may imply that getting a battery of 150mAH is sufficient. Unfortunately,
the discharge curve of a 150mAH will not sustain the required voltage for 15 minutes.

Thus a Lead Acid battery was used of rating of 1.2AH for the robot to last longer
than 15min and also to take practical situations into considerations.

25
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.1.4. VOLTAGE REGULATOR

It has been shown that practically all electronic devices need DC supply. A direct
voltage of constant magnitude requires to be supplied, for the smooth and efficient
functioning of these devices. A properly designed voltage regulator ensures that,
irrespective of change in supply voltage, load impedance or temperature, the DC supply is
maintained at a constant level. This is achieved by incorporating some type of feedback in
the regulator circuit.

An IC voltage regulator unit contains all the circuitry required in a single IC. Thus
there are no discrete components and the circuitry needed for the reference source, the
comparator and control elements are fabricated on a single chip. Even the over load and
short-circuit protection mechanism is integrated into the IC. IC voltage regulators are
designed to provide either a fixed positive or negative voltage, or an adjustable voltage
which can be set for any value ranging between two voltage levels.

Figure 4.4: Voltage Regulators

The circuit requires two voltage sources; one for the digital IC’s (+5V) and a
+12V to the motors. The motor is supplied 12V unregulated supply directly from the
battery as regulation would be difficult and unnecessary; whereas the digital IC’s and the
microcontroller require a perfect ripple free +5V to function properly. The L7805C is a
5V voltage regulator IC. The capacitors added to the input of the voltage regulator are to
isolate the spikes generated by the motor from the input and to reduce noise. The 10 μ F
capacitor at the output is to maintain stability and improve regulation. These are standard
values. The 0.1 μ F capacitor is used at the input because of the fact that high value
capacitors have poor high frequency response.

26
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.1.5. D.C. MOTORS

Figure 4.5: Geared D.C. Motor


Geared D.C. motors were used which can operate in the range from 0V to ± 12V .
The D.C. motors have a speed of 2400rpm and a torque of 15gm-cm. The gears decrease
the speed to 30rpm at 6V and thus considerably increasing the torque so that the robot can
carry the load of its frame and the lead-acid battery. Two such motors are used in the rear
of the robot, and a dummy castor is fixed to the front to stabilize the robot.

4.1.6. THE H-BRIDGE CONTROL HARDWARE

Figure 4.6: The motor control.

27
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

The entire motor control circuitry is shown in the above figure along with the
internal circuitry of the L293D motor control IC. The table below clearly indicated the
operation of the IC.

IN1 IN2 IN3 IN4 OPERATION

1 0 1 0 BOTH MOTORS FORWARD


(MOVE FORWARD)
0 1 0 1 BOTH MOTORS BACKWARD
(MOVE BACKWARD)
1 0 0 1 RIGHT MOTOR BACKWARD
LEFT MOTOR FORWARD
(TURN RIGHT)
0 1 1 0 RIGHT MOTOR FORWARD
LEFT MOTOR BACKWARD
(TURN LEFT)

The total number of directional control signals required is 4; but as it can be observed in
the above table, IN1 & IN2 are complimentary (and so is IN3 & IN4) that is, both the
inputs have to take the opposite states for a safe operation. This is done by connecting DL
to IN1 and D L to IN2. The same is done to IN3 & IN4. Now we have 1 directional
control per motor. The ENABLE of each motor section is given PWM inputs to further
improve on the control. Now, each motor has a direction control and a speed control. The
clamping diodes are built into the chip which prevent the back EMF generated by the
motors to harm the H-bridge. The inversion was achieved using the 74HCT04 HEX
inverter IC having a slew rate of about 6ns which is negligible compared to the reaction
time of the H-bridge itself.

4.1.7. PWM SPECIFICATIONS & CALCULATIONS

The L293D chip can operate on PWM signals up to 5kHz, which was decided to be used.

1/5kHz = [(PR2) + 1] × 4 × (1/4MHz) × 1


200 μs = [(PR2) + 1] × 1 μs
PR2 = 200-1 = 199 ≈ 200
28
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Three speeds are used for the line following robot and their corresponding duty
cycles are 0%, 50% & 96%. These calculations are shown below.

For 0% duty cycle the value to be loaded is obviously zero,

For 50 % duty cycle,


50
PWM duty cycle = 200 μ s × = 100 μs .
100
100 μ s = [DCx] •0.25 μs • 1
DCx = 400 = 110010000b
Thus, clear the bits DCxB1 & DCxB0 and load 1100100b i.e. 100 into the CCPRxL
register.

For 96 % duty cycle,


96
PWM duty cycle = 200 μ s × = 192 μs .
100
192 μ s = [DCx] •0.25 μs • 1
DCx = 768 = 1100000000b
Thus, clear the bits DCxB1 & DCxB0 and load 11000000b i.e. 192 into the CCPRxL
register.

4.1.8. THE IR SENSORS

The MOC7811 consists of an infrared emitting diode ( λ = 950nm) and an NPN


silicon phototransistor mounted to face each other on a converging optical axis in a black
plastic housing. The phototransistor responds to radiation from the emitting diode only
when no object is present within its field of view. This sensor is physically modified so
that the emitter and detector face the same direction and thus the modified sensor serves
the purpose of an optical-reflective sensor. The sensor has a focal length of 8mm, thus the
surface must be at an optimum distance of 1.6cm. The original and modified sensors are
shown below.

Figure 4.7: LEFT: Original sensor, RIGHT: modified sensor


29
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Figure 4.8: Reflective sensor

If a reflective (white) surface is present at the optimal distance (d = 1.6cm) then


the reflected waves will strike the detector which on radiation will start to conduct. The
circuit diagram is shown in the figure below.

Figure 4.9: The sensor


The drop across the emitter when forward biased is around 1.4V. According to the
data sheets, to have sustained radiation, a max of 40mA must flow through to avoid
damage. A safe margin is allowed and a current of 16mA is considered for the design.
Vcc − Vd
R=
Id
for, Vcc = 5V
Vd = 1.4V
Id = 16mA
R is calculated to be approximately 220 Ω .

For the emitter, the collector resistor was determined experimentally on a trial and
error basis. It was decided to use a value of 56 kΩ . For this value, the potential across the

30
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

detector is normally 4.6V, when an object reflects the rays towards the detector, then the
potential drops to 0.6V. The output is obviously analog in nature.

4.1.9. COMPARATOR
A comparator is a circuit which compares a signal voltage applied at one input of
an op-amp with a known reference voltage at the other input, and produces either a high
or a low output voltage, depending on which input is higher. The input / output
characteristics of a comparator is as shown.

Figure 4.10: Comparator transfer characteristics.

The sensor circuit is redrawn using the comparator, and this is shown below.

Figure 4.11: Sensor circuit redrawn with the comparator

The reference voltage is generated by the 20k POT and given to all the
comparators to the non-inverting input. When the respective sensor is on the line, the
emitted light is absorbed by the line and the transistor is the cut-off mode, thus a potential
of 4.6V is given to the inverting input which is greater than Vref (which is chosen to be
2.5V), thus the output of the comparator goes low. When the sensor is not on the line
(reflective white surface) the potential across the detector is usually 0.6V. Thus the output
of the comparator goes high (the non-inverting input has a greater potential). Thus the
output of the comparator goes low only when the sensor is over the line. The comparator
is open collector, and hence a pull-up resistor of 10 kΩ is required at the output.
31
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.1.10. SENSOR ARRAY


7 sensors are totally used. They are in the form shown in the figure below, also
their outputs are also shown. The top view is chosen as it would be easier to infer the
process involved.

Figure 4.12: The sensor array


The sensors are mounted on a separate board along with the biasing resistors and a
2 pin connector supplies the power to the sensor array. And the output of each sensor is
connected to the main board via an 8 pin connector to the comparators on the main board.

4.1.11. THE PRIORITY ENCODER

This priority encoder accepts 8 input request lines 0–7 and outputs 3 lines A0–A2.
The priority encoding ensures that only the highest order data line is encoded. The
extreme sensors are given to the higher order inputs so that they are given a higher
priority compared to the inner sensors so that no required turn is left out of the priority
process. This is shown in the figure shown below. The truth table is also shown.

32
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

As can be noticed from the truth table, the 74HC148 is an active low priority
encoder. The chip has an active low enable (EI) input which is always grounded. If the
robot is not on any line, all the input lines will be high, thus the GS line will go high. This
pin is used as the input to the microcontroller for it to decide if it is on a line or not. The
0’th input is always connected to +Vcc = 5V thus allowing the other inputs to generate an
output from 0 to 6. The chip used is 74HC148 which is a high speed CMOS priority
encoder.

Figure 4.13: The priority encoder

4.1.12. THE NO SURFACE LOGIC

Figure 4.14: The no surface logic

Noticing the placement of the sensors A, B & G, it can be noticed that under no
conditions will all of them detect a line (go low). This will only happen when the line is
too thick, or when the robot is lifted off the surface. Only when all the lines go low, will
the NOR gate’s output go high. This line is used by the microcontroller to sense a surface.
The NOR gate used is the 74HCT27 which is a high speed CMOS gate.

33
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.1.13. MICROCONTROLLER SENSOR INPUTS


Thus totally the microcontroller gets 5 inputs from the sensor circuitry, 3 (A2 – A0)
decide what to do when on the line, The GS output tells whether the robot is on the line or
not, and finally the NO_SURFACE output from the NOR gate tells the microcontroller
whether the robot sees a surface or not. Below is the complete description about what
each input mean and what needs to be done.

NS GS A2 A1 A0 STATE IN ACTION

1 X X X X No surface is detected Stop the motors

0 1 X X X No line is detected Execute the no line code


(specially designed
algorithm)

0 0 0 0 0 A detects the line Sharp turn left

0 0 0 0 1 B detects the line Sharp turn right

0 0 0 1 0 C detects the line Turn left

0 0 0 1 1 D detects the line Turn right

0 0 1 0 0 E detects the line Move left

0 0 1 0 1 F detects the line Move right

0 0 1 1 0 G detects the line Go straight

0 0 1 1 1 Forbidden state Software reset the processor

The process involved is taken care of the software. The comparator outputs could have
been directly connected to the microcontroller and all these operations could have been
accomplished in software. But considering that the software would require at least a few

34
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

tens of micro seconds whereas the hardware accomplishes the same in say a 100ns. Thus
due to speed considerations, the present design was arrived at.

4.2. PROCESS EXPLANATION

Figure 4.15: The line following process.

As shown in the figure above, is a typical situation involved. At every sampled


time the commands executed by the microcontroller is also shown. From the above
figure, it should be clear about the software requirements.

If no line is seen, the microcontroller just follows the previous action. This
process is continued till either 5 seconds elapse or a line is reached. If a line is not
reached within 5 seconds (software controlled), the microcontroller shifts into “line find”
mode. In this mode, the robot takes a right turn and starts rotating about a fixed point. The

35
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

radius is continuously incremented every second. Thus the robot follows the path of a
spiral. This process is continued till either a line is reached or till the robot has achieved a
maximum radius of curvature (is traveling in straight line) when the process is reset and
the robot is made to turn in the starting circle, but now at a different point. This is the
algorithm with minimum complexity considering speed requirements.

Figure 4.17: Spiral movement during line find mode.


The surface is sampled every 2.1ms using the timer 0 interrupt routine. This
implies that the line is sampled 476 times in a second. From observations, the robot
travels at a maximum speed of around 10cm/sec. In other words, 47.6 samples are taken
per cm, or 4.76 samples per mm. This is more than ever required! Due to the fact that the
robot can remember and follow the previous task when its sensors do not see a line,
enables the robot to trace a sharp turn, even if in case the robot runs off the line while
making the turn.

Figure 4.18: Robot’s line approximation


36
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.3. FLOW CHART

START

• Initialize ports appropriately


• Set CCP1 & CCP2 modules as
PWM.
• Initialize PWM period to 200 μs .
• Initialize timer 0 to overflow
every 2.1ms
• Enable TMR0 overflow interrupt
• Clear/ Initialize temporary
registers

Wait for interrupt

STOP

TMR0 INTERRUPT
HANDLER

Is
surface Stop motors
NO
detected

YES

Is line NO

detected No line code


?

YES

A RETI

37
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Get input from


portB, copy to
command
register

Adjust command
register to have just
3 bits

Is command
NO
different
from
previous?

YES

CALL motor
subroutine

YES
Error
C
?

NO

RETI

38
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

MOTOR

SHARP TURN LEFT


YES Left motor = reverse,
Cmd
=000 Right motor = forward,
Both motors = high speed.
NO

SHARP TURN RIGHT


YES
Cmd Left motor = forward,
=001 Right motor = reverse,
Both motors = high speed.
NO

TURN LEFT
YES Both motors = forward
Cmd
Left motor = zero speed
=010
Right motor = high speed
NO

TURN RIGHT
YES
Cmd Both motors = forward
=011 Left motor = high speed
Right motor = zero speed
NO

MOVE LEFT
Cmd YES
Both motors = forward
=100 Left motor = low speed
Right motor = high speed
NO

MOVE RIGHT
Cmd YES
Both motors = forward
=101 Left motor = high speed
Right motor = low speed
NO

GO STRAIGHT
YES
Cmd Both motors = forward
=110 Both motors = high speed

NO

Report Error Report no error

RETURN

39
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.4. CODE
The code is divided into 4 modules.
LFR.ASM = this has the main code (Initialization). The rest of the work is done by the
TMR0 interrupt service routine.
LFR.INC = this is an include file holding all the macro definitions, defines and constant
declarations used in the program.
ROUTINE.INC = this is the TMR0 interrupt service routine, does the entire work.
SUBROUTINES.INC = this has all the subroutines used in the program, one delay
subroutine and the “motor” subroutine.

4.4.1. LFR.ASM
;==========================================================;
;==============LINE FOLLOWING ROBOT =======================;
;====================FIRMWARE==============================;
;==================VERSION: 2.0============================;
;**********************************************************;
;+CODE BY: AMITHASH E. PRASAD, ELECTRONICS & COMMUNICATION+;
;++++++++++GLOBAL ACADEMY OF TECHOLOGY+++++++++++++++++++++;
;**********************************************************;
;==========================================================;

LIST P=PIC16F873
#INCLUDE "P16F873.INC"
#INCLUDE "LFR.INC"
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF

CBLOCK 0X20

DELH ;USED FOR DELAY REUTINES


DELL ;
PREV_COMMAND_WORD ;USED AS A MEMORY OF THE PREVIOUS CW
TEMP_FLAG
TIME_COUNT:2
COMMAND_WORD

40
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

;|--------------------------------------------------|
;| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | DESCRIPTION |
;|---|---|---|---|---|---|---|---|------------------|
;| X | X | X | X | X | 0 | 0 | 0 | SHARP TURN LEFT |
;| X | X | X | X | X | 0 | 0 | 1 | SHARP TURN RIGHT |
;| X | X | X | X | X | 0 | 1 | 0 | TURN LEFT |
;| X | X | X | X | X | 0 | 1 | 1 | TURN RIGHT |
;| X | X | X | X | X | 1 | 0 | 0 | MOVE LEFT |
;| X | X | X | X | X | 1 | 0 | 1 | MOVE RIGHT |
;| X | X | X | X | X | 1 | 1 | 0 | GO STRAIGHT |
;| X | X | X | X | X | 1 | 1 | 1 | DONT CARE |
;|--------------------------------------------------|
ENDC
;***********************************************************
ORG 0
GOTO INITIALIZATION
ORG 4
;***********************************************************
#INCLUDE ROUTINE.INC
;~450US MAX OVERHEAD TIME
;***********************************************************
ORG 0X51
INITIALIZATION:
BANK1
CLRF TRISC INBANK1 ;PORTC AS OUTPUT
MOVLW 0X1F
MOVWF TRISB INBANK1 ;RB0-RB4 SET AS INPUTS,
;RB5-RB7 AS OUTPUTS
CLRF TRISA INBANK1
MOVLW 0X02
MOVWF OPTION_REG INBANK1
; ENABLE WEAK PULLUPS ON PORTB
;TMR0 CLK SOURCE = INSTRUCTION CLK
;PRESCALAR SET TO TMR0 & SET TO 1:8
;SENSORS SAMPLED EVERY 2.05ms

41
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

MOVLW 0X0C8
MOVWF PR2 INBANK1 ;A PERIOD OF 200 MICRO SECONDS
;(FOR 5KhZ PWM) PUT IN PR REG...
BANK0
CLRF TMR0
MOVLW 0X20
MOVWF INTCON ;ENABLE TMR0 INTERRUPT,
;BUT KEEP MASKED BY CLEARING GIE
NOP
CLRF T2CON ;POSTSCALAR & PRESCALE SET TO 1:1,
;TMR2 = OFF
BSF T2CON,TMR2ON ; TURN ON TMR 2
CLRF CCP1CON ; RESET THE CCP1 MODULE
CLRF CCP2CON ; RESET THE CCP2 MODULE
MOVLW 0X0C ;00001100
MOVWF CCP1CON ;CCP MODE SET TO PWM MODE AND THE
;LOWER TWO BITS OF DUTY CYCLE
;ARE SET TO 0.
MOVWF CCP2CON ;CCP MODE SET TO PWM MODE AND THE
;LOWER TWO BITS OF DUTY CYCLE
;ARE SET TO 0.
MOVLW HIGHSPEED
MOVWF CCPR1L ;SET TO HIGHSPEED DUTY CYCLE
MOVWF CCPR2L ;SET TO HIGHSPEED DUTY CYCLE
BSF INTCON,GIE ;ENABLE INTERRUPTS
CLR16F TIME_COUNT ;INITIALIZE TIME COUNT TO ZERO
MOVLW 0X07
MOVWF PREV_COMMAND_WORD
CLRF TEMP_FLAG
;***********************************************************
GOTO $ ;LOOP HERE INDEFINATELY (WAIT FOR INTERRUPT)
;***********************************************************
#INCLUDE "SUBROUTINES.INC"
;***********************************************************
END

42
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.4.2. LFR.INC
;MACRO DEFINITIONS
;GENERAL MACROS AND DEFINES.....
;BANK SELECT MACROS
BANK0 MACRO
BCF STATUS,IRP
BCF STATUS,RP1
BCF STATUS,RP0
ENDM

BANK1 MACRO
BCF STATUS,IRP
BCF STATUS,RP1
BSF STATUS,RP0
ENDM

BANK2 MACRO
BSF STATUS,IRP
BSF STATUS,RP1
BCF STATUS,RP0
ENDM

BANK3 MACRO
BSF STATUS,IRP
BSF STATUS,RP1
BSF STATUS,RP0
ENDM

;DEFINES TO USE FOR REGISTERS NOT IN BANK0


#DEFINE INBANK1 ^ 0X080
#DEFINE INBANK2 ^ 0X100
#DEFINE INBANK3 ^ 0X180

43
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

;16BIT MANUPILATOR MACROS


INC16F MACRO VAR ;AFFECTS CARRY FLAG ON OVERFLOW
INCF VAR,F
BTFSC STATUS,Z
INCF VAR+1,F
BCF STATUS,C
MOVF VAR+1,W
BTFSC STATUS,Z
BSF STATUS,C
ENDM

DEC16F MACRO VAR ;AFFECTS ZERO FLAG ON ZERO


DECF VAR,F
INCF VAR,W
BTFSC STATUS,Z
DECF VAR+1,F
ENDM

MOV16LW MACRO VAR1,VAR2 ;FLAGS ARE UNKNOWNAND SHOULD NOT BE


USED
MOVLW HIGH VAR2
MOVWF VAR1+1
MOVLW LOW VAR2
MOVWF VAR1
ENDM

CLR16F MACRO VAR ;ZERO FLAG IS AFFECTED


CLRF VAR
CLRF VAR+1
ENDM

;CONSTANTS USED
CONSTANT FORWARD = 0X03 ;0011
CONSTANT ST_LEFT = 0X02 ;0001
CONSTANT ST_RIGHT = 0X01 ;0010

44
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

CONSTANT BACKWARD = 0X00 ;0000,


;NEVER USED, KEPT FOR FUTURE
;PR2 = 0X0C8 = 200
CONSTANT LOWSPEED = 0X064 ;=100, DUTY CYCLE = 50%
CONSTANT HIGHSPEED = 0X0C0 ;=192 DUTY CLCLE = 96%

;DEFINES FOR LFR...


#DEFINE NO_LINE PORTB,3
#DEFINE NO_SURFACE PORTB,4

;DEFINES OF THE TEMP_FLAG USED FOR VARIOUS OPERATIONS


; NO_LINE_PA = TEMP_FLAG,0 =>
; USED FOR DEBOUNCING THE NO_LINE INPUT (PAST VALUE)
; NO_LINE_PR = TEMP_FLAG,1 =>
;USED FOR DEBOUNCING THE NO_LINE INPUT (PRESENT VALUE)
; PREVIOUS_STATE = TEMP_FLAG,2 =>
;0 -> PREVIOUS WAS A FORWARD,
;1 -> PREVIOUS WAS NOT A FORWARD

; LINE_FIND_MODE = TEMP_FLAG,3 =>


;WHAT MODE WAS THE NO LINE CODE IN?
;0 -> WAITING FOR A SEC, FOLLOWING THE LAST COMMAND
;1 -> LINE FIND MODE

; NOT_LF_FIRST = TEMP_FLAG,4 =>


;FIRST PART OF NO LINE CODE?
;0 -> YES 1 -> NO

#DEFINE NO_LINE_PA TEMP_FLAG,0


#DEFINE NO_LINE_PR TEMP_FLAG,1
#DEFINE PREVIOUS_STATE TEMP_FLAG,2
#DEFINE LINE_FIND_MODE TEMP_FLAG,3
#DEFINE NOT_LF_FIRST TEMP_FLAG,

45
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

4.4.3. ROUTINE.INC
TMR0_ROUTINE:
BTFSS INTCON,T0IF
GOTO INITIALIZATION
;RESET IF A WRONG INTERRUPT IS ENCOUNTERED,
;ELSE CONTINUE WITH ROUTINE
CLRF TMR0

SURFACE_CHECK:
BTFSS NO_SURFACE
GOTO LINE_CHECK
CLRF CCPR2L
CLRF CCPR1L ;STOP BOTH MOTORS IF NO SURFACE IS DETECTED
GOTO EXIT_T0
LINE_CHECK:
BCF NO_LINE_PA ;DEBOUNSING CODE OF THE NO_LINE INPUT
BTFSC NO_LINE
BSF NO_LINE_PA
CALL DELAY_FF_US ;TMP_FLAG,1 IS THE DEBOUNCED INPUT
;IF THE DEBOUNCED INPUT IS 1,
;THEN ROBO SEES NO LINE
BSF NO_LINE_PR
BTFSC NO_LINE_PA ;ELSE ITS JUST A FLICKER,
;CONTINUE TO MODIFIERS
BTFSS NO_LINE
BCF NO_LINE_PR
NOP
BTFSC NO_LINE_PR
GOTO NO_LINE_CODE
MODIFIERS:
BCF LINE_FIND_MODE
BCF NOT_LF_FIRST
MOV16LW TIME_COUNT,0X094C
MOVF PORTB,W
ANDLW 0X07

46
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

MOVWF COMMAND_WORD
XORWF PREV_COMMAND_WORD,W
BTFSC STATUS,Z
GOTO EXIT_T0

MOVF COMMAND_WORD,W
MOVWF PREV_COMMAND_WORD
CALL MOTORS ;16us
SUBLW 0X00
BTFSS STATUS,Z
GOTO INITIALIZATION ;THE DONT CARE STATE IS REACHED,
;PROBABLY ERROR IN INPUTS
;GOTO INITIALIZATION JUST TO MAKE
;SURE IT IS NOT A SOFTWARE PROBLEM.
;ELSE CARRY ON
GOTO EXIT_T0
NO_LINE_CODE:
;NO LINE CODE
BTFSC LINE_FIND_MODE ;IF IN LINE FIND MODE, SKIP THE
COUNTING CODE
GOTO NLA
DEC16F TIME_COUNT
BTFSS STATUS,Z ;IF TIME_COUNT IS NOT YET OVER,
;JUST EXIT ROUTINE (FOLLOW THE
;REMEMBERED STATE)
GOTO EXIT_T0
BCF NOT_LF_FIRST ;IF TIME_COUNT IS 0 (~5SEC) THEN
;SHIFT TO LINE FIND MODE
NLA:
BSF LINE_FIND_MODE ;START NO LINE CODE
MOVLW 0X03 ;SET TO TURN RIGHT
BTFSS NOT_LF_FIRST ;IS THIS THE FIRST OF NO LINE CODE
CALL MOTORS ;IF YES MODIFY MOTORS
BTFSC NOT_LF_FIRST ;IS THIS THE FIRST OF NO LINE CODE
GOTO SKIP_INI

47
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

MOV16LW TIME_COUNT,0X01DC ;INITILIZE TIME_COUNT


;TO TURN ZERO EVERY SECOND
SKIP_INI:
BSF NOT_LF_FIRST ;NO LONGER THE FIRST LEG

DEC16F TIME_COUNT
BTFSS STATUS,Z
GOTO EXIT_T0
MOV16LW TIME_COUNT,0X01DC ;INITILIZE TIME_COUNT TO
;TURN ZERO EVERY SECOND
MOVF CCPR2L,W ;INCREMENT CCP2 REG BY 10
ADDLW 0X0A
MOVWF CCPR2L
SUBLW HIGHSPEED
BTFSC STATUS,C
GOTO EXIT_T0
CLRF CCPR2L
EXIT_T0:
BCF INTCON,T0IF ;CLEAR TMR0 INTERRUPT FLAG
RETFIE
;***********************************************************
4.4.4. SUBROUTINES.INC
ORG 0X074
DELAY_FF_US:
;256uS DELAY
MOVLW 0X0FF
MOVWF DELL
DELLOOP:
DECFSZ DELL,1
GOTO DELLOOP
NOP
RETURN

;***********************************************************

48
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

MOTORS:
;TABLE
;COMMAND IS IN W BEFORE CALLING,
ADDWF PCL,F ;EXECUTE THE APPROPRIATE CODE
GOTO SHARP_TURN_LEFT
GOTO SHARP_TURN_RIGHT
GOTO TURN_LEFT
GOTO TURN_RIGHT
GOTO MOVE_LEFT
GOTO MOVE_RIGHT
GOTO GO_STRAIGHT
RETLW 0X0FF ;ERROR INDICATOR, WRONG STATE
MOVE_RIGHT
MOVLW LOWSPEED ;LOW SPEED TO RIGHT MOTOR
MOVWF CCPR2L
MOVLW HIGHSPEED ;HIGH SPEED TO LEFT MOTOR
MOVWF CCPR1L
MOVLW FORWARD ;BOTH MOTORS FORWARD
BTFSC PREVIOUS_STATE ;CHANGE PORTA ONLY IF DIFFERENT
MOVWF PORTA ;GIVEN BY THE PREVIOUS_STATE FLAG
BCF PREVIOUS_STATE
RETLW 0X00 ;RETURN FROM KNOWN STATE

MOVE_LEFT
MOVLW HIGHSPEED ;HIGH SPEED TO RIGHT MOTOR
MOVWF CCPR2L
MOVLW LOWSPEED ;LOW SPEED TO LEFT MOTOR
MOVWF CCPR1L
MOVLW FORWARD ;BOTH MOTORS FORWARD
BTFSC PREVIOUS_STATE ;CHANGE PORTA ONLY IF DIFFERENT
MOVWF PORTA ;GIVEN BY THE PREVIOUS_STATE FLAG
BCF PREVIOUS_STATE
RETLW 0X00 ;RETURN FROM KNOWN STATE

49
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

TURN_RIGHT
CLRF CCPR2L ;ZERO SPEED TO RIGHT MOTOR
MOVLW HIGHSPEED
MOVWF CCPR1L ;HIGH SPEED TO LEFT MOTOR
MOVLW FORWARD ;BOTH MOTORS FORWARD
BTFSC PREVIOUS_STATE ;CHANGE PORTA ONLY IF DIFFERENT
MOVWF PORTA ;GIVEN BY THE PREVIOUS_STATE FLAG
BCF PREVIOUS_STATE
NOP
RETLW 0X00 ;RETURN FROM KNOWN STATE

TURN_LEFT
MOVLW HIGHSPEED ;HIGH SPEED TO RIGHT MOTOR
MOVWF CCPR2L
CLRF CCPR1L ;ZERO SPEED TO LEFT MOTOR
MOVLW FORWARD ;BOTH MOTORS FORWARD
BTFSC PREVIOUS_STATE ;CHANGE PORTA ONLY IF DIFFERENT
MOVWF PORTA ;GIVEN BY THE PREVIOUS_STATE FLAG
BCF PREVIOUS_STATE
NOP
RETLW 0X00 ;RETURN FROM KNOWN STATE

SHARP_TURN_RIGHT
MOVLW HIGHSPEED ;HIGH SPEED TO BOTH MOTORS
MOVWF CCPR2L
MOVWF CCPR1L
MOVLW ST_RIGHT ;REVERSE RIGHT MOTOR
MOVWF PORTA
BSF PREVIOUS_STATE ;PREVIOUS STATE NO LONGER FORWARD
NOP
NOP
RETLW 0X00 ;RETURN FROM KNOWN STATE

50
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

SHARP_TURN_LEFT
MOVLW HIGHSPEED ;HIGH SPEED TO BOTH MOTORS
MOVWF CCPR2L
MOVWF CCPR1L
MOVLW ST_LEFT ;REVERSE LEFT MOTOR
MOVWF PORTA
BSF PREVIOUS_STATE ;PREVIOUS STATE NO LONGER FORWARD
NOP
NOP
RETLW 0X00 ;RETURN FROM KNOWN STATE

GO_STRAIGHT
MOVLW HIGHSPEED ;HIGH SPEED TO BOTH MOTORS
MOVWF CCPR2L
MOVWF CCPR1L
MOVLW FORWARD ;BOTH MOTORS FORWARD
BTFSC PREVIOUS_STATE ;CHANGE PORTA ONLY IF DIFFERENT
MOVWF PORTA ;GIVEN BY THE PREVIOUS_STATE FLAG
BCF PREVIOUS_STATE
NOP
RETLW 0X00 ;RETURN FROM KNOWN STATE

;***********************************************************

4.5 CODE EXPLANATION


4.5.1. LFR.ASM
LABLE DEFINATION
CBLOCK directive was used for the definition of the work-area. When using this
directive, work-areas which were defined between CBLOCK and ENDC are
automatically allocated in the order from the address which was specified by the operand
of CBLOCK.

INITILIZATION PROCESS
• Port A & C are set as outputs
• Port B is set as inputs
51
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

• Timer 0 is set to have a pre scale of 1:8


• Period register is initialized
• Timer 2 is turned ON and is made to have a pre & post scale of 1:1
• Both CCP modules are reset and put in PWM mode
• Initialize duty cycle registers of both the modules to high speed
• Initialize variables & enable interrupts
Once done the goto $ will cause the processor to loop indefinitely and thus waiting for an
interrupt.

4.5.2. LFR.INC
• Bank0 to bank3 macros are used to set the bank select bits in the status register to
put the processor in the required bank.
• The INBANK1 to INBANK3 defines are used whenever a register not in bank 0 is
accessed. This removes the messages shown after build.

The 16 bit macros are used to simplify the code whenever 16bit numbers and
variables are manipulated. The macros are
• INC16F – increment a 16 bit variable in small end-in format.
• DEC16F – decrements a 16 bit variable in small end-in format.
• MOV16LW – loads the 16 bit variable in small end-in format with the specified
immediate 16 bit number
• CLR16F – clears a 16 bit variable in small end-in format.

The rest of the “defines” and constant declarations are used to make understanding the
code easier. But the purpose is lost if the reader skips this section. In fact, even though
this section is the second one presented, it must be the first one to read.

4.5.3. ROUTINE.INC
The first lines of the code check if the interrupt was actually a timer 0 overflow
interrupt just to make sure that no rogue interrupt has occurred. Then the NO_SURFACE
pin is checked; if high, both the motors are stopped and the routine is exited. If the
NO_SURFACE pin is low, it implies that the robot is actually on a surface and the
routine can continue.

52
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

Next, the NO_LINE pin is de-bounced high in software. That is, the pin is read,
then sampled again after 256 μs and compared with the previous value. The no line
section of the code is executed only when both the past and the present inputs were the
same and equal to 1. Otherwise it is assumed that the robot can see the line, and thus
continued onto the modifiers section of the code.

PORT B is read and copied into the COMMAND_WORD register. Then it is


masked to keep only the lower 3 bits and set all others to 0. This register is now compared
with its previous value stored at PREV_COMMAND_WORD. If they are the same, then
there is no point in instructing the motors again, thus exiting the routine; if they are
different then, COMMAND_WORD is loaded into the W register and the motor
subroutine is called which modifies the motors appropriately.

In the NO_LINE_CODE section, a 16 bit variable called TIME_COUNT is used.


As the timer 0 interrupts every 2.1ms, to get a delay of 5 seconds, a value of 2380
(0X094C) is put in the TIME_COUNT register initially. This is decremented, till it goes
to zero, the routine is exited. This is an indirect way of achieving a 5 second delay. Once
the 5 seconds are over, then a new section of the code is entered. A few user defined flag
bits are used to remember which mode was going on.

Once the 5 seconds are up, the NLA section of the code is reached. In this the
TIME_COUNT is initialized to 476 (0X01DC) so as to give a delay of 1 second and the
“motor” subroutine is called to set the motors to TURN RIGHT. Once this is done this
section of the code is skipped from the next second onwards. Every time TIME_COUNT
goes to zero (1 second), it is initialized back to 476, and CCPR2L is incremented by 10
thus increasing the radius of curvature of the curve the robot is tracing. CCPR2L is reset
back to zero when it incremented beyond HIGHSPEED. Note that every time, the timer 0
routine is exited.

4.5.4. SUBROUTINES.INC

The first subroutine is a simple 256 μs delay routine using just a single 8 bit
register. The second is the main one called the MOTOR subroutine. This is the one
responsible to modifying the PORT A pins and the PWM duty cycles to achieve the

53
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

required turns. Before the subroutine is called, the W register must hold the
COMMAND_WORD. This value is added to the PCL register, thus causing a jump
dependent on the value. For example if W contained 0, then the immediate instruction is
executed. This is a table of goto’s causing the control to shift to the appropriate locations.
The operations performed by each leg of the subroutine are as shown in the table below.
A user defined flag remembers if the last operation was a forward or something else. This
makes sure that the PORT A bits are not unnecessarily changed. NOP’s are added to each
leg so that each of them are of the same length, thus making the subroutine execute in the
same number of cycles for every command word.

COMMAND WORD ACTION

0 Left motor = reverse, RA1 = 0


SHARP TURN LEFT Right motor = forward, RA0 = 1
Both motors = high speed.
(CCPR1L & CCPR2L)
1 Left motor = forward, RA1 = 1
SHARP TURN RIGHT Right motor = reverse, RA0 = 0
Both motors = high speed.
(CCPR1L & CCPR2L)
2 Both motors = forward, RA1 & RA0 = 1
Left motor = zero speed (CCPR2L)
TURN LEFT
Right motor = high speed (CCPR1L)
3 Both motors = forward, RA1 & RA0 = 1
TURN RIGHT Left motor = high speed (CCPR2L)
Right motor = zero speed (CCPR1L)
4 Both motors = forward, RA1 & RA0 = 1
MOVE LEFT Left motor = low speed (CCPR2L)
Right motor = high speed (CCPR1L)
5 Both motors = forward, RA1 & RA0 = 1
Left motor = high speed (CCPR2L)
MOVE RIGHT
Right motor = low speed (CCPR1L)
6 Both motors = forward, RA1 & RA0 = 1
Both motors = high speed
GO STRAIGHT
(CCPR2L & CCPR1L)
7 Return with 0XFF in W register
ERROR

This completes the code explanation. The code occupies 191 program memory words.

54
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

5. RESULT AND CONCLUSION


The Line following robot was finally completed. A lot of effort was put into the
design, implementation and days of toil in front of the computer, writing and debugging
the code. The robot was finally running with a few glitches here and there which were
sorted in the later revisions of the firmware. The line following robot still has a few short-
comings but achieves most of the objectives.

I earned a lot of knowledge on micro-controllers, a deeper & clearer view of the


architecture, ports & all other functional blocks was achieved. Did a lot of research on
robotics and already have my next project planned. had a peek look at all simple
functional parts of the project like the crystal oscillator, logic gates and the works. Well,
these were the topics that we have already dealt with, but I must be honest and admit that
there were various practical issues which one would learn only during a project. There’s a
lot of learning & yet not the end, learning is a continuous never ending process but is
definitely fun.

55
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

6. BIBLIOGRAPHY
BOOKS
Programming and Customizing the PIC microcontroller
by Myke Predko Second edition – McGraw Hill

PICmicro Mid-Range MCU Family Reference Manual


by MICROCHIP

Design with PIC microcontrollers


by John B. Peatman – PEARSON Education

PIC Robotics, A beginner’s guide to robotics projects using the PICmicro


by John Iovine – McGraw Hill

Digital logic and computer design


by M. Morris Mano - Prentice – Hall of India PVT limited

Digital Systems Principles & applications


by Ronald J. Tocci Sixth Edition - Prentice – Hall of India PVT limited

WEBSITES REFERRED
The Seattle Robotics Society Encoder library of robotics articles
http://www.seattlerobotics.org/encoder/library.html

Dallas Personal Robotics Group. Most of these tutorials and articles were referred.
http://www.dprg.org/articles/index.html
http://www.dprg.org/tutorials/index.html

Go Robotics.NET, this page has many useful links to robotics articles.


http://www.gorobotics.net/articles/index.php

Carnegie Mellon Robotics Club. This is the links page with lots of useful resources
http://www.roboticsclub.org/links.html

56
Department of Electronics & Communication, GAT, Bangalore - 98
LINE FOLLOWING ROBOT

This page is called the “Micro-mouse Handbook” and an excellent tutorial for small scale
robotics.
http://www.drtak.org/teaches/UCD/book/book/

This is the main website of microchip. Thousands of application notes, tutorials &
manuals can be found here.
http://www.microchip.com

57
Department of Electronics & Communication, GAT, Bangalore - 98
PCB LAYOUT

Top Side

Bottom Side
LFR.HEX

:020000040000FA
:02000000512885
:080008000B1D51288101061EA9
:100010000C289B0195014F28241086192414742064
:10002000A4142418861DA4100000A4182A28A411C2
:1000300024120930A6004C30A50006080739A30099
:10004000220603194F282308A2007A20003C031D32
:1000500051284F28A4193328A503250A0319A603FC
:10006000031D4F282412A4150330241E7A20241ABD
:100070003D280130A600DC30A5002416A503250A82
:100080000319A603031D4F280130A600DC30A5008C
:100090001B080A3E9B00C03C03184F289B010B1114
:1000A000090083130313831687011F30860085011F

:1000B00002308100C8309200831303138312810140
:1000C00020308B0000009201121597019D010C3029
:1000D00097009D00C03095009B008B17A501A601DD
:1000E0000730A200A4017328FF30A100A10B7628DD
:1000F000000008008207B028A7289E2895288C2891
:100100008328B928FF3464309B00C0309500033049
:100110002419850024110034C0309B006430950000
:10012000033024198500241100349B01C030950050
:10013000033024198500241100000034C0309B00D6
:100140009501033024198500241100000034C030CB
:100150009B0095000130850024150000000000344C
:10016000C0309B009500023085002415000000007F
:100170000034C0309B009500033024198500241101
:040180000000003447
:02400E00723FFF
:00000001FF
PIC16F87X
28/40-Pin 8-Bit CMOS FLASH Microcontrollers

Devices Included in this Data Sheet: Pin Diagram


• PIC16F873 • PIC16F876 PDIP
• PIC16F874 • PIC16F877
MCLR/VPP 1 40 RB7/PGD
RA0/AN0 2 39 RB6/PGC
Microcontroller Core Features: RA1/AN1 3 38 RB5
RA2/AN2/VREF- 4 37 RB4
• High performance RISC CPU RA3/AN3/VREF+ 5 36 RB3/PGM
• Only 35 single word instructions to learn RA4/T0CKI 6 35 RB2
RA5/AN4/SS 7 34 RB1
• All single cycle instructions except for program

PIC16F877/874
RE0/RD/AN5 8 33 RB0/INT
branches which are two cycle RE1/WR/AN6 9 32 VDD
• Operating speed: DC - 20 MHz clock input RE2/CS/AN7 10 31 VSS
VDD 11 30 RD7/PSP7
DC - 200 ns instruction cycle
VSS 12 29 RD6/PSP6
• Up to 8K x 14 words of FLASH Program Memory, OSC1/CLKIN 13 28 RD5/PSP5
Up to 368 x 8 bytes of Data Memory (RAM) OSC2/CLKOUT 14 27 RD4/PSP4

Up to 256 x 8 bytes of EEPROM Data Memory RC0/T1OSO/T1CKI 15 26 RC7/RX/DT


RC1/T1OSI/CCP2 16 25 RC6/TX/CK
• Pinout compatible to the PIC16C73B/74B/76/77 RC2/CCP1 17 24 RC5/SDO
• Interrupt capability (up to 14 sources) RC3/SCK/SCL 18 23 RC4/SDI/SDA
RD0/PSP0 19 22 RD3/PSP3
• Eight level deep hardware stack RD1/PSP1 20 21 RD2/PSP2
• Direct, indirect and relative addressing modes
• Power-on Reset (POR)
• Power-up Timer (PWRT) and
Oscillator Start-up Timer (OST) Peripheral Features:
• Watchdog Timer (WDT) with its own on-chip RC • Timer0: 8-bit timer/counter with 8-bit prescaler
oscillator for reliable operation • Timer1: 16-bit timer/counter with prescaler,
• Programmable code protection can be incremented during SLEEP via external
• Power saving SLEEP mode crystal/clock
• Selectable oscillator options • Timer2: 8-bit timer/counter with 8-bit period
• Low power, high speed CMOS FLASH/EEPROM register, prescaler and postscaler
technology • Two Capture, Compare, PWM modules
• Fully static design - Capture is 16-bit, max. resolution is 12.5 ns
• In-Circuit Serial Programming (ICSP) via two - Compare is 16-bit, max. resolution is 200 ns
pins - PWM max. resolution is 10-bit
• Single 5V In-Circuit Serial Programming capability • 10-bit multi-channel Analog-to-Digital converter
• In-Circuit Debugging via two pins • Synchronous Serial Port (SSP) with SPI (Master
• Processor read/write access to program memory mode) and I2C (Master/Slave)
• Wide operating voltage range: 2.0V to 5.5V • Universal Synchronous Asynchronous Receiver
• High Sink/Source Current: 25 mA Transmitter (USART/SCI) with 9-bit address
• Commercial, Industrial and Extended temperature detection
ranges • Parallel Slave Port (PSP) 8-bits wide, with
• Low-power consumption: external RD, WR and CS controls (40/44-pin only)
- < 0.6 mA typical @ 3V, 4 MHz • Brown-out detection circuitry for
Brown-out Reset (BOR)
- 20 µA typical @ 3V, 32 kHz
- < 1 µA typical standby current

 2001 Microchip Technology Inc. DS30292C-page 1


PIC16F87X
Pin Diagrams

PDIP, SOIC

MCLR/VPP 1 28 RB7/PGD
RA0/AN0 2 27 RB6/PGC
RA1/AN1 3 26 RB5

PIC16F876/873
RA2/AN2/VREF- 4 25 RB4
RA3/AN3/VREF+ 5 24 RB3/PGM
RA4/T0CKI 6 23 RB2
RA5/AN4/SS 7 22 RB1
VSS 8 21 RB0/INT
OSC1/CLKIN 9 20 VDD
OSC2/CLKOUT 10 19 VSS
RC0/T1OSO/T1CKI 11 18 RC7/RX/DT
RC1/T1OSI/CCP2 12 17 RC6/TX/CK
RC2/CCP1 13 16 RC5/SDO
RC3/SCK/SCL 14 15 RC4/SDI/SDA

RA3/AN3/VREF+
RA2/AN2/VREF-

MCLR/VPP

RB7/PGD
RB6/PGC
RA1/AN1
RA0/AN0
PLCC

RB5
RB4
NC

NC
6
5
4
3
2
1
44
43
42
41
40
RA4/T0CKI 7 39 RB3/PGM
RA5/AN4/SS 8 38 RB2
RE0/RD/AN5 9 37 RB1
RE1/WR/AN6 10 36 RB0/INT
RE2/CS/AN7 11 PIC16F877 35 VDD
VDD 12 34 VSS
VSS 13
PIC16F874 33 RD7/PSP7
OSC1/CLKIN 14 32 RD6/PSP6
OSC2/CLKOUT 15 31 RD5/PSP5
RC0/T1OSO/T1CK1 16 30 RD4/PSP4
NC 17 9 RC7/RX/DT
18
19
20
21
22
23
24
25
26
27
282
RC1/T1OSI/CCP2
RC3/SCK/SCL
RC4/SDI/SDA

RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC1/T1OSI/CCP2

RC5/SDO

NC
RC4/SDI/SDA

RC6/TX/CK
RC6/TX/CK

RC2/CCP1
RD3/PSP3
RD2/PSP2
RD1/PSP1
RD0/PSP0
RC5/SDO

NC

QFP
44
43
42
41
40
39
38
37
36
35
34

RC7/RX/DT 1 33 NC
RD4/PSP4 2 32 RC0/T1OSO/T1CKI
RD5/PSP5 3 31 OSC2/CLKOUT
RD6/PSP6 4 30 OSC1/CLKIN
RD7/PSP7 5 PIC16F877 29 VSS
VSS 6 28 VDD
VDD 7
PIC16F874 27 RE2/AN7/CS
RB0/INT 8 26 RE1/AN6/WR
RB1 9 25 RE0/AN5/RD
RB2 10 24 RA5/AN4/SS
RB3/PGM 11 23 RA4/T0CKI
12
13
14
15
16
17
18
19
20
21
22
RA3/AN3/VREF+
RB4
RB5

RA0/AN0
RA1/AN1
NC
NC

RB6/PGC
RB7/PGD
MCLR/VPP

RA2/AN2/VREF-

DS30292C-page 2  2001 Microchip Technology Inc.


PIC16F87X
1.0 DEVICE OVERVIEW There are four devices (PIC16F873, PIC16F874,
PIC16F876 and PIC16F877) covered by this data
This document contains device specific information. sheet. The PIC16F876/873 devices come in 28-pin
Additional information may be found in the PICmicro™ packages and the PIC16F877/874 devices come in
Mid-Range Reference Manual (DS33023), which may 40-pin packages. The Parallel Slave Port is not
be obtained from your local Microchip Sales Represen- implemented on the 28-pin devices.
tative or downloaded from the Microchip website. The
The following device block diagrams are sorted by pin
Reference Manual should be considered a complemen-
number; 28-pin for Figure 1-1 and 40-pin for Figure 1-2.
tary document to this data sheet, and is highly recom-
The 28-pin and 40-pin pinouts are listed in Table 1-1
mended reading for a better understanding of the device
and Table 1-2, respectively.
architecture and operation of the peripheral modules.

FIGURE 1-1: PIC16F873 AND PIC16F876 BLOCK DIAGRAM

Program Data
Device Data Memory
FLASH EEPROM
PIC16F873 4K 192 Bytes 128 Bytes
PIC16F876 8K 368 Bytes 256 Bytes

13 Data Bus 8 PORTA


Program Counter
RA0/AN0
FLASH RA1/AN1
Program RA2/AN2/VREF-
Memory RAM RA3/AN3/VREF+
8 Level Stack File RA4/T0CKI
(13-bit) Registers RA5/AN4/SS
Program 14 PORTB
Bus RAM Addr(1) 9
RB0/INT
Addr MUX RB1
Instruction reg
RB2
Direct Addr 7 Indirect
8 Addr RB3/PGM
RB4
FSR reg RB5
RB6/PGC
STATUS reg RB7/PGD
8
PORTC
RC0/T1OSO/T1CKI
3 MUX
Power-up RC1/T1OSI/CCP2
Timer RC2/CCP1
Instruction Oscillator RC3/SCK/SCL
Decode & Start-up Timer RC4/SDI/SDA
ALU
Control Power-on RC5/SDO
Reset 8 RC6/TX/CK
RC7/RX/DT
Timing Watchdog
Generation Timer W reg
OSC1/CLKIN Brown-out
OSC2/CLKOUT Reset
In-Circuit
Debugger
Low Voltage
Programming

MCLR VDD, VSS

Timer0 Timer1 Timer2 10-bit A/D

Synchronous
Data EEPROM CCP1,2 USART
Serial Port

Note 1: Higher order bits are from the STATUS register.

 2001 Microchip Technology Inc. DS30292C-page 5


PIC16F87X
TABLE 1-1: PIC16F873 AND PIC16F876 PINOUT DESCRIPTION
DIP SOIC I/O/P Buffer
Pin Name Description
Pin# Pin# Type Type

OSC1/CLKIN 9 9 I ST/CMOS(3) Oscillator crystal input/external clock source input.


OSC2/CLKOUT 10 10 O — Oscillator crystal output. Connects to crystal or resonator in
crystal oscillator mode. In RC mode, the OSC2 pin outputs
CLKOUT which has 1/4 the frequency of OSC1, and denotes
the instruction cycle rate.
MCLR/VPP 1 1 I/P ST Master Clear (Reset) input or programming voltage input. This
pin is an active low RESET to the device.
PORTA is a bi-directional I/O port.
RA0/AN0 2 2 I/O TTL RA0 can also be analog input0.
RA1/AN1 3 3 I/O TTL RA1 can also be analog input1.
RA2/AN2/VREF- 4 4 I/O TTL RA2 can also be analog input2 or negative analog
reference voltage.
RA3/AN3/VREF+ 5 5 I/O TTL RA3 can also be analog input3 or positive analog
reference voltage.
RA4/T0CKI 6 6 I/O ST RA4 can also be the clock input to the Timer0
module. Output is open drain type.
RA5/SS/AN4 7 7 I/O TTL RA5 can also be analog input4 or the slave select
for the synchronous serial port.
PORTB is a bi-directional I/O port. PORTB can be software
programmed for internal weak pull-up on all inputs.
RB0/INT 21 21 I/O TTL/ST(1) RB0 can also be the external interrupt pin.
RB1 22 22 I/O TTL
RB2 23 23 I/O TTL
RB3/PGM 24 24 I/O TTL RB3 can also be the low voltage programming input.
RB4 25 25 I/O TTL Interrupt-on-change pin.
RB5 26 26 I/O TTL Interrupt-on-change pin.
RB6/PGC 27 27 I/O TTL/ST(2) Interrupt-on-change pin or In-Circuit Debugger pin. Serial
programming clock.
RB7/PGD 28 28 I/O TTL/ST(2) Interrupt-on-change pin or In-Circuit Debugger pin. Serial
programming data.
PORTC is a bi-directional I/O port.
RC0/T1OSO/T1CKI 11 11 I/O ST RC0 can also be the Timer1 oscillator output or Timer1
clock input.
RC1/T1OSI/CCP2 12 12 I/O ST RC1 can also be the Timer1 oscillator input or Capture2
input/Compare2 output/PWM2 output.
RC2/CCP1 13 13 I/O ST RC2 can also be the Capture1 input/Compare1 output/
PWM1 output.
RC3/SCK/SCL 14 14 I/O ST RC3 can also be the synchronous serial clock input/output
for both SPI and I2C modes.
RC4/SDI/SDA 15 15 I/O ST RC4 can also be the SPI Data In (SPI mode) or
data I/O (I2C mode).
RC5/SDO 16 16 I/O ST RC5 can also be the SPI Data Out (SPI mode).
RC6/TX/CK 17 17 I/O ST RC6 can also be the USART Asynchronous Transmit or
Synchronous Clock.
RC7/RX/DT 18 18 I/O ST RC7 can also be the USART Asynchronous Receive or
Synchronous Data.
VSS 8, 19 8, 19 P — Ground reference for logic and I/O pins.
VDD 20 20 P — Positive supply for logic and I/O pins.
Legend: I = input O = output I/O = input/output P = power
— = Not used TTL = TTL input ST = Schmitt Trigger input
Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.
2: This buffer is a Schmitt Trigger input when used in Serial Programming mode.
3: This buffer is a Schmitt Trigger input when configured in RC oscillator mode and a CMOS input otherwise.

 2001 Microchip Technology Inc. DS30292C-page 7


PIC16F87X
5.0 TIMER0 MODULE Counter mode is selected by setting bit T0CS
(OPTION_REG<5>). In Counter mode, Timer0 will
The Timer0 module timer/counter has the following fea- increment either on every rising, or falling edge of pin
tures: RA4/T0CKI. The incrementing edge is determined by
• 8-bit timer/counter the Timer0 Source Edge Select bit, T0SE
• Readable and writable (OPTION_REG<4>). Clearing bit T0SE selects the ris-
ing edge. Restrictions on the external clock input are
• 8-bit software programmable prescaler
discussed in detail in Section 5.2.
• Internal or external clock select
The prescaler is mutually exclusively shared between
• Interrupt on overflow from FFh to 00h
the Timer0 module and the Watchdog Timer. The pres-
• Edge select for external clock caler is not readable or writable. Section 5.3 details the
Figure 5-1 is a block diagram of the Timer0 module and operation of the prescaler.
the prescaler shared with the WDT.
5.1 Timer0 Interrupt
Additional information on the Timer0 module is avail-
able in the PICmicro™ Mid-Range MCU Family Refer- The TMR0 interrupt is generated when the TMR0 reg-
ence Manual (DS33023). ister overflows from FFh to 00h. This overflow sets bit
Timer mode is selected by clearing bit T0CS T0IF (INTCON<2>). The interrupt can be masked by
(OPTION_REG<5>). In Timer mode, the Timer0 mod- clearing bit T0IE (INTCON<5>). Bit T0IF must be
ule will increment every instruction cycle (without pres- cleared in software by the Timer0 module Interrupt Ser-
caler). If the TMR0 register is written, the increment is vice Routine before re-enabling this interrupt. The
inhibited for the following two instruction cycles. The TMR0 interrupt cannot awaken the processor from
user can work around this by writing an adjusted value SLEEP, since the timer is shut-off during SLEEP.
to the TMR0 register.

FIGURE 5-1: BLOCK DIAGRAM OF THE TIMER0/WDT PRESCALER

CLKOUT (= FOSC/4) Data Bus

8
M 1
0
RA4/T0CKI U M
X SYNC
pin U 2 TMR0 Reg
1 0
X Cycles

T0SE
T0CS
PSA Set Flag Bit T0IF
on Overflow
PRESCALER

0
M 8-bit Prescaler
U
Watchdog 1 X 8
Timer

8 - to - 1MUX PS2:PS0
PSA

0 1
WDT Enable bit
MUX PSA

WDT
Time-out

Note: T0CS, T0SE, PSA, PS2:PS0 are (OPTION_REG<5:0>).

 2001 Microchip Technology Inc. DS30292C-page 47


PIC16F87X
5.2 Using Timer0 with an External Timer0 module means that there is no prescaler for the
Clock Watchdog Timer, and vice-versa. This prescaler is not
readable or writable (see Figure 5-1).
When no prescaler is used, the external clock input is
The PSA and PS2:PS0 bits (OPTION_REG<3:0>)
the same as the prescaler output. The synchronization
determine the prescaler assignment and prescale ratio.
of T0CKI with the internal phase clocks is accom-
plished by sampling the prescaler output on the Q2 and When assigned to the Timer0 module, all instructions
Q4 cycles of the internal phase clocks. Therefore, it is writing to the TMR0 register (e.g. CLRF 1, MOVWF 1,
necessary for T0CKI to be high for at least 2Tosc (and BSF 1,x....etc.) will clear the prescaler. When assigned
a small RC delay of 20 ns) and low for at least 2Tosc to WDT, a CLRWDT instruction will clear the prescaler
(and a small RC delay of 20 ns). Refer to the electrical along with the Watchdog Timer. The prescaler is not
specification of the desired device. readable or writable.
Note: Writing to TMR0, when the prescaler is
5.3 Prescaler assigned to Timer0, will clear the prescaler
There is only one prescaler available, which is mutually count, but will not change the prescaler
exclusively shared between the Timer0 module and the assignment.
Watchdog Timer. A prescaler assignment for the

REGISTER 5-1: OPTION_REG REGISTER


R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
bit 7 bit 0

bit 7 RBPU
bit 6 INTEDG
bit 5 T0CS: TMR0 Clock Source Select bit
1 = Transition on T0CKI pin
0 = Internal instruction cycle clock (CLKOUT)
bit 4 T0SE: TMR0 Source Edge Select bit
1 = Increment on high-to-low transition on T0CKI pin
0 = Increment on low-to-high transition on T0CKI pin
bit 3 PSA: Prescaler Assignment bit
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the Timer0 module
bit 2-0 PS2:PS0: Prescaler Rate Select bits
Bit Value TMR0 Rate WDT Rate
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1 : 16 1:8
100 1 : 32 1 : 16
101 1 : 64 1 : 32
110 1 : 128 1 : 64
111 1 : 256 1 : 128

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown

Note: To avoid an unintended device RESET, the instruction sequence shown in the PICmicro™ Mid-Range MCU
Family Reference Manual (DS33023) must be executed when changing the prescaler assignment from
Timer0 to the WDT. This sequence must be followed even if the WDT is disabled.

DS30292C-page 48  2001 Microchip Technology Inc.


PIC16F87X
7.0 TIMER2 MODULE Register 7-1 shows the Timer2 control register.
Additional information on timer modules is available in
Timer2 is an 8-bit timer with a prescaler and a
the PICmicro™ Mid-Range MCU Family Reference
postscaler. It can be used as the PWM time-base for
Manual (DS33023).
the PWM mode of the CCP module(s). The TMR2 reg-
ister is readable and writable, and is cleared on any
device RESET. FIGURE 7-1: TIMER2 BLOCK DIAGRAM
The input clock (FOSC/4) has a prescale option of 1:1, Sets Flag
TMR2 (1)
1:4, or 1:16, selected by control bits bit TMR2IF Output
T2CKPS1:T2CKPS0 (T2CON<1:0>).
RESET Prescaler
The Timer2 module has an 8-bit period register, PR2. TMR2 Reg FOSC/4
1:1, 1:4, 1:16
Timer2 increments from 00h until it matches PR2 and
Postscaler
then resets to 00h on the next increment cycle. PR2 is Comparator 2
1:1 to 1:16 EQ
a readable and writable register. The PR2 register is T2CKPS1:
initialized to FFh upon RESET. 4 PR2 Reg T2CKPS0

The match output of TMR2 goes through a 4-bit T2OUTPS3:


T2OUTPS0
postscaler (which gives a 1:1 to 1:16 scaling inclusive)
to generate a TMR2 interrupt (latched in flag bit Note 1: TMR2 register output can be software selected by the
TMR2IF, (PIR1<1>)). SSP module as a baud clock.

Timer2 can be shut-off by clearing control bit TMR2ON


(T2CON<2>), to minimize power consumption.

REGISTER 7-1: T2CON: TIMER2 CONTROL REGISTER (ADDRESS 12h)


U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
bit 7 bit 0

bit 7 Unimplemented: Read as '0'


bit 6-3 TOUTPS3:TOUTPS0: Timer2 Output Postscale Select bits
0000 = 1:1 Postscale
0001 = 1:2 Postscale
0010 = 1:3 Postscale



1111 = 1:16 Postscale
bit 2 TMR2ON: Timer2 On bit
1 = Timer2 is on
0 = Timer2 is off
bit 1-0 T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
00 = Prescaler is 1
01 = Prescaler is 4
1x = Prescaler is 16

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown

 2001 Microchip Technology Inc. DS30292C-page 55


PIC16F87X
7.1 Timer2 Prescaler and Postscaler 7.2 Output of TMR2
The prescaler and postscaler counters are cleared The output of TMR2 (before the postscaler) is fed to the
when any of the following occurs: SSP module, which optionally uses it to generate shift
• a write to the TMR2 register clock.
• a write to the T2CON register
• any device RESET (POR, MCLR Reset, WDT
Reset, or BOR)
TMR2 is not cleared when T2CON is written.

TABLE 7-1: REGISTERS ASSOCIATED WITH TIMER2 AS A TIMER/COUNTER

Value on: Value on


Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, all other
BOR RESETS
0Bh,8Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
11h TMR2 Timer2 Module’s Register 0000 0000 0000 0000
12h T2CON — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 0000
92h PR2 Timer2 Period Register 1111 1111 1111 1111
Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the Timer2 module.
Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F873/876; always maintain these bits clear.

DS30292C-page 56  2001 Microchip Technology Inc.


PIC16F87X
8.0 CAPTURE/COMPARE/PWM CCP2 Module:
MODULES Capture/Compare/PWM Register2 (CCPR2) is com-
prised of two 8-bit registers: CCPR2L (low byte) and
Each Capture/Compare/PWM (CCP) module contains CCPR2H (high byte). The CCP2CON register controls
a 16-bit register which can operate as a: the operation of CCP2. The special event trigger is
• 16-bit Capture register generated by a compare match and will reset Timer1
• 16-bit Compare register and start an A/D conversion (if the A/D module is
enabled).
• PWM Master/Slave Duty Cycle register
Additional information on CCP modules is available in
Both the CCP1 and CCP2 modules are identical in
the PICmicro™ Mid-Range MCU Family Reference
operation, with the exception being the operation of the
Manual (DS33023) and in application note AN594,
special event trigger. Table 8-1 and Table 8-2 show the
“Using the CCP Modules” (DS00594).
resources and interactions of the CCP module(s). In
the following sections, the operation of a CCP module
is described with respect to CCP1. CCP2 operates the TABLE 8-1: CCP MODE - TIMER
same as CCP1, except where noted. RESOURCES REQUIRED
CCP1 Module: CCP Mode Timer Resource
Capture/Compare/PWM Register1 (CCPR1) is com-
Capture Timer1
prised of two 8-bit registers: CCPR1L (low byte) and
Compare Timer1
CCPR1H (high byte). The CCP1CON register controls
PWM Timer2
the operation of CCP1. The special event trigger is
generated by a compare match and will reset Timer1.

TABLE 8-2: INTERACTION OF TWO CCP MODULES

CCPx Mode CCPy Mode Interaction


Capture Capture Same TMR1 time-base
Capture Compare The compare should be configured for the special event trigger, which clears TMR1
Compare Compare The compare(s) should be configured for the special event trigger, which clears TMR1
PWM PWM The PWMs will have the same frequency and update rate (TMR2 interrupt)
PWM Capture None
PWM Compare None

 2001 Microchip Technology Inc. DS30292C-page 57


PIC16F87X
REGISTER 8-1: CCP1CON REGISTER/CCP2CON REGISTER (ADDRESS: 17h/1Dh)
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— — CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0
bit 7 bit 0

bit 7-6 Unimplemented: Read as '0'


bit 5-4 CCPxX:CCPxY: PWM Least Significant bits
Capture mode:
Unused
Compare mode:
Unused
PWM mode:
These bits are the two LSbs of the PWM duty cycle. The eight MSbs are found in CCPRxL.
bit 3-0 CCPxM3:CCPxM0: CCPx Mode Select bits
0000 = Capture/Compare/PWM disabled (resets CCPx module)
0100 = Capture mode, every falling edge
0101 = Capture mode, every rising edge
0110 = Capture mode, every 4th rising edge
0111 = Capture mode, every 16th rising edge
1000 = Compare mode, set output on match (CCPxIF bit is set)
1001 = Compare mode, clear output on match (CCPxIF bit is set)
1010 = Compare mode, generate software interrupt on match (CCPxIF bit is set, CCPx pin is
unaffected)
1011 = Compare mode, trigger special event (CCPxIF bit is set, CCPx pin is unaffected); CCP1
resets TMR1; CCP2 resets TMR1 and starts an A/D conversion (if A/D module is
enabled)
11xx = PWM mode

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown

DS30292C-page 58  2001 Microchip Technology Inc.


PIC16F87X
8.3 PWM Mode (PWM) 8.3.1 PWM PERIOD
In Pulse Width Modulation mode, the CCPx pin pro- The PWM period is specified by writing to the PR2 reg-
duces up to a 10-bit resolution PWM output. Since the ister. The PWM period can be calculated using the fol-
CCP1 pin is multiplexed with the PORTC data latch, lowing formula:
the TRISC<2> bit must be cleared to make the CCP1 PWM period = [(PR2) + 1] • 4 • TOSC •
pin an output. (TMR2 prescale value)
Note: Clearing the CCP1CON register will force PWM frequency is defined as 1 / [PWM period].
the CCP1 PWM output latch to the default
When TMR2 is equal to PR2, the following three events
low level. This is not the PORTC I/O data
occur on the next increment cycle:
latch.
• TMR2 is cleared
Figure 8-3 shows a simplified block diagram of the
CCP module in PWM mode. • The CCP1 pin is set (exception: if PWM duty
cycle = 0%, the CCP1 pin will not be set)
For a step-by-step procedure on how to set up the CCP
• The PWM duty cycle is latched from CCPR1L into
module for PWM operation, see Section 8.3.3.
CCPR1H

FIGURE 8-3: SIMPLIFIED PWM BLOCK


Note: The Timer2 postscaler (see Section 7.1) is
DIAGRAM not used in the determination of the PWM
CCP1CON<5:4> frequency. The postscaler could be used
Duty Cycle Registers
to have a servo update rate at a different
CCPR1L frequency than the PWM output.

8.3.2 PWM DUTY CYCLE


The PWM duty cycle is specified by writing to the
CCPR1H (Slave)
CCPR1L register and to the CCP1CON<5:4> bits. Up
RC2/CCP1
to 10-bit resolution is available. The CCPR1L contains
Comparator R Q the eight MSbs and the CCP1CON<5:4> contains the
two LSbs. This 10-bit value is represented by
TMR2 (Note 1) CCPR1L:CCP1CON<5:4>. The following equation is
S used to calculate the PWM duty cycle in time:

TRISC<2>
PWM duty cycle =(CCPR1L:CCP1CON<5:4>) •
Comparator
Clear Timer, TOSC • (TMR2 prescale value)
CCP1 pin and
latch D.C. CCPR1L and CCP1CON<5:4> can be written to at any
PR2
time, but the duty cycle value is not latched into
CCPR1H until after a match between PR2 and TMR2
Note 1: The 8-bit timer is concatenated with 2-bit internal Q occurs (i.e., the period is complete). In PWM mode,
clock, or 2 bits of the prescaler, to create 10-bit time-
base. CCPR1H is a read-only register.
The CCPR1H register and a 2-bit internal latch are
A PWM output (Figure 8-4) has a time-base (period)
used to double buffer the PWM duty cycle. This double
and a time that the output stays high (duty cycle). The
buffering is essential for glitch-free PWM operation.
frequency of the PWM is the inverse of the period
(1/period). When the CCPR1H and 2-bit latch match TMR2, con-
catenated with an internal 2-bit Q clock, or 2 bits of the
FIGURE 8-4: PWM OUTPUT TMR2 prescaler, the CCP1 pin is cleared.
The maximum PWM resolution (bits) for a given PWM
Period frequency is given by the formula:

(FOSC
log FPWM )
Duty Cycle
Resolution = bits
log(2)
TMR2 = PR2
Note: If the PWM duty cycle value is longer than
TMR2 = Duty Cycle
the PWM period, the CCP1 pin will not be
TMR2 = PR2 cleared.

 2001 Microchip Technology Inc. DS30292C-page 61


PIC16F87X
8.3.3 SETUP FOR PWM OPERATION 3. Make the CCP1 pin an output by clearing the
TRISC<2> bit.
The following steps should be taken when configuring
4. Set the TMR2 prescale value and enable Timer2
the CCP module for PWM operation:
by writing to T2CON.
1. Set the PWM period by writing to the PR2 5. Configure the CCP1 module for PWM operation.
register.
2. Set the PWM duty cycle by writing to the
CCPR1L register and CCP1CON<5:4> bits.

TABLE 8-3: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 20 MHz

PWM Frequency 1.22 kHz 4.88 kHz 19.53 kHz 78.12kHz 156.3 kHz 208.3 kHz
Timer Prescaler (1, 4, 16) 16 4 1 1 1 1
PR2 Value 0xFFh 0xFFh 0xFFh 0x3Fh 0x1Fh 0x17h
Maximum Resolution (bits) 10 10 10 8 7 5.5

TABLE 8-4: REGISTERS ASSOCIATED WITH CAPTURE, COMPARE, AND TIMER1

Value on: Value on


Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, all other
BOR RESETS

0Bh,8Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10Bh, 18Bh
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
0Dh PIR2 — — — — — — — CCP2IF ---- ---0 ---- ---0
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
8Dh PIE2 — — — — — — — CCP2IE ---- ---0 ---- ---0
87h TRISC PORTC Data Direction Register 1111 1111 1111 1111
0Eh TMR1L Holding Register for the Least Significant Byte of the 16-bit TMR1 Register xxxx xxxx uuuu uuuu
0Fh TMR1H Holding Register for the Most Significant Byte of the 16-bit TMR1 Register xxxx xxxx uuuu uuuu
10h T1CON — — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu
15h CCPR1L Capture/Compare/PWM Register1 (LSB) xxxx xxxx uuuu uuuu
16h CCPR1H Capture/Compare/PWM Register1 (MSB) xxxx xxxx uuuu uuuu
17h CCP1CON — — CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000
1Bh CCPR2L Capture/Compare/PWM Register2 (LSB) xxxx xxxx uuuu uuuu
1Ch CCPR2H Capture/Compare/PWM Register2 (MSB) xxxx xxxx uuuu uuuu
1Dh CCP2CON — — CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000
Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by Capture and Timer1.
Note 1: The PSP is not implemented on the PIC16F873/876; always maintain these bits clear.

DS30292C-page 62  2001 Microchip Technology Inc.


PIC16F87X
TABLE 13-2: PIC16F87X INSTRUCTION SET

Mnemonic, 14-Bit Opcode Status


Description Cycles Notes
Operands MSb LSb Affected

BYTE-ORIENTED FILE REGISTER OPERATIONS


ADDWF f, d Add W and f 1 00 0111 dfff ffff C,DC,Z 1,2
ANDWF f, d AND W with f 1 00 0101 dfff ffff Z 1,2
CLRF f Clear f 1 00 0001 lfff ffff Z 2
CLRW - Clear W 1 00 0001 0xxx xxxx Z
COMF f, d Complement f 1 00 1001 dfff ffff Z 1,2
DECF f, d Decrement f 1 00 0011 dfff ffff Z 1,2
DECFSZ f, d Decrement f, Skip if 0 1(2) 00 1011 dfff ffff 1,2,3
INCF f, d Increment f 1 00 1010 dfff ffff Z 1,2
INCFSZ f, d Increment f, Skip if 0 1(2) 00 1111 dfff ffff 1,2,3
IORWF f, d Inclusive OR W with f 1 00 0100 dfff ffff Z 1,2
MOVF f, d Move f 1 00 1000 dfff ffff Z 1,2
MOVWF f Move W to f 1 00 0000 lfff ffff
NOP - No Operation 1 00 0000 0xx0 0000
RLF f, d Rotate Left f through Carry 1 00 1101 dfff ffff C 1,2
RRF f, d Rotate Right f through Carry 1 00 1100 dfff ffff C 1,2
SUBWF f, d Subtract W from f 1 00 0010 dfff ffff C,DC,Z 1,2
SWAPF f, d Swap nibbles in f 1 00 1110 dfff ffff 1,2
XORWF f, d Exclusive OR W with f 1 00 0110 dfff ffff Z 1,2
BIT-ORIENTED FILE REGISTER OPERATIONS
BCF f, b Bit Clear f 1 01 00bb bfff ffff 1,2
BSF f, b Bit Set f 1 01 01bb bfff ffff 1,2
BTFSC f, b Bit Test f, Skip if Clear 1 (2) 01 10bb bfff ffff 3
BTFSS f, b Bit Test f, Skip if Set 1 (2) 01 11bb bfff ffff 3
LITERAL AND CONTROL OPERATIONS
ADDLW k Add literal and W 1 11 111x kkkk kkkk C,DC,Z
ANDLW k AND literal with W 1 11 1001 kkkk kkkk Z
CALL k Call subroutine 2 10 0kkk kkkk kkkk
CLRWDT - Clear Watchdog Timer 1 00 0000 0110 0100 TO,PD
GOTO k Go to address 2 10 1kkk kkkk kkkk
IORLW k Inclusive OR literal with W 1 11 1000 kkkk kkkk Z
MOVLW k Move literal to W 1 11 00xx kkkk kkkk
RETFIE - Return from interrupt 2 00 0000 0000 1001
RETLW k Return with literal in W 2 11 01xx kkkk kkkk
RETURN - Return from Subroutine 2 00 0000 0000 1000
SLEEP - Go into standby mode 1 00 0000 0110 0011 TO,PD
SUBLW k Subtract W from literal 1 11 110x kkkk kkkk C,DC,Z
XORLW k Exclusive OR literal with W 1 11 1010 kkkk kkkk Z
Note 1: When an I/O register is modified as a function of itself ( e.g., MOVF PORTB, 1), the value used will be that value present
on the pins themselves. For example, if the data latch is ’1’ for a pin configured as input and is driven low by an external
device, the data will be written back with a ’0’.
2: If this instruction is executed on the TMR0 register (and, where applicable, d = 1), the prescaler will be cleared if
assigned to the Timer0 module.
3: If Program Counter (PC) is modified, or a conditional test is true, the instruction requires two cycles. The second cycle is
executed as a NOP.

Note: Additional information on the mid-range instruction set is available in the PICmicro™ Mid-Range MCU
Family Reference Manual (DS33023).

DS30292C-page 136  2001 Microchip Technology Inc.


L293D
L293DD

PUSH-PULL FOUR CHANNEL DRIVER WITH DIODES

600mA OUTPUT CURRENT CAPABILITY


PER CHANNEL
1.2A PEAK OUTPUT CURRENT (non repeti-
tive) PER CHANNEL
ENABLE FACILITY
OVERTEMPERATURE PROTECTION
LOGICAL ”0” INPUT VOLTAGE UP TO 1.5 V
(HIGH NOISE IMMUNITY)
INTERNAL CLAMP DIODES SO(12+4+4) Powerdip (12+2+2)

ORDERING NUMBERS:
DESCRIPTION
The Device is a monolithic integrated high volt- L293DD L293D
age, high current four channel driver designed to
accept standard DTL or TTL logic levels and drive
inductive loads (such as relays solenoides, DC
and stepping motors) and switching power tran-
sistors.
To simplify use as two bridges each pair of chan-
nels is equipped with an enable input. A separate The L293D is assembled in a 16 lead plastic
supply input is provided for the logic, allowing op- packaage which has 4 center pins connected to-
eration at a lower voltage and internal clamp di- gether and used for heatsinking
odes are included. The L293DD is assembled in a 20 lead surface
This device is suitable for use in switching appli- mount which has 8 center pins connected to-
cations at frequencies up to 5 kHz. gether and used for heatsinking.

BLOCK DIAGRAM

June 1996 1/7


L293D - L293DD

ABSOLUTE MAXIMUM RATINGS


Symbol Parameter Value Unit
VS Supply Voltage 36 V
V SS Logic Supply Voltage 36 V
Vi Input Voltage 7 V
V en Enable Voltage 7 V
Io Peak Output Current (100 µs non repetitive) 1.2 A
P tot Total Power Dissipation at Tpins = 90 °C 4 W
Tstg, Tj Storage and Junction Temperature – 40 to 150 °C

PIN CONNECTIONS (Top view)

SO(12+4+4) Powerdip(12+2+2)

THERMAL DATA
Symbol Decription DIP SO Unit
Rth j-pins Thermal Resistance Junction-pins max. – 14 °C/W
Rth j-amb Thermal Resistance junction-ambient max. 80 50 (*) °C/W
Rth j-case Thermal Resistance Junction-case max. 14 –
(*) With 6sq. cm on board heatsink.

2/7
Aiv'lIiJIKA. TRADING CO.,
,4nnexeto Ambika No. loa, Shankara Park,
Bangalore . 560 004.
Telefax: 6613337, 6602160
e.mail: ambikaramesh@hotmail.com

.'''''- GearSeries(533 & (528 ~


Spur Reduction Gearhead
Design Motor Data
Gear series C533 &C528 contains Brassgears and steel pinions to ensure Motor Voltage ' '. Direction Speed Torque
. .
longer life and better wear and tear properties. The gears are fixed on
D03 6 CW or ACW 2400 30 gm-cm
hardened steel spindles polished to a mirror finish.These spindles rotate
between bronze plates which ensures silent running. The output shaft D03 6 I Reversible 2400 30 gm-cm
rotates in a sintered bushing. The whole assembly is covered with a
D03 12 CW or ACW 2400 50 gm.cm
plastic ring. All the bearings are permanently lubricated and therefore
requires no maintenance. The motor is screwed to the gear box from 003 12 Reversible 7500 25 gm-cm
inside. Any small standard motor can be used in combination with the 2200
DC25 2.5 Reversible 3.2 gm-cm
gear box. However the most popular ones are mentioned in the table
below. . DC25 6 Reversible 8500 4.0 gm-cm
Standard Data
GearTorque
Combination motor
kg-cm 3 I
Standard small DC motor Dia 33 availiable in 6 V,9 V or 12V DC
Mounting " any position
Weight gm 150
Axial thrust "C'" kg ." 2
"'.

Radial torque kg 5
Lateral torque kg-cm '1 5
Output shafts eJ 4.00,4.76,5.00,6.00,6.35 &7.00 (others on request)
Ambient' temperature operation .C -15...+55 . . .,...,... .

Transmission ratios

.,mm,
I .
- ---~'--
(5
J -~O~O~~.~~
J --GEAr~.~~AD (533
---~
- ._d~ ~.
,
o.

,
:;;:. --"---

_--nn__---
I I
~
/
25 28.1 i
nos.8 Bp,.tappings ! n-I :
On17PCD i 2J~L---i

'" ,
MOTOR DC 25 GEAR HEAD (528
a. ---- "I -' 01
"0--- -, Q G'
(5
:;;: '-..1

I I
\
4 nos. 8BA \ .29.L._. J 26.1 j
i
On 17.0PCD
47.9 -,_..1
""-,, '0.. .,.
LM339, LM239, LM2901,
LM2901V, NCV2901,
MC3302

Single Supply Quad


Comparators
These comparators are designed for use in level detection, low−level http://onsemi.com
sensing and memory applications in consumer, automotive, and
industrial electronic applications.
SOIC−14
Features 14 D SUFFIX
CASE 751A
• Pb−Free Packages are Available* 1

• Single or Split Supply Operation


• Low Input Bias Current: 25 nA (Typ)
• Low Input Offset Current: ±5.0 nA (Typ)
PDIP−14
N, P SUFFIX
• Low Input Offset Voltage CASE 646
• Input Common Mode Voltage Range to GND 14
• Low Output Saturation Voltage: 130 mV (Typ) @ 4.0 mA 1
• TTL and CMOS Compatible
• ESD Clamps on the Inputs Increase Reliability without Affecting
Device Operation TSSOP−14
14 DTB SUFFIX
CASE 948G
1

PIN CONNECTIONS

Output 2 1 14 Output 3

Output 1 2 13 Output 4

VCC 3 12 GND

− Input 1 4 11 + Input 4
* )
1 4
+ Input 1 5
) * 10 − Input 4

− Input 2 6 9 + Input 3
*2 )
3
) *
+ Input 2 7 8 − Input 3

(Top View)

ORDERING INFORMATION
See detailed ordering and shipping information in the package
dimensions section on page 7 of this data sheet.

DEVICE MARKING INFORMATION


See general marking information in the device marking
section on page 8 of this data sheet.

*For additional information on our Pb−Free strategy and soldering details, please
download the ON Semiconductor Soldering and Mounting Techniques
Reference Manual, SOLDERRM/D.

 Semiconductor Components Industries, LLC, 2004 1 Publication Order Number:


July, 2004 − Rev. 13 LM339/D
Philips Semiconductors Product specification

Triple 3-input NOR gate 74HC/HCT27

PIN DESCRIPTION

PIN NO. SYMBOL NAME AND FUNCTION


1, 3, 9 1A to 3A data inputs
2, 4, 10 1B to 3B data inputs
13, 5, 11 1C to 3C data inputs
7 GND ground (0 V)
12, 6, 8 1Y to 3Y data outputs
14 VCC positive supply voltage

Fig.1 Pin configuration. Fig.2 Logic symbol. Fig.3 IEC logic symbol.

FUNCTION TABLE

INPUTS OUTPUT
nA nB nC nY
L L L H
X X H L
X H X L
H X X L

Notes
1. H = HIGH voltage level
L = LOW voltage level
X = don’t care

Fig.4 Functional diagram. Fig.5 Logic diagram (one gate).

December 1990 3
MM74HC148 8-3 Line Priority Encoder
October 1987
Revised September 2001

MM74HC148
8-3 Line Priority Encoder
General Description Features
The MM74HC148 priority encoder utilizes advanced sili- ■ Typical propagation delay: 13 ns
con-gate CMOS technology. It has the high noise immunity ■ Wide supply voltage range: 2V–6V
and low power consumption typical of CMOS circuits, as
well as the speeds and output drive similar to LB-TTL.
This priority encoder accepts 8 input request lines 0–7 and
outputs 3 lines A0–A2. The priority encoding ensures that
only the highest order data line is encoded. Cascading cir-
cuitry (enable input EI and enable output EO) has been
provided to allow octal expansion without the need for
external circuitry. All data inputs and outputs are active at
the low logic level.
All inputs are protected from damage due to static dis-
charge by internal diode clamps to VCC and ground.

Ordering Code:
Order Number Package Number Package Description
MM74HC148M M16A 16-Lead Small Outline Integrated Circuit (SOIC), JEDEC MS-012, 0.150" Narrow
MM74HC148N N16E 16-Lead Plastic Dual-In-Line Package (PDIP), JEDEC MS-001, 0.300" Wide

Connection Diagram Truth Table


Inputs Outputs
EI 0 1 2 3 4 5 6 7 A2 A1 A0 GS EO
H X X X X X X X X H H H H H
L H H H H H H H H H H H H L
L X X X X X X X L L L L L H
L X X X X X X L H L L H L H
L X X X X X L H H L H L L H
L X X X X L H H H L H H L H
L X X X L H H H H H L L L H
L X X L H H H H H H L H L H
L X L H H H H H H H H L L H
L L H H H H H H H H H H L H
H = HIGH
L = LOW
X = Irrelevant

© 2001 Fairchild Semiconductor Corporation DS009390 www.fairchildsemi.com


Philips Semiconductors Product specification

Hex inverter 74HC04; 74HCT04

handbook, halfpage 1A VCC


handbook, halfpage
1 14 1Y
1 1A 2
1Y 2 13 6A
3 2A 2Y 4
2A 3 12 6Y

5 3A 3Y 6
2Y 4 GND(1) 11 5A

3A 5 10 5Y 9 4A 4Y 8

3Y 6 9 4A 11 5A 5Y 10

7 8
13 6A 6Y 12
GND 4Y
Top view MBL760

MNA342

(1) The die substrate is attached to this pad using conductive die
attach material. It can not be used as a supply pin or input.

Fig.2 Pin configuration DHVQFN14. Fig.3 Logic symbol.

handbook, halfpage 1
1 2

1
3 4

1
5 6
handbook, halfpage
A Y
1
9 8 MNA341

1
11 10

1
13 12

MNA343

Fig.4 IEC logic symbol. Fig.5 Logic diagram (one inverter).

2003 Jul 23 4
LM78XX Series Voltage Regulators
May 2000

LM78XX
Series Voltage Regulators
General Description put, although this does improve transient response. Input by-
passing is needed only if the regulator is located far from the
The LM78XX series of three terminal regulators is available filter capacitor of the power supply.
with several fixed output voltages making them useful in a
For output voltage other than 5V, 12V and 15V the LM117
wide range of applications. One of these is local on card
series provides an output voltage range from 1.2V to 57V.
regulation, eliminating the distribution problems associated
with single point regulation. The voltages available allow
these regulators to be used in logic systems, instrumenta- Features
tion, HiFi, and other solid state electronic equipment. Al- n Output current in excess of 1A
though designed primarily as fixed voltage regulators these n Internal thermal overload protection
devices can be used with external components to obtain ad- n No external components required
justable voltages and currents.
n Output transistor safe area protection
The LM78XX series is available in an aluminum TO-3 pack- n Internal short circuit current limit
age which will allow over 1.0A load current if adequate heat
n Available in the aluminum TO-3 package
sinking is provided. Current limiting is included to limit the
peak output current to a safe value. Safe area protection for
the output transistor is provided to limit internal power dissi- Voltage Range
pation. If internal power dissipation becomes too high for the
LM7805C 5V
heat sinking provided, the thermal shutdown circuit takes
over preventing the IC from overheating. LM7812C 12V
Considerable effort was expanded to make the LM78XX se- LM7815C 15V
ries of regulators easy to use and minimize the number of
external components. It is not necessary to bypass the out-

Connection Diagrams

Metal Can Package Plastic Package


TO-3 (K) TO-220 (T)
Aluminum

DS007746-3
DS007746-2
Top View
Bottom View Order Number LM7805CT,
Order Number LM7805CK, LM7812CT or LM7815CT
LM7812CK or LM7815CK See NS Package Number T03B
See NS Package Number KC02A

© 2000 National Semiconductor Corporation DS007746 www.national.com

You might also like