Vous êtes sur la page 1sur 98

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 8 th 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.
External Viva
Signature of the Guide

Signature of the HOD

Signature of the Principal

(B. N. Manjunatha Reddy)

(Prof.N. Narasimha Swamy)

(Dr.T.R.Seetharam)

Name of the Examiners


1.

Signature with date

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.
Id 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

1. SYNOPSIS

LINE FOLLOWING
ROBOT

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 pC. 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

Main
Power
Supply

Clock 4
MHz

PIC 16F873
Microcontroller

hi

Motor
Power
Supply
Left
Motor

H - Bridge
DC Motor
Control

HEX
Inverter

Right
Motor

7T

Priority
Encoder
NOR
Gate

Analog
Comparators

Threshold
Voltage

7T

Sensor Array

Figure 1.1: Block Diagram of the Line Following Robot

2. PREAMBLE
2.1.

LINE FOLLOWING
ROBOT

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 1970s 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 microprocessor
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 learning and research

3
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING
ROBOT
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. Its 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, isnt 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 lines 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.
Looking through the library on books on robotics, there was one thing I noticed.
5
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING
ROBOT
There are no books which deal with understandable basics, or implementation. After a lot
of search, I found PIC Robotics, A beginners 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
Id 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.
Use of IR even though solves a lot of problems pertaining to interference, makes it
hard to debug a faulty sensor.
6
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING
ROBOT
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 realtime 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 Id 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.
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.

7
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING
ROBOT
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 Im 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


si = r $
ss. = (r + b) $
SM

= (r + b/ 2)

where SS&give the displacement (distance traveled) for the left and right wheels
respectively, r 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
in radians (

V1S0) )

awis 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

9
Department of Electronics & Communication, GAT, Bangalore - 98

robot's frame of reference.

LINE FOLLOWING
ROBOT

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 V R and the left wheel at a velocity of V L, then
the following equation can be derived.
Where a positive 0 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 wheels 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.
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.

10
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING
ROBOT
Example specifications of the motors used are given below:
Characteristic

Value

Operating Voltage:

6 V 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 p 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 x 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

0/1

0/1

1/0

1/0

ANY OTHER STATE

ACTION
CLOCKWISE
COUNTER-CLOCKWISE
BRAKE
FORBIDDEN

11
Department of Electronics & Communication, GAT, Bangalore - 98

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

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.

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.

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 doesnt require a central processor, although such a system may have one.
Lets 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 customers 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?
Lets 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 robots 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.
The robots 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 robots 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, its 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 lets 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 isnt 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 lets look at just one more example before
we move on.
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 shouldnt 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)

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 5 V 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 postscalar

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)


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


A = 1 f vdt
t
1 ON
t

f + 5dt

A=

A = 12

= 12V xp

Where p 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 well use generic names for the CCP registers. These
generic names are shown in the table below.
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
modules block diagram is shown in the figure below.

Duty Cycle =
DCxB9:DCxBO

' Period = PR2 + 1


--------------------------------------T;

II IT

1
1

TMR2 = PR2 + 1, TMR2 forced to Ofl

TMR2 = Duty Cycle

TfytR2 = PR2 + 1 TMR2 forced to Otl


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 period = [(PR2) - 1] * 4 Tosc * (TMR2 prescale value), specified in units of time PWM duty cycle =
(DCNB9 DCxBO bits value) * Tost * (TMR2 prescale value), in units of time

P = PWM duty cycle


PWMperiod
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
PR2 = 63

p s = [(PR2) + 1] 4 50 ns 1

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

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 ICs 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 ICs where as their HC & HCT counterparts are CMOS logic ICs.
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

E
V

12V
OU

12V
1,2AH
BATTERY

7S05

13
ptf

LINE FOLLOWING
ROBOT

GND

- 33pJ
0.1
ptf

-12 V -EV
-70E

zzpF

zzpF

I1CLR

vcc

Vdd

DU
T1

OS
C1
R
A1

:
:SC2

L293D
U2

OU
T2

R G-

MO
OR

PIC
16F373
U1

RBE
R6RB2
RBI

CC
P1

EM
12

CC
P2

EN
34 GND

DUT3

OU
T4

.E1
10 OR

RB
O

V33 VSS -EV

Vcc

74HC14B

D >

GND

NOR GATE
U4

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

4.1.1.

LINE FOLLOWING
ROBOT

THE MICROCONTROLLER

The PIC microcontroller was used as its 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
XI
4MH 2

I:

nf Ti

PIC16F873

0SC1
0SC2

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

u 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.
4.1.4. VOLTAGE REGULATOR

25
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING
ROBOT
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 ICs (+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 ICs 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

uF

capacitor at the output is to maintain stability and improve regulation. These are standard
values. The 0.1 uF 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

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 6 V and thus considerably
4.1.6. THE H-BRIDGE CONTROL HARDWARE
increasing
so that the robot can
Figure 4.6: the
The torque
motor control.
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.

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


1

OPERATION
BOTH MOTORS FORWARD
(MOVE FORWARD)

BOTH MOTORS BACKWARD


(MOVE BACKWARD)

RIGHT MOTOR BACKWARD


LEFT MOTOR FORWARD (TURN
RIGHT)

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 D L to IN1
and DL 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 Hbridge. 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.
PWM period = [(PR2) + - 1 ] * 4 To&c * [TMR2 prescale value), specified in units of time

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


200 !us = [(PR2) + 1] x 1 jus PR2 = 200-1 =
199 * 200
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,
PWM duty cycle = 200 u s x - 50- = 100 us .
100
100 us = [DCx] 0.25 us 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 us x------= 192 us .
100
192 us = [DCx] *0.25 us 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 (X = 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

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.
n Vcc - Vd Id
for, Vcc = 5
V Vd = 1.4
V Id =
16mA
R is calculated to be approximately 220 Q.
For the emitter, the collector resistor was determined experimentally on a trial and
error basis. It was decided to use a value of 56 kQ. For this value, the potential across the

LINE FOLLOWING
ROBOT
detector is normally 4.6 V, 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.
ft
Vout'

Vref

----------->

Vin

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.5 V), 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 kQ 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.

,
i'n
ACEGFD
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
inputs
E
l
H

Outputs

L
L

X
X

X
X

X
X

X
X

2
H

X
X

X
L

L
H

H
H

L
L

L
L

X
X

X
X

X
L

L
H

H
H

H
H

H
H

A
1

A
O
H

H
L

L
L

H
H

H
H

H
H

L
H

L
L

H
H

G
S

E
O

33
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
0th input is always connected to +Vcc = 5 V 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.
4.1.12.

THE NO SURFACE LOGIC


<
-----------------O

>

NOR

GATE
HO SURFACE

<

U4

>

<

Figure 4.14: The no surface logic

G
>

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 gates 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.

34
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

No surface is detected

Stop the motors

No line is detected

Execute the no line code


(specially designed
algorithm)

A detects the line

Sharp turn left

B detects the line

Sharp turn right

C detects the line

Turn left

D detects the line

Turn right

E detects the line

Move left

F detects the line

Move right

G detects the line

Go straight

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

35
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING
ROBOT
accomplished in software. But considering that the software would require at least a few

36
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.

36
Department of Electronics & Communication, GAT, Bangalore - 98

4.3. FLOW CHART

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============================;

^^^^^^^^^^^^^^^'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

; ;
;+CODE BY: AMITHASH E. PRASAD, ELECTRONICS & COMMUNICATION;
;++++++++++GLOBAL ACADEMY OF TECHOLOGY+++++++++++++++++++++;

^^^^^^^^^^^^^^^^'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

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

0 DESCRIPTION

X
X

X
X

X
X

X
X

X
X

0
0

0
0

0 SHARP TURN LEFT


1 SHARP TURN RIGHT
LEFT
0 TURN

1 TURN RIGHT
0 MOVE

1 MOVE

X
X

X
X

X
X

X
X

X
X

0 GO STRAIGHT
DONT
1
|

ENDC

LEFT
RIGHT
CARE

'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

ORG 0
GOTO INITIALIZATION ORG 4

'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

#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

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 ; RESET THE CCP2

CLRF CCP2CON

MODULE ;00001100

MOVLW 0X0C

;CCP MODE SET TO PWM MODE AND

MOVWF CCP1CON

THE ;LOWER TWO BITS OF DUTY


MOVWF CCP2CON

CYCLE ;ARE SET TO 0.


;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
'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

GOTO $ ;LOOP HERE INDEFINATELY (WAIT FOR INTERRUPT)

'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

#INCLUDE "SUBROUTINES.INC

'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

END

4.4.2.

LFR.INC

;MACRO DEFINITIONS
;GENERAL MACROS AND DEFINES....
;BANK SELECT MACROS BANK0 MACRO
BCF

STATUS,IRP

BCF

STATUS,RP1

BCF

BCF

STATUS,RP1

BSF

BSF

STATUS,RP1

BCF

BSF

STATUS,RP1

BSF

STATUS,RP0 ENDM
BANK1 MACRO
BCF

STATUS,IRP

STATUS,RP0 ENDM
BANK2 MACRO
BSF

STATUS,IRP

STATUS,RP0 ENDM
BANK3 MACRO
BSF

STATUS,IRP

STATUS,RP0 ENDM
;DEFINES TO USE FOR REGISTERS NOT IN BANK0 #DEFINE INBANK1
0X080 #DEFINE INBANK2 A 0X100 #DEFINE INBANK3
;16BIT MANUPILATOR MACROS
INC16F MACRO VAR

0X180

;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
CONSTAN FORWARD
0X03
T
=
CONSTAN S LEFT = 0X02
T
T
CONSTAN S RIGHT
0X0
T
T =
1
CONSTANT BACKWARD = 0X00
;0000,

;
001
;
000
;
001

;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,
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

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)
;IF TIME_COUNT IS 0 (~5SEC)
THEN ;SHIFT TO LINE FIND MODE

GOTO EXIT_T0 BCF


NOT_LF_FIRST

;START NO LINE CODE ;SET TO TURN


RIGHT
;IS THIS THE FIRST OF NO LINE CODE

NLA:
BSF
LINE_FIND_MODE

;IF YES MODIFY MOTORS ;IS THIS THE


FIRST OF NO LINE CODE

MOVLW 0X03 BTFSS


NOT_LF_FIRST CALL MOTORS BTFSC NOT_LF_FIRST 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
'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

4.4.4.

SUBROUTINES.INC

ORG 0X074
DELAY_FF_US:
;256uS DELAY
MOVLW 0X0FF MOVWF
DELL DELLOOP:
DECFSZ DELL,1
GOTO DELLOOP
NOP
RETURN
'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

48
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING
ROBOT
MOTORS:
;TABLE
;COMMAND IS IN W
BEFORE CALLING,

;EXECUTE THE APPROPRIATE CODE

ADDWF PCL,F 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
MOVE_RIGHT
MOVLW LOWSPEED
MOVWF CCPR2L MOVLW
HIGHSPEED MOVWF
CCPR1L MOVLW

;ERROR INDICATOR, WRONG STATE


;LOW SPEED TO RIGHT MOTOR
;HIGH SPEED TO LEFT MOTOR

FORWARD BTFSC

;BOTH MOTORS FORWARD ;CHANGE

PREVIOUS_STATE

PORTA ONLY IF DIFFERENT ;GIVEN BY

MOVWF PORTA BCF

THE PREVIOUS_STATE FLAG

PREVIOUS_STATE
RETLW 0X00

;RETURN FROM KNOWN STATE

MOVE_LEFT
MOVLW HIGHSPEED

;HIGH SPEED TO RIGHT MOTOR

MOVWF CCPR2L MOVLW


LOWSPEED MOVWF

;LOW SPEED TO LEFT MOTOR

CCPR1L MOVLW FORWARD


BTFSC PREVIOUS_STATE
MOVWF PORTA BCF
PREVIOUS_STATE RETLW

;BOTH MOTORS FORWARD ;CHANGE


PORTA ONLY IF DIFFERENT ;GIVEN
BY THE PREVIOUS_STATE FLAG

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 ;BOTH

MOVLW FORWARD

MOTORS FORWARD ;CHANGE PORTA ONLY

BTFSC PREVIOUS_STATE

IF DIFFERENT ;GIVEN BY THE

MOVWF PORTA

PREVIOUS STATE FLAG


;RETURN FROM KNOWN STATE

BCF PREVIOUS_STATE
NOP
RETLW 0X00
TURN_LEFT
MOVLW HIGHSPEED
MOVWF CCPR2L
CLRF CCPR1L
MOVLW FORWARD
BTFSC PREVIOUS_STATE
MOVWF PORTA
BCF PREVIOUS_STATE

;HIGH SPEED TO RIGHT MOTOR


;ZERO SPEED TO LEFT MOTOR ;BOTH
MOTORS FORWARD ;CHANGE PORTA ONLY
IF DIFFERENT ;GIVEN BY THE
PREVIOUS STATE FLAG
;RETURN FROM KNOWN STATE

NOP
RETLW 0X00

SHARP_TURN_RIGHT
MOVLW HIGHSPEED

;HIGH SPEED TO BOTH


MOTORS

MOVWF CCPR2L
MOVWF CCPR1L
MOVLW ST_RIGHT
MOVWF PORTA BSF
PREVIOUS_STATE

;REVERSE RIGHT MOTOR


;PREVIOUS STATE NO LONGER FORWARD

NOP NOP
RETLW 0X00

;RETURN FROM KNOWN STATE

50
Department of Electronics & Communication, GAT, Bangalore - 98

SHARP_TURN_LEFT
MOVLW HIGHSPEED

;HIGH SPEED TO BOTH MOTORS

MOVWF CCPR2L MOVWF


CCPR1L MOVLW
ST_LEFT MOVWF
PORTA BSF
PREVIOUS_STATE NOP

;REVERSE LEFT MOTOR


;PREVIOUS STATE NO LONGER FORWARD

NOP
RETLW 0X00

GO_STRAIGHT
MOVLW

;RETURN FROM KNOWN STATE

;HIGH SPEED TO BOTH MOTORS

HIGHSPEED
MOVWF CCPR2L
MOVWF CCPR1L
MOVLW FORWARD
BTFSC
PREVIOUS
STATE
;CHANGE
PORTA ONLY
IF
DIFFERENT

;BOTH MOTORS FORWARD

;GIVEN BY THE PREVIOUS STATE FLAG

;RETURN FROM KNOWN STATE

MOVWF PORTA
BCF PREVIOUS_STATE
NOP
RETLW 0X00

'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k

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

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.

Next, the NO_LINE pin is de-bounced high in software. That is, the pin is read, then sampled again after 256 /ns
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 /ns 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 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 gotos 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. NOPs
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
0
SHARP TURN LEFT
1
SHARP TURN RIGHT

2
TURN LEFT
3
TURN RIGHT
4
MOVE LEFT
5
MOVE RIGHT
6
GO STRAIGHT
7
ERROR

ACTION
Left motor = reverse, RA1 = 0
Right motor = forward, RA0 = 1
Both motors = high speed.
(CCPR1L & CCPR2L)
Left motor = forward, RA1 = 1
Right motor = reverse, RA0 = 0
Both motors = high speed.
(CCPR1L & CCPR2L)
Both motors = forward, RA1 & RA0 = 1
Left motor = zero speed (CCPR2L)
Right motor = high speed (CCPR1L)
Both motors = forward, RA1 & RA0 = 1
Left motor = high speed (CCPR2L)
Right motor = zero speed (CCPR1L)
Both motors = forward, RA1 & RA0 = 1
Left motor = low speed (CCPR2L)
Right motor = high speed (CCPR1L)
Both motors = forward, RA1 & RA0 = 1
Left motor = high speed (CCPR2L)
Right motor = low speed (CCPR1L)
Both motors = forward, RA1 & RA0 = 1
Both motors = high speed (CCPR2L &
CCPR1L)
Return with 0XFF in W register

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

5. RESULT AND CONCLUSION

LINE FOLLOWING
ROBOT

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 shortcomings 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. Theres 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

6. BIBLIOGRAPHY

LINE FOLLOWING
ROBOT

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 beginners 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
lio following robot-*oldr tide

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

MICROCHIP

28/40-Pin 8-Bit CMOS FLASH


Microcontrollers
Devices Included in this Data
Sheet:

PIC16F873
PIC16F876
PIC16F874
PIC16F877

PDIP
MCLR/VPP
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4/SS
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7

Microcontroller Core Features:

High performance RISC


CPU
Only 35 single word

VDD
VSS
OSC1/CLKIN
OSC2/CLKOUT
RC0/T10SO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1

RB7/PGD
RB6/PGC
RB5
RB4
RB3/PGM
RB2
RB1
RB0/INT
VDD
VSS
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC7/RX/DT
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
RD3/PSP3
RD2/PSP2

instructions to learn
All single cycle
instructions except for
program branches which
are two cycle

Operating speed: DC - 20
MHz clock input
DC - 200 ns
instruction
cycle

Up to 8K x 14 words of
FLASH Program Memory,
Up to 368 x 8 bytes of
Data Memory (RAM)
Up to 256 x 8 bytes of EEPROM
Data Memory

Pinout compatible to the

PIC16C73B/74B/76/77

Interrupt capability (up to


14 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

In-Circuit Debugging via


two pins

Processor read/write
access to program
memory

Wide operating voltage


range: 2.0V to 5.5V

High Sink/Source Current:


25 mA
Commercial, Industrial
and Extended temperature
ranges
Low-power consumption:

- < 0.6 mAtypical @ 3V, 4 MHz


- 20 pA typical @ 3V, 32 kHz

- < 1 pA typical standby current

Pin Diagram

resolution is 200 ns
-PWM max. resolution is 10-bit

Peripheral Features:

Timer0: 8-bit timer/counter


with 8-bit prescaler
Timer1: 16-bit
timer/counter with
prescaler, can be
incremented during
SLEEP via external
crystal/clock
Timer2: 8-bit timer/counter
with 8-bit period register,
prescaler and postscaler
Two Capture, Compare,

PWM modules
-Capture is 16-bit, max.
resolution is 12.5 ns
-Compare is 16-bit, max.

10-bit multi-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
Parallel Slave Port (PSP)
8-bits wide, with external
RD, WR and CS controls
(40/44-pin only)
Brown-out detection
circuitry for Brown-out
Reset (BOR)

Pin Diagrams

MCLR/VPP
RA0/AN0"*
RA1/AN1
RA2/AN2/VREF--*'
RA3/AN3/VREF+ ^ ^
RA4/T0CKI-*
RA5/AN4/SS "
VSS
OSC1/CLKIN
-----------------------
OSC2/CLKOUT -------1
RC0/T1OSO/T1CKI

RC1/T1OSI/CCP2-*
RC2/CCP1
RC3/SCK/SCL-*

c 1
c 23
c4
c5
c6
c
c8
c9
c 10
c 11
c 12
c 13
c 14
c

PIC16F876/873

PDIP, SOIC
RB7/PGD
RB6/PGC
RB5
RB4
RB3/PGM
RB2
RB1
RB0/INT
VDD
VSS
RC7/RX/DT
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA

28
27

-----

26
25
24
23
22
21
20
19
18
17
16
15

oc oc > >

COCMtOA
zzzz<

PLCC

QO

00
Q.

5
< 5
< S
< SI
< a:
O O C Q CQQ- C Q C Q
O
Q1Q1Q1
CO
C M MS
f ZQ1Q1Q1Q1Z
CD
ID

ttttl till

nnnnnnnnnnn

VDD
VSS

RA4/T0CKI
RA5/AN4/SS
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7

OSC1/CLKIN
OSC2/CLKOUT
RC0/T1OSO/T1CK1
NC

C7 C
8C9
C 10 C
11 C
12 C
13 H
14 C
15 C
16 C

PIC16F877
PIC16F874

17m

'39
38
37
36
35
34
33
32
31
30
29

''
<
Q

C/5 CO

, _ (W \ / V N '

'w'

' O ^CN
Q.Q.Q.Q.XQ.

!00(/5(/5(/5(/500

imtimt

Q_
O
O
05

o.

COCOQ-Q-Q-Q-COO
ilS^ TCOCM^OCOCM

QFP

iQOQQQQOO

1 0 :0 :0 :0 :0 :0 :0 :0 :

O O

o: z

a:?o

a:

RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
VSS
VDD
RB0/INT
RB1
RB2
RB3/PGM

0.0

OJ-CMCO<O^O
D.Q.D.Q.QQQ2

05 05 05 o5 m^
o O
o _C/5
0. 0. 0. 0. ^ ^ <
TS CM
n
oT
Q Q Q Q C O o: o
CM
O O o: o: o: o: ^
o:
05
o

NC
RC0/T10SO/T1CKI
OSC2/CLKOUT
OSC1/CLKIN
VSS
VDD __________
RE2/AN7/CS
RE1/AN6/WR
RE0/AN5/RD
RA5/AN4/SS
RA4/T0CKI

o:

05

RB3/PGM
RB2
RB1
RB0/INT
VDD
VSS
RD7/PSP7
RD6/PSP6
RD5/PSP5
RD4/PSP4
RC7/RX/DT

PIC16F87X
1.0 DEVICE OVERVIEW
This document contains device specific information.
Additional information may be found in the PICmicro
Mid-Range Reference Manual (DS33023), which may be
obtained from your local Microchip Sales Representative
or downloaded from the Microchip website. The
Reference Manual should be considered a complementary document to this data sheet, and is highly recommended reading for a better understanding of the device
architecture and operation of the peripheral modules.

FIGURE 1-1:

There are four devices (PIC16F873, PIC16F874,


PIC16F876 and PIC16F877) covered by this data sheet.
The PIC16F876/873 devices come in 28-pin packages
and the PIC16F877/874 devices come in 40-pin
packages. The Parallel Slave Port is not implemented on
the 28-pin devices.
The following device block diagrams are sorted by pin
number; 28-pin for Figure 1-1 and 40-pin for Figure 1-2.
The 28-pin and 40-pin pinouts are listed in Table 1-1 and
Table 1-2, respectively.

PIC16F873 AND PIC16F876 BLOCK DIAGRAM

RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI_
RA5/AN4/SS

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD

RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT

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

Pin Name
OSC1/CLKIN
OSC2/CLKOUT

DI
P
Pin
9
10

SOIC
Pin#
9
10

I/O/P
Type
I
O

Buffer
Type
ST/CMOS(3)

Description
Oscillator crystal input/external clock source input.
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

I/P

ST

Master Clear (Reset) input or programming voltage input. This pin is an

RA0/AN0

I/O

TTL

RA0 can also be analog input0.

RA1/AN1

I/O

TTL

RA1 can also be analog input1.

RA2/AN2/VREF-

I/O

TTL

RA3/AN3/VREF+

I/O

TTL

I/O

ST

I/O

TTL

active low RESET to the device.


PORTA is a bi-directional I/O port.

RA2 can also be analog input2 or negative analog reference voltage.


RA3 can also be analog input3 or positive analog reference voltage.
RA4/T0CKI
RA5/SS/AN4

RA4 can also be the clock input to the Timer0 module. Output is
open drain type.
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

RB1

21

I/O

TTL/ST(1)
TTL

RB0 can also be the external interrupt pin.

RB2

22
23

22
23

I/O
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)

I/O

TTL/ST(2)

Interrupt-on-change pin or In-Circuit Debugger pin. Serial


programming clock.

RB7/PGD

28

28

11

11

Interrupt-on-change pin or In-Circuit Debugger pin. Serial


programming data.
PORTC is a bi-directional I/O port.

RC0/T1OSO/T1CKI

I/O

ST

I/O

ST

RC0 can also be the Timer1 oscillator output or Timer1 clock input.
RC1/T1OSI/CCP2
12

12

RC2/CCP1

13

13

I/O

ST

RC3/SCK/SCL

14

14

I/O

ST

RC4/SDI/SDA

15

15

I/O

ST

RC5/SDO

16

16

I/O

ST

RC6/TX/CK

17

17

I/O

ST

I/O

ST

18

18
P

RC1 can also be the Timer1 oscillator input or Capture2


input/Compare2 output/PWM2 output.
RC2 can also be the Capture1 input/Compare1 output/ PWM1
output.
RC3 can also be the synchronous serial clock input/output for both
SPI and I2C modes.

RC4 can also be the SPI Data In (SPI mode) or data I/O (I2C mode).
RC5 can also be the SPI Data Out (SPI mode).
RC6 can also be the USART Asynchronous Transmit or
Synchronous Clock.
RC7/RX/DT
VSS

8,
19
20

VDD
Legend: I = input O = output
= Not used

Note 1:
2:
3:

8, 19
20

TTL = TTL input

RC7 can also be the USART Asynchronous Receive or Synchronous


Data.
Ground reference for logic and I/O pins.
Positive supply for logic and I/O pins.

I/O = input/output
P = power
ST = Schmitt Trigger input

This buffer is a Schmitt

Trigger

input when configured as the external interrupt.

This buffer is a Schmitt

Trigger

input when used in Serial Programming mode.

This buffer is a Schmitt

Trigger

2001 Microchip Technology Inc.

input when configured in RC oscillator mode and

a CMOS input otherwise.

DS30292C-page 7

5.0 TIMER0 MODULE


The TimerO module timer/counter has the following features:

8-bit timer/counter

Readable and writable

8-bit software programmable prescaler

Internal or external clock select

Interrupt on overflow from FFh to OOh

Edge select for external clock

Figure 5-1 is a block diagram of the Timer0 module and


the prescaler shared with the WDT.
Additional information on the Timer0 module is available
in the PICmicro Mid-Range MCU Family Reference
Manual (DS33023).
Timer mode is selected by clearing bit T0CS
(OPTION_REG<5>). In Timer mode, the Timer0 module
will increment every instruction cycle (without prescaler).
If the TMR0 register is written, the increment is inhibited
for the following two instruction cycles. The user can work
around this by writing an adjusted value to the TMR0
register.

Counter mode is selected by setting bit T0CS


(OPTION_REG<5>). In Counter mode, Timer0 will
increment either on every rising, or falling edge of pin
RA4/T0CKI. The incrementing edge is determined by the
Timer0
Source
Edge
Select
bit,
T0SE
(OPTION_REG<4>). Clearing bit T0SE selects the rising
edge. Restrictions on the external clock input are
discussed in detail in Section 5.2.
The prescaler is mutually exclusively shared between the
Timer0 module and the Watchdog Timer. The prescaler is
not readable or writable. Section 5.3 details the operation
of the prescaler.

5.1 TimerO Interrupt


The TMR0 interrupt is generated when the TMR0 register
overflows from FFh to 00h. This overflow sets bit T0IF
(INTCON<2>). The interrupt can be masked by clearing
bit T0IE (INTCON<5>). Bit T0IF must be cleared in
software by the Timer0 module Interrupt Service Routine
before re-enabling this interrupt. The TMR0 interrupt
cannot awaken the processor from SLEEP, since the
timer is shut-off during SLEEP.

PIC16F87X
REGISTER 5-1:

5.2 Using TimerO with an External Clock


When no prescaler is used, the external clock input is the
same as the prescaler output. The synchronization of
T0CKI with the internal phase clocks is accomplished by
sampling the prescaler output on the Q2 and Q4 cycles of
the internal phase clocks. Therefore, it is necessary for
T0CKI to be high for at least 2Tosc (and a small RC delay
of 20 ns) and low for at least 2Tosc (and a small RC delay
of 20 ns). Refer to the electrical specification of the
desired device.

5.3 Prescaler

Timer0 module means that there is no prescaler for the


Watchdog Timer, and vice-versa. This prescaler is not
readable or writable (see Figure 5-1).
The PSA and PS2:PS0 bits (OPTION_REG<3:0>)
determine the prescaler assignment and prescale ratio.
When assigned to the Timer0 module, all instructions
writing to the TMR0 register (e.g. CLRF 1, MOVWF 1, BSF
i,x....etc.) will clear the prescaler. When assigned to WDT,
a CLRWDT instruction will clear the prescaler along with the
Watchdog Timer. The prescaler is not readable or
writable.

Note:

There is only one prescaler available, which is mutually


exclusively shared between the Timer0 module and the
Watchdog Timer. A prescaler assignment for the

Writing to TMR0, when the prescaler is


assigned to Timer0, will clear the prescaler
count, but will not change the prescaler
assignment.

OPTION REG REGISTER


R/W-1
RBPU
bit 7
bit 7
bit 6
bit 5
0
1
0
1

R/W-1
INTED
G

R/W1
T0SE

R/W-1
PSA

R/W1
PS2

R/W1
PS1

R/W1
PS0
bit 0

RBPU
INTEDG
TOCS: TMR0 Clock Source Select bit

1 = Transition on T0CKI pin


= Internal instruction cycle clock (CLKOUT)
bit 4
T0SE: TMR0 Source Edge Select bit
= Increment on high-to-low transition on T0CKI pin
= Increment on low-to-high transition on T0CKI pin
bit 3
PSA: Prescaler Assignment bit
= 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 :
1 12
256
8

Legend:
R = Readable bit
- n = Value at POR

Note:

R/W1
T0CS

W = Writable bit
'1' = Bit is set

U = Unimplemented bit,

read as '0'

'0' = Bit is cleared

= Bit is unknown

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.

2001 Microchip Technology Inc.

DS30292C-page 9

PIC16F87X
Register 7-1 shows the Timer2 control register.

7.0 TIMER2 MODULE

Additional information on timer modules is available in the


PICmicro Mid-Range MCU Family Reference Manual
(DS33023).

Timer2 is an 8-bit timer with a prescaler and a postscaler.


It can be used as the PWM time-base for the PWM mode
of the CCP module(s). The TMR2 register is readable and
writable, and is cleared on any device RESET.

FIGURE 7-1:
DIAGRAM

The input clock (FOSC/4) has a prescale option of 1:1, 1:4,


or 1:16, selected by control bits T2CKPS1:T2CKPS0
(T2CON<1:0>).

TIMER2 BLOCK

The Timer2 module has an 8-bit period register, PR2.


Timer2 increments from 00h until it matches PR2 and
then resets to 00h on the next increment cycle. PR2 is a
readable and writable register. The PR2 register is
initialized to FFh upon RESET.
The match output of TMR2 goes through a 4-bit
postscaler (which gives a 1:1 to 1:16 scaling inclusive) to
generate a TMR2 interrupt (latched in flag bit TMR2IF,
(PIR1<1 >)).
Timer2 can be shut-off by clearing control bit TMR2ON
(T2CON<2>), to minimize power consumption.

REGISTER 7-1:
T2CON:
REGISTER (ADDRESS 12h)
U-0

bit 7
0

bit 7
0
1

TIMER2
R/W-0
TOUTPS
3

CONTROL
R/W-0
TOUTPS
2

R/W-0
TOUTPS
1

R/W-0
TOUTPS
0

R/W-0
TMR2ON

R/W-0
T2CKPS
1

R/W-0
T2CKPS
0
bit

Unimplemented: Read as '0'


bit 6-3
TOUTPS3:TOUTPS0: Timer2 Output Postscale Select bits
= 1:1 Postscale
= 1:2 Postscale 0 0 1 0 = 1:3 Postscale

1111 = 1:16 Postscale bit

TMR2ON: Timer2 On bit


1 = Timer2 is on 0 =

0
1

Timer2 is off
bit 1-0 T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
= Prescaler is 1
= Prescaler is 4 1x = Prescaler is 16
Legend:
R = Readable bit
- n = Value at POR

W = Writable bit
'1' = Bit is set

7.1 Timer2 Prescaler and Postscaler


The prescaler and postscaler counters are cleared when

DS30292C-page 10

U = Unimplemented bit,

read as '0'

'0' = Bit is cleared

= Bit is unknown

any of the following occurs:

a write to the TMR2 register

2001 Microchip Technology Inc.

PIC16F87X

a write to the T2CON register

any device RESET (POR, MCLR Reset, WDT


Reset, or BOR)

7.2 Output of TMR2


The output of TMR2 (before the postscaler) is fed to the
SSP module, which optionally uses it to generate shift
clock.

TMR2 is not cleared when T2CON is written.

TABLE 7-1:
Address
0Bh,8Bh,
10Bh,18B
h
0Ch

REGISTERS ASSOCIATED WITH TIMER2 AS A TIMER/COUNTER


Nam
e

Bit 7

INTCON

GIE

Bit 6

PEIE

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Value on:
POR,
BOR

Value
on
all
other
RESETS

T0IE

INTE

RBIE

T0IF

INTF

RBIF

0000 000x

0000 000u

CCP1IF

TMR2IF

TMR1IF

0000 0000

0000 0000

CCP1IE

TMR2IE

TMR1IE

0000 0000

0000 0000

(1)

ADIF

RCIF

TXIF

ADIE

RCIE

TXIE

SSPI
F
SSPI
E

PIR1

PSPIF

8Ch

PIE1

PSPIE(1)

11h
12h

TMR2
T2CON

Timer2 Modules Register

| TOUTPS3 | TOUTPS2 | TOUTPS1 | TOUTPS0 | TMR2ON | T2CKPS1 | T2CKPS0

0000 0000
-000 0000

0000 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.

8.0 CAPTURE/COMPARE/PWM
MODULES
Each Capture/Compare/PWM (CCP) module contains a
16-bit register which can operate as a:

16-bit Capture register

16-bit Compare register

PWM Master/Slave Duty Cycle register

Both the CCP1 and CCP2 modules are identical in


operation, with the exception being the operation of the
special event trigger. Table 8-1 and Table 8-2 show the
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
same as CCP1, except where noted.
CCP1 Module:
Capture/Compare/PWM Register1 (CCPR1) is comprised
of two 8-bit registers: CCPR1L (low byte) and CCPR1H
(high byte). The CCP1CON register controls the operation
of CCP1. The special event trigger is generated by a
compare match and will reset Timer1.

2001 Microchip Technology Inc.

CCP2 Module:
Capture/Compare/PWM Register2 (CCPR2) is comprised
of two 8-bit registers: CCPR2L (low byte) and CCPR2H
(high byte). The CCP2CON register controls the operation
of CCP2. The special event trigger is generated by a
compare match and will reset Timer1 and start an A/D
conversion (if the A/D module is enabled).
Additional information on CCP modules is available in the
PICmicro Mid-Range MCU Family Reference Manual
(DS33023) and in application note AN594, Using the
CCP Modules (DS00594).

TABLE 8-1:

CCP MODE - TIMER


RESOURCES REQUIRED

CCP Mode

Timer Resource

Capture
Compare
PWM

Timer1
Timer1
Timer2

DS30292C-page 11

PIC16F87X
TABLE 8-2:
CCPx
Mode

INTERACTION OF TWO CCP MODULES


CCPy
Mode

Interaction

Capture

Same TMR1 time-base


The compare should be configured for the special event trigger, which clears TMR1

Compar
e
PWM

Compar
e
Compar
e
PWM

PWM

Capture

None

PWM

Compar
e

None

Capture
Capture

DS30292C-page 12

The compare(s) should be configured for the special event trigger, which clears TMR1
The PWMs will have the same frequency and update rate (TMR2 interrupt)

2001 Microchip Technology Inc.

PIC16F87X
REGISTER 8-1:

CCP1CON REGISTER/CCP2CON REGISTER (ADDRESS: 17h/1Dh)


U-0

U-0

bit 7
0

bit 7-6 Unimplemented: Read as '0' bit 5-4

R/W-0
CCPx
X

R/W-0
CCPx
Y

R/W-0
CCPxM3

R/W0
CCPxM
2

R/W-0

R/W-0

CCPxM1

CCPxM0
bit

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)
Capture mode, every falling edge
Capture mode, every rising edge
Capture mode, every 4th rising edge
Capture mode, every 16th rising edge
= Compare mode, set output on match (CCPxIF bit is set)
= Compare mode, clear output on match (CCPxIF bit is set)
= 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 =
100 =
101 =
110 =
111 =
1000
1001
1010

Legend:
R = Readable bit
- n = Value at POR

2001 Microchip Technology Inc.

W = Writable bit
'1' = Bit is set

U = Unimplemented bit,

read as '0'

'0' = Bit is cleared

= Bit is unknown

DS30292C-page 13

8.3.1 PWM PERIOD

8.3 PWM Mode (PWM)


In Pulse Width Modulation mode, the CCPx pin produces
up to a 10-bit resolution PWM output. Since the CCP1 pin
is multiplexed with the PORTC data latch, the TRISC<2>
bit must be cleared to make the CCP1 pin an output.

Note:

Clearing the CCP1CON register will force


the CCP1 PWM output latch to the default
low level. This is not the PORTC I/O data
latch.

Figure 8-3 shows a simplified block diagram of the CCP


module in PWM mode.

The PWM period is specified by writing to the PR2 register. The PWM period can be calculated using the following formula:

PWM period = [(PR2) + 1] 4 TOSC


(TMR2 prescale value)
PWM frequency is defined as 1 / [PWM period].
When TMR2 is equal to PR2, the following three events
occur on the next increment cycle:

TMR2 is cleared

The CCP1 pin is set (exception: if PWM


duty cycle = 0%, the CCP1 pin will not
be set)

The PWM duty cycle is latched from CCPR1L


into CCPR1H

For a step-by-step procedure on how to set up the CCP


module for PWM operation, see Section 8.3.3.

FIGURE 8-3:
BLOCK
DIAGRAM

SIMPLIFIED PWM
Note:

Note 1: The 8-bit timer is concatenated with 2-bit internal Q clock, or


2 bits of the prescaler, to create 10-bit time- base.

The Timer2 postscaler (see Section 7.1) is


not used in the determination of the PWM
frequency. The postscaler could be used to
have a servo update rate at a different
frequency than the PWM output.

8.3.2 PWM DUTY CYCLE


The PWM duty cycle is specified by writing to the
CCPR1L register and to the CCP1CON<5:4> bits. Up to
10-bit resolution is available. The CCPR1L contains the
eight MSbs and the CCP1CON<5:4> contains the two
LSbs.
This
10-bit
value
is
represented
by
CCPR1L:CCP1CON<5:4>. The following equation is used
to calculate the PWM duty cycle in time:

A PWM output (Figure 8-4) has a time-base (period) and


a time that the output stays high (duty cycle). The
frequency of the PWM is the inverse of the period
(1/period).

PWM duty cycle =(CCPR1L:CCP1CON<5:4>)


TOSC (TMR2 prescale value)
CCPR1L and CCP1CON<5:4> can be written to at any
time, but the duty cycle value is not latched into CCPR1H
until after a match between PR2 and TMR2 occurs (i.e.,
the period is complete). In PWM mode, CCPR1H is a
read-only register.
The CCPR1H register and a 2-bit internal latch are used
to double buffer the PWM duty cycle. This double
buffering is essential for glitch-free PWM operation.

FIGURE 8-4:

PWM OUTPUT

Period

H*------------------------------

r*-------------------;
Duty Cycle

When the CCPR1H and 2-bit latch match TMR2, concatenated with an internal 2-bit Q clock, or 2 bits of the
TMR2 prescaler, the CCP1 pin is cleared.
The maximum PWM resolution (bits) for a given PWM
frequency is given by the formula:

Resolution

Note:
TMR2 = PR2

bits

log(2)

TMR2 = PR2
TMR2 = Duty Cycle

FOSC log
FPWM

If the PWM duty cycle value is longer than


the PWM period, the CCP1 pin will not be
cleared.

PIC16F87X
8.3.3 SETUP FOR PWM OPERATION

2.

The following steps should be taken when configuring the


CCP module for PWM operation:
1.

3.

Set the PWM period by writing to the PR2


register.

4.
5.

TABLE 8-3:

Set the PWM duty cycle by writing to the


CCPR1L register and CCP1CON<5:4> bits.
Make the CCP1 pin an output by clearing the
TRISC<2> bit.
Set the TMR2 prescale value and enable Timer2
by writing to T2CON.
Configure the CCP1 module for PWM operation.

EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 20 MHz

PWM Frequency
Timer Prescaler (1, 4, 16)
PR2 Value
Maximum Resolution (bits)

2001 Microchip Technology Inc.

1.22
kHz

4.88 kHz

16
0xFFh

4
0xFFh

10

10

19.53
kHz

78.12kH
z

156.3
kHz

208.3 kHz

1
0xFFh

1
0x3Fh

1
0x1Fh

1
0x17h

10

5.5

DS30292C-page 15

PIC16F87X
TABLE 8-4:
Address

REGISTERS ASSOCIATED WITH CAPTURE, COMPARE, AND TIMER1


Name

INTCON

0Bh,8Bh,

Bit
7

Bit
6

Bit 5

GIE

PEI
E

T0IE

PSPIF(1)

ADI
F

RCIF

ADI
E

RCIE

Bit 4
INTE

Bit 3
RBIE

Bit
2

Bit
1

Bit
0

Value on:
POR,
BOR

Value on
all other
RESETS

T0IF

INTF

RBIF

0000 000x

0000 000u

10Bh, 18Bh
0Ch

PIR1

0Dh

PIR2

8Ch

PIE1

PSPIE(1)

8Dh

PIE2

87h

TRISC

PORTC Data Direction Register

0Eh

TMR1L

0Fh

TMR1H

TXIF

0000 0000

0000 0000

CCP2IF

------------ - - 0

------------ - - 0

TMR1IE

0000 0000

0000 0000

CCP2IE

------------ - - 0

------------ - - 0

1111 1111

1111 1111

Holding Register for the Least Significant Byte of the 16-bit TMR1 Register

xxxx xxxx

uuuu uuuu

Holding Register for the Most Significant Byte of the 16-bit TMR1 Register

xxxx xxxx

uuuu uuuu

--00 0000

- - u u uuuu

xxxx xxxx

uuuu uuuu

T1CKPS
0

T1CON
CCPR1L

Capture/Compare/PWM Register! (LSB)

16h

CCPR1H

Capture/Compare/PWM Register1 (MSB)

17h
1Bh

CCP1CO
N
CCPR2L

CCP1
Y
Capture/Compare/PWM Register2 (LSB)

1Ch

CCPR2H

Capture/Compare/PWM Register2 (MSB)

T1CKPS
1

15h

1Dh

TMR1IF

TMR2IE

CCP1X

TMR2IF

TXIE

10h

Legend:

CCP1IF

CCP1IE

SSPIF

SSPIE

T1OSCE
N

TMR1C
S

T1SYNC

CCP1M
2

CCP1M3

CCP1M1

TMR1O
N

CCP1M0

CCP2CO
CCP2
CCP2M

CCP2X
CCP2M3
CCP2M1
CCP2M0
N
Y
2
x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by Capture and Timer1.

xxxx xxxx

uuuu uuuu

--00 0000

--00 0000

xxxx xxxx

uuuu uuuu

xxxx xxxx

uuuu uuuu

--00 0000

--00 0000

Note 1: The PSP is not implemented on the PIC16F873/876; always maintain these bits clear.

TABLE 13-2:

PIC16F87X INSTRUCTION SET

Mnemonic,
Operands

ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ
INCF
INCFSZ
IORWF
MOVF
MOVWF
NOP
RLF
RRF
SUBWF
SWAPF
XORWF

f, d
f, d
f
f, d
f, d
f, d
f, d
f, d
f, d
f, d
f
f, d
f, d
f, d
f, d
f, d

Description

Cycles

Add W and f
AND W with f
Clear f
Clear W
Complement f
Decrement f
Decrement f, Skip if 0
Increment f
Increment f, Skip if 0
Inclusive OR W with f
Move f
Move W to f
No Operation
Rotate Left f through Carry
Rotate Right f through Carry
Subtract W from f
Swap nibbles in f
Exclusive OR W with f

1
1
1
1
1
1
1(2
1)
1(2
1)
1
1
1
1
1
1
1
1

14-Bit Opcode

MS
b
BYTE-ORIENTED FILE REGISTER OPERATIONS
0
0
0
0
0
0
0
0
0
0
0
00
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
00
0
0
0

LS
b

0111

dfff

ffff

0101

dfff

ffff

0001
0001

lfff
0xxx

ffff
xxxx

1001
0011

dfff
dfff

ffff
ffff

1011

dfff

ffff

1010

dfff

ffff

1111

dfff

ffff

0100

dfff

ffff

1000

dfff

ffff

0000

lfff
0xx0
dfff

ffff

dfff

ffff

0010

dfff

ffff

1110
0110

dfff
dfff

ffff
ffff

0 0bb

bfff

ffff

01bb

bfff

ffff

0000
1101
1100

0000
ffff

Status
Affected

Not
es

C,DC,
ZZ

1,2
1,2
2

Z
Z
Z
Z
Z
Z
Z

C
C
C,DC,
Z
Z

1,2
1,2
1,2,
31,2
1,2,
31,2
1,2

1,2
1,2
1,2
1,2
1,2

BIT-ORIENTED FILE REGISTER OPERATIONS


BCF
BSF

f, b
f, b

DS30292C-page 136

Bit Clear f
Bit Set f

1
1

0
1
0
1

1,2
1,2

2001 Microchip Technology Inc.

BTFSC
BTFSS

f, b
f, b

ADDLW
ANDLW
CALL
CLRWDT
GOTO
IORLW
MOVLW
RETFIE
RETLW
RETURN
SLEEP
SUBLW
XORLW

k
k
k
k
k
k
k
k
k

0
1
1
0
(2)
1
1
(2)
LITERAL AND CONTROL OPERATIONS
1
Add literal and W
1
1
1
AND literal with W
1
1
1
Call subroutine
2
0
0
Clear Watchdog Timer
1
0
1
Go to address
2
0
1
Inclusive OR literal with W
1
1
1
Move literal to W
1
1
0
Return from interrupt
2
0
1
Return with literal in W
2
1
0
Return from Subroutine
2
0
0
Go into standby mode
1
0
1
Subtract W from literal
1
1
1
Exclusive OR literal with W
1
1

Bit Test f, Skip if Clear


Bit Test f, Skip if Set

10bb
11bb

bfff
bfff

ffff
ffff

111x

kkkk

kkkk

1001

kkkk

kkkk

0kkk

kkkk

kkkk

0000

0110

0100

1kkk

kkkk
kkkk

kkkk
kkkk

0 0xx

kkkk

kkkk

0000

0000

1001

01xx

kkkk

kkkk

0000

0000

1000

0000

0110

0011

110x

kkkk
kkkk

kkkk
kkkk

1000

1010

3
3
C,DC,
ZZ
TO,P
D
Z

TO,P
D
C,DC,
ZZ

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).

/=T SGS-THOMSON
^7/. M(5[sMgH[gCT[Rl(o)M(5gi

L293D
L293DD

PUSH-PULL FOUR CHANNEL DRIVER WITH DIODES


BLOCK DIAGRAM
600mA OUTPUT CURRENT CAPABILITY
PER CHANNEL
Us
OUT 1 0UT3
Uss
1.2A PEAK OUTPUT CURRENT (non
repetitive) PER CHANNEL
ENABLE FACILITY
OVERTEMPERATURE PROTECTION
LOGICAL 0INPNPVOLTAGEUP TO 1.5
V (HIGH NOISE IMMUNITY)
INTERNAL CLAMP DIODES

1/7

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

ORDERING NUMBERS:
L293DD

DESCRIPTION
The Device is a monolithic integrated high voltage,
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 transistors.
To simplify use as two bridges each pair of channels is equipped with an enable input. A separate
supply input is provided for the logic, allowing operation at a lower voltage and internal clamp diodes are included.
This device is suitable for use in switching applications at frequencies up to 5 kHz.

Powerdip

L293D

The L293D is assembled in a 16 lead plastic


packaage which has 4 center pins connected together and used for heatsinking
The L293DD is assembled in a 20 lead surface
mount which has 8 center pins connected together and used for heatsinking.

June 1996

L293D - L293DD
ABSOLUTE MAXIMUM RATINGS
Symbol
Supply Voltage

36

Logic Supply Voltage

36

Vi

Input Voltage

Enable Voltage

Io

Peak Output Current (100 |is non repetitive)

tot

Total Power Dissipation at Tpins = 90 C

stg, Tj

Storage and Junction Temperature

OUTPUT 1 d

2
3

GND d

GND d

GND d
GND d
OUTPUT 2 d
INPUT 2 d
Us d
H32L293D1-02

1.2

-40 to 150

16

ENABLE 1 (

INPUT 1 d

Uni
t

VS

ENABLE 1 d

Value

VSS
Ven

Parameter

6
7
8
9
18

-----------

20
19
18
17
16
15
14
13
12
11

ID
ID
ID
ID
ID
ID
ID
ID
ID
ID

Uss

INPUT 1

16

PIN CONNECTIONS (Top view) ~\J~

OUTPUT 1

14

INPUT 4
OUTPUT 4
GND
GND
GND

GNO

13

GNO

12

GND
OUTPUT 3
INPUT 3
ENABLE 2

OUTPUT 2
INPUT 2

11
10

SS

INPUT 4 OUTPUT 4 GND

GNO
OUTPUT 3 INPUT 3 ENABLE 2
S.6574

SO(12+4+4)

Powerdip(12+2+2)

THERMAL DATA
Symbol

Decription

SO

Thermal Resistance Junction-pins

max.

14

Thermal Resistance junction-ambient


Thermal Resistance Junction-case

max.
max.

80
14

50 (*)
-

th j-pins

th j-amb
R
th j-case

(*) With 6sq. cm on board heatsink.

2/7

DIP

nz7 SGS-THOMSON
t8ilDCR@lllLiCn^KIDCS

Uni

t
C/
W
C/
W

AI/IBIKA TRADING

CO.,

Annexe to Ambika No. 100, Shankara Park.


Bangalore - 560 004
Telefax 6613337,6602160
e-mail: ambikaramesh@hotmail.com

Gear Series CS33 & CS28


Spur Reduction Gearhead
Design

Gear series CS33 & CS28 contains Brass gears and steel pinions to
ensure longer life and better wear and tear properties. The gears are fixed
on hardened steel spindles polished to a mirror finish.These spindles
rotate between bronze plates which ensures silent running. The output
shaft rotates in a sintered bushing. The whole assembly is covered with a
plastic ring. All the bearings are permanently lubricated and therefore
requires no maintenance. The motor is screwed to the gear box from
inside. Any small standard motor can be used in combination with the
gear box. However the most popular ones are mentioned in the table
below.

Voltag
e

DC3
DC3
3
DC3
3
DC3
3
DC2
5
DC2
5

6
6

'
Direction

Spe
ed
240
240
0
240
0
750
0
220
0
850
0

CWorAC
1
Reversibl
CWorAC
W
Reversibl
e
Reversibl
e
Reversibl
e

12
12
2.5
6

Torque
30gm-cm
30 gm-cm
50 gm-cm
25 gm-cm
3.2 gm-cm
4.0 gm-cm

Motor Data

Standard Data
kg-cm

GearTorque

Mot
or

Combination motor
Mounting

/
Standard small DC motor Dia 33 availiable in 6 V, 9 V or 12 V DC
any position

Weight

gm

Axial thrust

150

kg

2 . .................................................................: "

Radial torque

kg

Lateral torque

kg-cm

Output shafts
Ambient temperature operation

0
*C

4.00,4.76,5.00,6.00,6.35 & 7.00 (others on request)


-15...+55

Transmission ratios
1155

410

385

205

35

14

11

185

155

120

100

62

other transmission ratios availiable on request

Dimensional Drawing
On 17 PCD

'T

s5'

MOTOR DC 33

GEAR HEAD CS33

oS

25

sia

28 1

52

42

LM339, LM239, LM2901,


LM2901V, NCV2901, MC3302
Single Supply Quad
Comparators

http://onsemi.com

These comparators are designed for use in level detection, low-level sensing and memory applications in
consumer, automotive, and industrial electronic applications.
Features

Pb-Free Packages are Available*

Single or Split Supply Operation


Low Input Bias Current: 25 nA (Typ)
Low Input Offset Current: 5.0 nA (Typ)
Low Input Offset Voltage
Input Common Mode Voltage Range to GND
Low Output Saturation Voltage: 130 mV (Typ) @ 4.0 mA
TTL and CMOS Compatible
ESD Clamps on the Inputs Increase Reliability without Affecting Device Operation

SOIC-14
D SUFFIX
CASE 751A

PDIP-14 N,
P SUFFIX
CASE 646
1

TSSOP-14
DTB
SUFFIX
CASE 948G

PIN CONNECTIONS
Output 2
Output 1

CC

- Input 1
+

In
put
1
- Input 2
(Top View)
+

ORDERING INFORMATION

In

See detailed ordering and shipping information in the package dimensions


section on page 7 of this data sheet.

put
2
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

July, 2004 - Rev. 13

Publication Order Number:

LM339/D

74HC/HCT27

Triple 3-input NOR gate

SYMBOL

NAME AND FUNCTION

1,3, 9

1A to 3A

data inputs

2, 4, 10

1B to 3B

data inputs

13, 5, 11
7

1C to 3C
GND

data inputs
ground (0 V)

12, 6, 8
14

1Y to 3Y

data outputs

oo<

PIN DESCRIPTION
PIN NO.

positive supply voltage

Fig.2 Logic symbol.

Fig.4 Functional
diagram.

FUNCTION TABLE
INPUTS
n
n
n
A
B
C

OUT
PUT
nY

L
X

L
X

L
H

H
L

X
H

H
X

X
X

L
L

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

M
M
74
H
C1
48
83
Li
ne
Pri
ori
ty
En
co
de
r

October 1987 Revised


September 2001

MM74HC148
8-3 Line Priority Encoder
General Description
The MM74HC148 priority encoder utilizes advanced silicon-gate
CMOS technology. It has the high noise immunity 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 circuitry (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 discharge by
internal diode clamps to VCC and ground.

Features

Typical propagation delay: 13


ns
Wide supply voltage range:
2V-6V

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
E
I
H
L

0 1 2

Outputs
4

X X X X X X X X
H H H H H H H H

A
2
H
H

A
1
H
H

A
0
H
H

G
S
H
H

E
O
H
L

X X

X X

X X

H H

X X

H H H

X X

H H H H

X X

H H H H H

X L

H H H H H H

H H H H H H H

H = HIGH L = LOW X = Irrelevant

2001 Fairchild Semiconductor Corporation DS009390

www.fairchildsemi.com

74HC04; 74HCT04

>

Hex inverter

1Y

ID

2A

2Y

3A

3Y
6

Top view

1A

C
D

GND(1)

12

6Y

11

5A

10

5Y

RR
GND 4Y

6A

4A

2A

3A

4A

11

5A

13

6A

MBL760

>
>
>
>
>
>

1Y

10

12

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.


Fig.5 Logic diagram (one inverter).

Fig.4 IEC logic symbol.


eliminating the distribution problems associated with single point

regulation. The voltages available allow these regulators to be


used in logic systems, instrumentation, HiFi, and other solid
8

10

12
MNA343

LM78XX
Series Voltage Regulators
General Description
The LM78XX series of three terminal regulators is available with
several fixed output voltages making them useful in a wide
range of applications. One of these is local on card regulation,

MNA34
1

state electronic equipment. Although designed primarily as fixed


voltage regulators these devices can be used with external
components to obtain adjustable voltages and currents.
The LM78XX series is available in an aluminum TO-3 pack age
which will allow over 1.0A load current if adequate heat 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 pation. If
internal power dissipation becomes too high for the heat sinking
provided, the thermal shutdown circuit takes over preventing the
IC from overheating.
Considerable effort was expanded to make the LM78XX series
of regulators easy to use and minimize the number of external
components. It is not necessary to bypass the out

L
M
78
X
X
S
er
ie
s
V
ol
ta
g
e

May 2000 put, although this does improve transient response.


Input bypassing is needed only if the regulator is located far
from the filter capacitor of the power supply.
For output voltage other than 5V, 12V and 15V the LM117 series
provides an output voltage range from 1.2V to 57V.

Features

Output current in excess of 1A


LM7805C
5V
LM7812C

12V

LM7815C

15V

Internal thermal overload protection


No external components required
Output transistor safe area protection
Internal short circuit current limit
Available in the aluminum TO-3 package

Voltage Range

Connection Diagrams
Metal Can Package
TO-3 (K)
Aluminum

DS007746-2

Bottom View
Order Number LM7805CK,
LM7812CK or LM7815CK
See NS Package Number KC02A

Plastic Package
TO-220 (T)
DS007746-3

Top View
Order Number LM7805CT,
LM7812CT or LM7815CT
See NS Package Number T03B

2000 National Semiconductor Corporation DS007746

www.national.com

Vous aimerez peut-être aussi