LFR Report

Download as pdf or txt
Download as pdf or txt
You are on page 1of 91

Visvesvaraya Technological University, Belgaum

Project Work II (EC8P2) Report on

LINE FOLLOWING ROBOT


Submitted in partial fulfillment of the requirement of VIII semester ELECTRONICS & COMMUNICATION Engineering by AMITHASH E. PRASAD (1GA01EC002)

Under the guidance of

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

Department of Electronics and Communication Engineering Global Academy of Technology, Bangalore-98 2005

GLOBAL ACADEMY OF TECHNOLOGY


(National Education Foundation)

Rajarajeshwari Nagar, Ideal Home Township, Off. Mysore Road, Bangalore 560098. DEPARTMENT OF ELECTRONICS AND COMMUNICATION

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

Signature of the Guide (B. N. Manjunatha Reddy)

Signature of the HOD (Prof.N. Narasimha Swamy)

Signature of the Principal (Dr.T.R.Seetharam)

External Viva Name of the Examiners 1. Signature with date

2.

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

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

I am highly indebted to N.Narasimha Swamy, H.O.D, Electronics & Communication Department, GAT for his assistance and constant source of encouragement.

I wish to express my profound and deep sense of gratitude to H. S. Manjunatha Reddy, Assistant professor, Department of Electronics and Communication, Project Co-ordinator, for sparing his valuable time to extend help in every step of my project work.

I whole heartedly express my thanks to, B. N. Manjunatha Reddy, Assistant Professor, Electronics & Communication Department, GAT for sparing time to go through every tiny detail and give his valuable suggestions to make this project and report a success.

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

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 2.2 2.3 2.4 2.5 2.6 2.7 2.8 INTRODUCTION.... PROBLEM DEFINITION..... OBJECTIVES OF THE STUDY. SCOPE OF STUDY. REVIEW OF LITERATURE.. APPLICATIONS......... LIMITATIONS.... METHODOLOGY... 03 04 04 05 05 06 06 07

3. THEORY.... 09 3.1 3.2 3.3 3.4 3.5 3.6 3.7 THE DIFFRENTIAL STEERING SYSTEM.. D.C. MOTORS H-BRIDGE MOTOR CONTROL... INTELLIGENCE. THE PIC 16F873 MICROCONTROLLER. PWM SPEED CONTROL... THE PICMICRO CCP MODULES. 09 10 11 14 16 18 18 22 22

4. DESIGN AND IMPLEMENTATION. 4.1 4.2 4.3 4.4 4.5 SCHEMATIC....

PROCESS EXPLANATION..... 35 FLOW CHART..... CODE.... CODE EXPLANATION... 37 40 51 55

5. RESULT & CONCLUSION..

6. BIBLIOGRAPHY.. 56 7. APPENDIX 58

LINE FOLLOWING ROBOT

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

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

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

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

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

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

LINE FOLLOWING ROBOT

Clock 4 MHz

Main Power Supply

Motor Power Supply

PIC 16F873 Microcontroller

HEX Inverter

H - Bridge DC Motor Control

Left Motor Right Motor

Priority Encoder Analog Comparators NOR Gate

Threshold Voltage

Sensor Array

Figure 1.1: Block Diagram of the Line Following Robot

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

LINE FOLLOWING ROBOT

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

In the 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 3
Department of Electronics & Communication, GAT, Bangalore - 98

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

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

Programming intelligence into a robot (or computer) is a difficult task and one that has not been very successful to date even when supercomputers are used. This is not to say that robots cannot be programmed to perform very useful, detailed, and difficult tasks; they are. Some tasks are impossible for humans to perform quickly and productively. For instance, imagine trying to solder 28 filament wires to a 1/4in square sliver of silicon in 2 s to make an integrated circuit chip. 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.

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

LINE FOLLOWING ROBOT Looking through the library on books on robotics, there was one thing I noticed. There are no books which deal with understandable basics, or implementation. After a lot of search, I found PIC Robotics, A 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. 6
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT Use of IR even though solves a lot of problems pertaining to interference, makes it hard to debug a faulty sensor. Lack of speed control makes the robot unstable at times.

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

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

The L293D chip is used as it was a much better option than forming an H-Bridge out of discrete transistors, which would make the design unstable and prone to risk of damage. The PIC microcontroller was used as it is the only device I have a full practical knowledge about, and most of all a RISC processor which are better suited for 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.

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

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

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

The project was entirely (other than PCB) designed, created, soldered, tested and coded by me. For which 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

where respectively,

give the displacement (distance traveled) for the left and right wheels is the turn radius for the inner (left) wheel, is the distance between is the angle of the turn 9
Department of Electronics & Communication, GAT, Bangalore - 98

wheels (from center-to-center along the length of the axle), and

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

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

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

If the right wheel is moving at a velocity of VR and the left wheel at a velocity of VL, then the following equation can be derived. Where a positive implies counter-clockwise rotation; the above equation clearly shows that the angle of the turn can be increased by either, Increasing the difference in the 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.

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

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

Example specifications of the motors used are given below: Characteristic Operating Voltage: Operating Current: Speed: Torque: Value 6V to 12V 2A Max. (Stall) 2400 rpm 30 gm-cm

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

3.3. H-BRIDGE MOTOR CONTROL


DC motors are generally bi-directional motors. That is, their direction of rotation can be changed by just reversing the polarity. But once the motors are fixed, control becomes tricky. This is done using the H-Bridge. The figure is given below. A 1 0 0/1 0 1 0/1 B 0 1 1/0 C D 1 0 1/0 ACTION CLOCKWISE COUNTER-CLOCKWISE BRAKE FORBIDDEN 11
Department of Electronics & Communication, GAT, Bangalore - 98

ANY OTHER STATE

LINE FOLLOWING ROBOT

Figure 3.2: The H-Bridge Using Relays.

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

Figure 3.3: Clockwise rotation

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

Figure 3.4: Counter-Clockwise rotation 12


Department of Electronics & Communication, GAT, Bangalore - 98

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

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

Figure 3.5: H-Bridge using transistors.

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

Figure 3.6: Enhanced H-Bridge 13


Department of Electronics & Communication, GAT, Bangalore - 98

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

3.4. INTELLIGENCE
There are two schools of thought concerning the creation of intelligence in artificial systems. The first approach programs an expert system (top down); the second is a neural or behavior based system (bottom up). The expert system uses rules to guide the robot in task performance. Behavior based programs create an artificial behavior in the robot that causes it to reflectively (automatically) perform the task required. Behaviors may be programmed (software) or may be hardwired into the robot. Behavior based intelligence 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.

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

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

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

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

Neural (behavior based) systems are not programmed and are more adaptive, as shown in the previous example. But is a neural system suitable for this task of rock identification? Probably not! There are instances in which expert systems are the method of choice. One 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) 16
Department of Electronics & Communication, GAT, Bangalore - 98

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

Peripheral Features: Port A: 6bit bidirectional port Port B & C: 8bit bidirectional port Timer0: 8-bit timer/counter with 8-bit pre-scalar Timer1: 16-bit timer/counter with pre-scalar, can be incremented during SLEEP via external crystal/clock Timer2: 8-bit timer/counter with 8-bit period register, pre-scalar and 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)

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

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

3.6. PWM SPEED CONTROL

Figure 3.7: PWM signal


A= 1 vdt t
t

A=

1 ON + 5dt t 0

t ON = 12V t Where is the duty cycle of the PWM control signal; this shows that by varying the A = 12
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. 18
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT Generic Name CCPxCON CCPRxH CCPRxL CCPx CCP1 CCP1CON CCPR1H CCPR1L CCP1 CCP2 CCP2CON CCPR2H CCPR2L CCP2 Comment CCP control register CCP High byte CCP Low byte 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.

Figure 3.8: The PICmicro PWM module

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

LINE FOLLOWING ROBOT

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

=
For example

PWM duty cycle PWM period

Desired PWM frequency is 78.125 kHz, Fosc = 20 MHz & TMR2 prescale = 1 1/78.125 kHz= [(PR2) + 1] 4 1/20 MHz 1 12.8 s = [(PR2) + 1] 4 50 ns 1 PR2 = 63 20
Department of Electronics & Communication, GAT, Bangalore - 98

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

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

LINE FOLLOWING ROBOT

4. DESIGN AND IMPLEMENTATION


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

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

The 74HCTXX versions of the 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

LINE FOLLOWING ROBOT

Figure 4.1 Schematic Main Board 23


Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT

Figure 4.2: Sensor array 24


Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT

4.1.1. THE MICROCONTROLLER The PIC microcontroller was used as 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

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

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

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

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

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

LINE FOLLOWING ROBOT

4.1.4. VOLTAGE REGULATOR

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

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

Figure 4.4: Voltage Regulators

The circuit requires two voltage sources; one for the digital 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 F capacitor at the output is to maintain stability and improve regulation. These are standard values. The 0.1 F capacitor is used at the input because of the fact that high value capacitors have poor high frequency response.

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

LINE FOLLOWING ROBOT 4.1.5. D.C. MOTORS

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

4.1.6. THE H-BRIDGE CONTROL HARDWARE

Figure 4.6: The motor control.

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

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

IN1 IN2 IN3 IN4 1 0 1 0

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 DL to IN1 and D L to IN2. The same is done to IN3 & IN4. Now we have 1 directional control per motor. The ENABLE of each motor section is given PWM inputs to further improve on the control. Now, each motor has a direction control and a speed control. The clamping diodes are built into the chip which prevent the back EMF generated by the motors to harm the H-bridge. The inversion was achieved using the 74HCT04 HEX inverter IC having a slew rate of about 6ns which is negligible compared to the reaction time of the H-bridge itself. 4.1.7. PWM SPECIFICATIONS & CALCULATIONS The L293D chip can operate on PWM signals up to 5kHz, which was decided to be used.

1/5kHz = [(PR2) + 1] 4 (1/4MHz) 1 200 s = [(PR2) + 1] 1 s PR2 = 200-1 = 199 200 28


Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT Three speeds are used for the line following robot and their corresponding duty cycles are 0%, 50% & 96%. These calculations are shown below. For 0% duty cycle the value to be loaded is obviously zero, For 50 % duty cycle, PWM duty cycle = 200 s
50 = 100 s . 100

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

192 s = [DCx] 0.25 s 1 DCx = 768 = 1100000000b Thus, clear the bits DCxB1 & DCxB0 and load 11000000b i.e. 192 into the CCPRxL register.

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

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


Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT

Figure 4.8: Reflective sensor

If a reflective (white) surface is present at the optimal distance (d = 1.6cm) then the reflected waves will strike the detector which on radiation will start to conduct. The circuit diagram is shown in the figure below.

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

for, Vcc = 5V Vd = 1.4V Id = 16mA R is calculated to be approximately 220 .

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

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

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

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

Figure 4.10: Comparator transfer characteristics.

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

Figure 4.11: Sensor circuit redrawn with the comparator

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

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

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

4.1.11. THE PRIORITY ENCODER

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

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

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

Figure 4.13: The priority encoder

4.1.12. THE NO SURFACE LOGIC

Figure 4.14: The no surface logic

Noticing the placement of the sensors A, B & G, it can be noticed that under no conditions will all of them detect a line (go low). This will only happen when the line is too thick, or when the robot is lifted off the surface. Only when all the lines go low, will the NOR 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.

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

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

NS 1 0

GS X 1

A2 X X

A1 X X

A0 X X

STATE IN No surface is detected No line is detected

ACTION Stop the motors Execute the no line code (specially designed algorithm) Sharp turn left Sharp turn right

0 0

0 0

0 0

0 0

0 1

A detects the line B detects the line

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 accomplished in software. But considering that the software would require at least a few

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

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

4.2. PROCESS EXPLANATION

Figure 4.15: The line following process.

As shown in the figure above, is a typical situation involved. At every sampled time the commands executed by the microcontroller is also shown. From the above figure, it should be clear about the software requirements.

If no line is seen, the microcontroller just follows the previous action. This process is continued till either 5 seconds elapse or a line is reached. If a line is not reached within 5 seconds (software controlled), the microcontroller shifts into line find mode. In this mode, the robot takes a right turn and starts rotating about a fixed point. The 35
Department of Electronics & Communication, GAT, Bangalore - 98

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

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

Figure 4.18: Robots line approximation 36


Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT

4.3. FLOW CHART


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

Wait for interrupt

STOP

TMR0 INTERRUPT HANDLER

Is surface detected

Stop motors
NO

YES

Is line detected ?
YES

NO

No line code

RETI

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

LINE FOLLOWING ROBOT

Get input from portB, copy to command register

Adjust command register to have just 3 bits

Is command different from previous?

NO

YES

CALL motor subroutine

Error ?
NO

YES

RETI

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

LINE FOLLOWING ROBOT

MOTOR SHARP TURN LEFT Left motor = reverse, Right motor = forward, Both motors = high speed. SHARP TURN RIGHT Left motor = forward, Right motor = reverse, Both motors = high speed. TURN LEFT Both motors = forward Left motor = zero speed Right motor = high speed

Cmd =000
NO

YES

Cmd =001
NO

YES

Cmd =010
NO

YES

Cmd =011
NO

YES

TURN RIGHT Both motors = forward Left motor = high speed Right motor = zero speed MOVE LEFT Both motors = forward Left motor = low speed Right motor = high speed

Cmd =100
NO

YES

Cmd =101
NO

YES

MOVE RIGHT Both motors = forward Left motor = high speed Right motor = low speed GO STRAIGHT Both motors = forward Both motors = high speed

Cmd =110
NO

YES

Report Error

Report no error

RETURN 39
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT

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

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

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

CBLOCK 0X20

DELH DELL

;USED FOR DELAY REUTINES ; ;USED AS A MEMORY OF THE PREVIOUS CW

PREV_COMMAND_WORD TEMP_FLAG TIME_COUNT:2 COMMAND_WORD

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

LINE FOLLOWING ROBOT ;|--------------------------------------------------| ;| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | DESCRIPTION |

;|---|---|---|---|---|---|---|---|------------------| ;| X | X | X | X | X | 0 | 0 | 0 | SHARP TURN LEFT |

;| X | X | X | X | X | 0 | 0 | 1 | SHARP TURN RIGHT | ;| X | X | X | X | X | 0 | 1 | 0 | TURN LEFT ;| X | X | X | X | X | 0 | 1 | 1 | TURN RIGHT ;| X | X | X | X | X | 1 | 0 | 0 | MOVE LEFT ;| X | X | X | X | X | 1 | 0 | 1 | MOVE RIGHT ;| X | X | X | X | X | 1 | 1 | 0 | GO STRAIGHT ;| X | X | X | X | X | 1 | 1 | 1 | DONT CARE | | | | | |

;|--------------------------------------------------| ENDC ;*********************************************************** ORG 0 GOTO INITIALIZATION ORG 4 ;*********************************************************** #INCLUDE ROUTINE.INC ;~450US MAX OVERHEAD TIME ;*********************************************************** ORG 0X51 INITIALIZATION: BANK1 CLRF TRISC INBANK1 MOVLW 0X1F MOVWF TRISB INBANK1 ;RB0-RB4 SET AS INPUTS, ;RB5-RB7 AS OUTPUTS CLRF TRISA INBANK1 MOVLW 0X02 MOVWF OPTION_REG INBANK1 ; ENABLE WEAK PULLUPS ON PORTB ;TMR0 CLK SOURCE = INSTRUCTION CLK ;PRESCALAR SET TO TMR0 & SET TO 1:8 ;SENSORS SAMPLED EVERY 2.05ms 41
Department of Electronics & Communication, GAT, Bangalore - 98

;PORTC AS OUTPUT

LINE FOLLOWING ROBOT MOVLW 0X0C8 MOVWF PR2 INBANK1 ;A PERIOD OF 200 MICRO SECONDS ;(FOR 5KhZ PWM) PUT IN PR REG... BANK0 CLRF TMR0 MOVLW 0X20 MOVWF INTCON ;ENABLE TMR0 INTERRUPT, ;BUT KEEP MASKED BY CLEARING GIE NOP CLRF T2CON ;POSTSCALAR & PRESCALE SET TO 1:1, ;TMR2 = OFF BSF T2CON,TMR2ON CLRF CCP1CON CLRF CCP2CON MOVLW 0X0C MOVWF CCP1CON ; TURN ON TMR 2 ; RESET THE CCP1 MODULE ; RESET THE CCP2 MODULE ;00001100 ;CCP MODE SET TO PWM MODE AND THE ;LOWER TWO BITS OF DUTY CYCLE ;ARE SET TO 0. MOVWF CCP2CON ;CCP MODE SET TO PWM MODE AND THE ;LOWER TWO BITS OF DUTY CYCLE ;ARE SET TO 0. MOVLW HIGHSPEED MOVWF CCPR1L MOVWF CCPR2L BSF INTCON,GIE ;SET TO HIGHSPEED DUTY CYCLE ;SET TO HIGHSPEED DUTY CYCLE ;ENABLE INTERRUPTS

CLR16F TIME_COUNT ;INITIALIZE TIME COUNT TO ZERO MOVLW 0X07 MOVWF PREV_COMMAND_WORD CLRF TEMP_FLAG ;*********************************************************** GOTO $ ;LOOP HERE INDEFINATELY (WAIT FOR INTERRUPT) ;*********************************************************** #INCLUDE "SUBROUTINES.INC" ;*********************************************************** END 42
Department of Electronics & Communication, GAT, Bangalore - 98

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

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

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

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

;DEFINES TO USE FOR REGISTERS NOT IN BANK0 #DEFINE INBANK1 ^ 0X080 #DEFINE INBANK2 ^ 0X100 #DEFINE INBANK3 ^ 0X180

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

LINE FOLLOWING ROBOT ;16BIT MANUPILATOR MACROS INC16F MACRO VAR INCF VAR,F BTFSC STATUS,Z INCF VAR+1,F BCF STATUS,C MOVF VAR+1,W BTFSC STATUS,Z BSF STATUS,C ENDM ;AFFECTS CARRY FLAG ON OVERFLOW

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

;AFFECTS ZERO FLAG ON ZERO

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 CLRF VAR CLRF VAR+1 ENDM

;ZERO FLAG IS AFFECTED

;CONSTANTS USED CONSTANT FORWARD = 0X03 CONSTANT ST_LEFT = 0X02 CONSTANT ST_RIGHT = 0X01 ;0011 ;0001 ;0010 44
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT CONSTANT BACKWARD = 0X00 ;0000,

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

CONSTANT HIGHSPEED = 0X0C0 ;=192 DUTY CLCLE = 96%

;DEFINES FOR LFR... #DEFINE NO_LINE PORTB,3 #DEFINE NO_SURFACE PORTB,4

;DEFINES OF THE TEMP_FLAG USED FOR VARIOUS OPERATIONS ; NO_LINE_PA = TEMP_FLAG,0 =>

; USED FOR DEBOUNCING THE NO_LINE INPUT (PAST VALUE) ; NO_LINE_PR = TEMP_FLAG,1 =>

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

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

; NOT_LF_FIRST

= TEMP_FLAG,4 =>

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

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

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

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

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

;DEBOUNSING CODE OF THE NO_LINE INPUT

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 SUBLW 0X00 BTFSS STATUS,Z GOTO INITIALIZATION ;THE DONT CARE STATE IS REACHED, ;PROBABLY ERROR IN INPUTS ;GOTO INITIALIZATION JUST TO MAKE ;SURE IT IS NOT A SOFTWARE PROBLEM. ;ELSE CARRY ON GOTO EXIT_T0 NO_LINE_CODE: ;NO LINE CODE BTFSC LINE_FIND_MODE ;IF IN LINE FIND MODE, SKIP THE COUNTING CODE GOTO NLA DEC16F TIME_COUNT BTFSS STATUS,Z ;IF TIME_COUNT IS NOT YET OVER, ;JUST EXIT ROUTINE (FOLLOW THE ;REMEMBERED STATE) GOTO EXIT_T0 BCF NOT_LF_FIRST ;IF TIME_COUNT IS 0 (~5SEC) THEN ;SHIFT TO LINE FIND MODE NLA: BSF LINE_FIND_MODE MOVLW 0X03 BTFSS NOT_LF_FIRST CALL MOTORS BTFSC NOT_LF_FIRST GOTO SKIP_INI 47
Department of Electronics & Communication, GAT, Bangalore - 98

;16us

;START NO LINE CODE ;SET TO TURN RIGHT ;IS THIS THE FIRST OF NO LINE CODE ;IF YES MODIFY MOTORS ;IS THIS THE FIRST OF NO LINE CODE

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 ADDLW 0X0A MOVWF CCPR2L SUBLW HIGHSPEED BTFSC STATUS,C GOTO EXIT_T0 CLRF CCPR2L EXIT_T0: BCF INTCON,T0IF RETFIE ;*********************************************************** 4.4.4. SUBROUTINES.INC ORG 0X074 DELAY_FF_US: ;256uS DELAY MOVLW 0X0FF MOVWF DELL DELLOOP: DECFSZ DELL,1 GOTO DELLOOP NOP RETURN ;CLEAR TMR0 INTERRUPT FLAG ;INCREMENT CCP2 REG BY 10

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

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

LINE FOLLOWING ROBOT MOTORS: ;TABLE ;COMMAND IS IN W BEFORE CALLING, 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 FORWARD BTFSC PREVIOUS_STATE MOVWF PORTA BCF PREVIOUS_STATE RETLW 0X00 ;RETURN FROM KNOWN STATE ;BOTH MOTORS FORWARD ;CHANGE PORTA ONLY IF DIFFERENT ;GIVEN BY THE PREVIOUS_STATE FLAG ;HIGH SPEED TO LEFT MOTOR ;LOW SPEED TO RIGHT MOTOR ;ERROR INDICATOR, WRONG STATE ;EXECUTE THE APPROPRIATE CODE

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

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

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

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

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

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

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

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

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

4.5 CODE EXPLANATION


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

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

LINE FOLLOWING ROBOT Timer 0 is set to have a pre scale of 1:8 Period register is initialized Timer 2 is turned ON and is made to have a pre & post scale of 1:1 Both CCP modules are reset and put in PWM mode Initialize duty cycle registers of both the modules to high speed Initialize variables & enable interrupts

Once done the goto $ will cause the processor to loop indefinitely and thus waiting for an interrupt.

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

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

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

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

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

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

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

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

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

4.5.4. SUBROUTINES.INC The first subroutine is a simple 256 s delay routine using just a single 8 bit register. The second is the main one called the MOTOR subroutine. This is the one responsible to modifying the PORT A pins and the PWM duty cycles to achieve the 53
Department of Electronics & Communication, GAT, Bangalore - 98

LINE FOLLOWING ROBOT required turns. Before the subroutine is called, the W register must hold the COMMAND_WORD. This value is added to the PCL register, thus causing a jump dependent on the value. For example if W contained 0, then the immediate instruction is executed. This is a table of 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

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

1 SHARP TURN RIGHT

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

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

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

LINE FOLLOWING ROBOT

5. RESULT AND CONCLUSION


The Line following robot was finally completed. A lot of effort was put into the design, implementation and days of toil in front of the computer, writing and debugging the code. The robot was finally running with a few glitches here and there which were sorted in the later revisions of the firmware. The line following robot still has a few 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

LINE FOLLOWING ROBOT

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

PICmicro Mid-Range MCU Family Reference Manual by MICROCHIP

Design with PIC microcontrollers by John B. Peatman PEARSON Education

PIC Robotics, A 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

Bottom Side

LFR.HEX
:020000040000FA :02000000512885 :080008000B1D51288101061EA9 :100010000C289B0195014F28241086192414742064 :10002000A4142418861DA4100000A4182A28A411C2 :1000300024120930A6004C30A50006080739A30099 :10004000220603194F282308A2007A20003C031D32 :1000500051284F28A4193328A503250A0319A603FC :10006000031D4F282412A4150330241E7A20241ABD :100070003D280130A600DC30A5002416A503250A82 :100080000319A603031D4F280130A600DC30A5008C :100090001B080A3E9B00C03C03184F289B010B1114 :1000A000090083130313831687011F30860085011F :1000B00002308100C8309200831303138312810140 :1000C00020308B0000009201121597019D010C3029 :1000D00097009D00C03095009B008B17A501A601DD :1000E0000730A200A4017328FF30A100A10B7628DD :1000F000000008008207B028A7289E2895288C2891 :100100008328B928FF3464309B00C0309500033049 :100110002419850024110034C0309B006430950000 :10012000033024198500241100349B01C030950050 :10013000033024198500241100000034C0309B00D6 :100140009501033024198500241100000034C030CB :100150009B0095000130850024150000000000344C :10016000C0309B009500023085002415000000007F :100170000034C0309B009500033024198500241101 :040180000000003447 :02400E00723FFF :00000001FF

PIC16F87X
28/40-Pin 8-Bit CMOS FLASH Microcontrollers
Devices Included in this Data Sheet:
PIC16F873 PIC16F874 PIC16F876 PIC16F877

Pin Diagram
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 VDD VSS OSC1/CLKIN OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 1 2 3 4 5 6 40 39 38 37 36 35 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

Microcontroller Core Features:


High performance RISC CPU 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 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 mA typical @ 3V, 4 MHz - 20 A typical @ 3V, 32 kHz - < 1 A typical standby current

8 9 10 11 12 13 14 15 16 17 18 19 20

PIC16F877/874

34 33 32 31 30 29 28 27 26 25 24 23 22 21

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. resolution is 200 ns - PWM max. resolution is 10-bit 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)

2001 Microchip Technology Inc.

DS30292C-page 1

PIC16F87X
Pin Diagrams
PDIP, SOIC
MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS VSS OSC1/CLKIN OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15 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 RA3/AN3/VREF+ RA2/AN2/VREFRA1/AN1 RA0/AN0 MCLR/VPP NC RB7/PGD RB6/PGC RB5 RB4 NC 6 5 4 3 2 1 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 9

PIC16F876/873

PLCC

RC6/TX/CK RC5/SDO RC4/SDI/SDA RD3/PSP3 RD2/PSP2 RD1/PSP1 RD0/PSP0 RC3/SCK/SCL RC2/CCP1 RC1/T1OSI/CCP2 NC

QFP

44 43 42 41 40 39 38 37 36 35 34

DS30292C-page 2

NC NC RB4 RB5 RB6/PGC RB7/PGD MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+

12 13 14 15 16 17 18 19 20 21 22

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

1 2 3 4 5 6 7 8 9 10 11

PIC16F877 PIC16F874

33 32 31 30 29 28 27 26 25 24 23

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

RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SDO RC6/TX/CK NC

18 19 20 21 22 23 24 25 26 27 282

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

7 8 9 10 11 12 13 14 15 16 17

PIC16F877 PIC16F874

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

2001 Microchip Technology Inc.

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

FIGURE 1-1:
Device PIC16F873 PIC16F876

PIC16F873 AND PIC16F876 BLOCK DIAGRAM


Program FLASH 4K 8K Data Memory 192 Bytes 368 Bytes
13 Program Counter FLASH Program Memory

Data EEPROM 128 Bytes 256 Bytes


Data Bus 8 PORTA RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS PORTB RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD PORTC

8 Level Stack (13-bit)

RAM File Registers RAM Addr(1)

Program Bus

14 Instruction reg Direct Addr 7

Addr MUX 8 Indirect Addr

FSR reg STATUS reg 8 3

Power-up Timer Instruction Decode & Control Timing Generation OSC1/CLKIN OSC2/CLKOUT Oscillator Start-up Timer Power-on Reset Watchdog Timer Brown-out Reset In-Circuit Debugger Low Voltage Programming 8

MUX

ALU

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

W reg

MCLR

VDD, VSS

Timer0

Timer1

Timer2

10-bit A/D

Data EEPROM

CCP1,2

Synchronous Serial Port

USART

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

2001 Microchip Technology Inc.

DS30292C-page 5

PIC16F87X
TABLE 1-1:
Pin Name OSC1/CLKIN OSC2/CLKOUT

PIC16F873 AND PIC16F876 PINOUT DESCRIPTION


DIP Pin# 9 10 SOIC Pin# 9 10 I/O/P Type I O Buffer Type Description

ST/CMOS(3) 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. Master Clear (Reset) input or programming voltage input. This pin is an active low RESET to the device. PORTA is a bi-directional I/O port. RA0 can also be analog input0. RA1 can also be analog input1. RA2 can also be analog input2 or negative analog reference voltage. RA3 can also be analog input3 or positive analog reference voltage. 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.

MCLR/VPP

I/P

ST

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

2 3 4 5 6 7

2 3 4 5 6 7

I/O I/O I/O I/O I/O I/O

TTL TTL TTL TTL ST TTL

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

21 22 23 24 25 26 27 28

21 22 23 24 25 26 27 28

I/O I/O I/O I/O I/O I/O I/O I/O

TTL/ST(1) TTL TTL TTL TTL TTL TTL/ST(2) TTL/ST(2)

RB0 can also be the external interrupt pin.

RB3 can also be the low voltage programming input. Interrupt-on-change pin. Interrupt-on-change pin. Interrupt-on-change pin or In-Circuit Debugger pin. Serial programming clock. Interrupt-on-change pin or In-Circuit Debugger pin. Serial programming data. PORTC is a bi-directional I/O port. RC0 can also be the Timer1 oscillator output or Timer1 clock input. 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 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. P = power ST = Schmitt Trigger input

RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT VSS VDD Legend: I = input

11 12 13 14 15 16 17 18 8, 19 20

11 12 13 14 15 16 17 18 8, 19 20

I/O I/O I/O I/O I/O I/O I/O I/O P P

ST ST ST ST ST ST ST ST

O = output = Not used

I/O = input/output TTL = TTL input

Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt. 2: This buffer is a Schmitt Trigger input when used in Serial Programming mode. 3: This buffer is a Schmitt Trigger input when configured in RC oscillator mode and a CMOS input otherwise.

2001 Microchip Technology Inc.

DS30292C-page 7

PIC16F87X
5.0 TIMER0 MODULE
The Timer0 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 00h Edge select for external clock 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.

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.

5.1

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

FIGURE 5-1:

BLOCK DIAGRAM OF THE TIMER0/WDT PRESCALER


Data Bus 8 1 0 M U X SYNC 2 Cycles TMR0 Reg

CLKOUT (= FOSC/4)

0 RA4/T0CKI pin 1 T0SE

M U X

T0CS

PSA PRESCALER

Set Flag Bit T0IF on Overflow

0 M U X

8-bit Prescaler 8 8 - to - 1MUX PS2:PS0

Watchdog Timer

PSA 0 MUX 1 PSA

WDT Enable bit

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

2001 Microchip Technology Inc.

DS30292C-page 47

PIC16F87X
5.2 Using Timer0 with an External Clock
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 1,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: Writing to TMR0, when the prescaler is assigned to Timer0, will clear the prescaler count, but will not change the prescaler assignment.

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

There is only one prescaler available, which is mutually exclusively shared between the Timer0 module and the Watchdog Timer. A prescaler assignment for the

REGISTER 5-1:

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

bit 7 bit 6 bit 5

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

bit 4

bit 3

bit 2-0

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

Note:

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

DS30292C-page 48

2001 Microchip Technology Inc.

PIC16F87X
7.0 TIMER2 MODULE
Register 7-1 shows the Timer2 control register. Additional information on timer modules is available in 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. 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>). 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.

FIGURE 7-1:
Sets Flag bit TMR2IF TMR2 (1) Output RESET Postscaler 1:1 to 1:16 4 T2OUTPS3: T2OUTPS0

TIMER2 BLOCK DIAGRAM

TMR2 Reg Comparator

Prescaler 1:1, 1:4, 1:16 2 T2CKPS1: T2CKPS0

FOSC/4

EQ

PR2 Reg

Note 1: TMR2 register output can be software selected by the SSP module as a baud clock.

REGISTER 7-1:

T2CON: TIMER2 CONTROL REGISTER (ADDRESS 12h)


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

bit 7 bit 6-3

Unimplemented: Read as '0' TOUTPS3:TOUTPS0: Timer2 Output Postscale Select bits 0000 = 1:1 Postscale 0001 = 1:2 Postscale 0010 = 1:3 Postscale 1111 = 1:16 Postscale TMR2ON: Timer2 On bit 1 = Timer2 is on 0 = Timer2 is off T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits 00 = Prescaler is 1 01 = Prescaler is 4 1x = Prescaler is 16 Legend: R = Readable bit - n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown

bit 2

bit 1-0

2001 Microchip Technology Inc.

DS30292C-page 55

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

TABLE 7-1:
Address Name

REGISTERS ASSOCIATED WITH TIMER2 AS A TIMER/COUNTER


Bit 7 GIE PSPIF(1) PSPIE(1) Bit 6 PEIE ADIF ADIE TOUTPS3 Bit 5 T0IE RCIF RCIE Bit 4 INTE TXIF TXIE Bit 3 RBIE SSPIF SSPIE Bit 2 T0IF CCP1IF CCP1IE Bit 1 INTF TMR2IF TMR2IE Bit 0 RBIF TMR1IF TMR1IE Value on: POR, BOR Value on all other RESETS

0Bh,8Bh, INTCON 10Bh,18Bh 0Ch 8Ch 11h 12h 92h PIR1 PIE1 TMR2 T2CON PR2

0000 000x 0000 000u 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

Timer2 Modules Register Timer2 Period Register

TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 0000
1111 1111 1111 1111

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the Timer2 module. Note 1: Bits PSPIE and PSPIF are reserved on the PIC16F873/876; always maintain these bits clear.

DS30292C-page 56

2001 Microchip Technology Inc.

PIC16F87X
8.0 CAPTURE/COMPARE/PWM MODULES
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).

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.

TABLE 8-1:

CCP MODE - TIMER RESOURCES REQUIRED


Timer Resource Timer1 Timer1 Timer2

CCP Mode Capture Compare PWM

TABLE 8-2:

INTERACTION OF TWO CCP MODULES


Interaction Same TMR1 time-base The compare should be configured for the special event trigger, which clears TMR1 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) None None

CCPx Mode CCPy Mode Capture Capture Compare PWM PWM PWM Capture Compare Compare PWM Capture Compare

2001 Microchip Technology Inc.

DS30292C-page 57

PIC16F87X
REGISTER 8-1: CCP1CON REGISTER/CCP2CON REGISTER (ADDRESS: 17h/1Dh)
U-0 bit 7 bit 7-6 bit 5-4 Unimplemented: Read as '0' 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. CCPxM3:CCPxM0: CCPx Mode Select bits 0000 = Capture/Compare/PWM disabled (resets CCPx module) 0100 = Capture mode, every falling edge 0101 = Capture mode, every rising edge 0110 = Capture mode, every 4th rising edge 0111 = Capture mode, every 16th rising edge 1000 = Compare mode, set output on match (CCPxIF bit is set) 1001 = Compare mode, clear output on match (CCPxIF bit is set) 1010 = Compare mode, generate software interrupt on match (CCPxIF bit is set, CCPx pin is unaffected) 1011 = Compare mode, trigger special event (CCPxIF bit is set, CCPx pin is unaffected); CCP1 resets TMR1; CCP2 resets TMR1 and starts an A/D conversion (if A/D module is enabled) 11xx = PWM mode Legend: R = Readable bit - n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown U-0 R/W-0 CCPxX R/W-0 CCPxY R/W-0 CCPxM3 R/W-0 CCPxM2 R/W-0 CCPxM1 R/W-0 CCPxM0 bit 0

bit 3-0

DS30292C-page 58

2001 Microchip Technology Inc.

PIC16F87X
8.3 PWM Mode (PWM)
8.3.1 PWM PERIOD
In Pulse Width Modulation mode, the CCPx pin 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. 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 Note: 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.

Figure 8-3 shows a simplified block diagram of the CCP module in PWM mode. 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:

SIMPLIFIED PWM BLOCK DIAGRAM


CCP1CON<5:4>

Duty Cycle Registers CCPR1L

8.3.2
CCPR1H (Slave) RC2/CCP1 Comparator R Q

PWM DUTY CYCLE

TMR2

(Note 1) S

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: 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. 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: FOSC log FPWM

Comparator Clear Timer, CCP1 pin and latch D.C.

TRISC<2>

PR2

Note 1: The 8-bit timer is concatenated with 2-bit internal Q clock, or 2 bits of the prescaler, to create 10-bit timebase.

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

FIGURE 8-4:
Period

PWM OUTPUT

Duty Cycle TMR2 = PR2 TMR2 = Duty Cycle TMR2 = PR2

Resolution

)
bits

log(2)

Note:

If the PWM duty cycle value is longer than the PWM period, the CCP1 pin will not be cleared.

2001 Microchip Technology Inc.

DS30292C-page 61

PIC16F87X
8.3.3 SETUP FOR PWM OPERATION
3. 4. 5. The following steps should be taken when configuring the CCP module for PWM operation: 1. 2. Set the PWM period by writing to the PR2 register. 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.

TABLE 8-3:

EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 20 MHz


1.22 kHz 16 0xFFh 10 4.88 kHz 4 0xFFh 10 19.53 kHz 1 0xFFh 10 78.12kHz 1 0x3Fh 8 156.3 kHz 1 0x1Fh 7 208.3 kHz 1 0x17h 5.5

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

TABLE 8-4:
Address

REGISTERS ASSOCIATED WITH CAPTURE, COMPARE, AND TIMER1


Name Bit 7 GIE PSPIF(1) PSPIE
(1)

Bit 6 PEIE ADIF ADIE

Bit 5 T0IE RCIF RCIE

Bit 4 INTE TXIF TXIE

Bit 3 RBIE SSPIF SSPIE

Bit 2 T0IF CCP1IF CCP1IE

Bit 1 INTF TMR2IF TMR2IE

Bit 0 RBIF

Value on: POR, BOR

Value on all other RESETS

0Bh,8Bh, INTCON 10Bh, 18Bh 0Ch 0Dh 8Ch 8Dh 87h 0Eh 0Fh 10h 15h 16h 17h 1Bh 1Ch 1Dh PIR1 PIR2 PIE1 PIE2 TRISC TMR1L TMR1H T1CON CCPR1L CCPR1H CCP1CON CCPR2L CCPR2H CCP2CON

0000 000x 0000 000u

TMR1IF 0000 0000 0000 0000 CCP2IF ---- ---0 ---- ---0 TMR1IE 0000 0000 0000 0000 CCP2IE ---- ---0 ---- ---0
1111 1111 1111 1111 xxxx xxxx uuuu uuuu xxxx xxxx uuuu uuuu

PORTC Data Direction Register Holding Register for the Least Significant Byte of the 16-bit TMR1 Register Holding Register for the Most Significant Byte of the 16-bit TMR1 Register

T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu
xxxx xxxx uuuu uuuu xxxx xxxx uuuu uuuu

Capture/Compare/PWM Register1 (LSB) Capture/Compare/PWM Register1 (MSB) CCP1X CCP1Y

CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000


xxxx xxxx uuuu uuuu xxxx xxxx uuuu uuuu

Capture/Compare/PWM Register2 (LSB) Capture/Compare/PWM Register2 (MSB) CCP2X CCP2Y

CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by Capture and Timer1. Note 1: The PSP is not implemented on the PIC16F873/876; always maintain these bits clear.

DS30292C-page 62

2001 Microchip Technology Inc.

PIC16F87X
TABLE 13-2:
Mnemonic, Operands

PIC16F87X INSTRUCTION SET


14-Bit Opcode Description Cycles MSb BYTE-ORIENTED FILE REGISTER OPERATIONS LSb Status Affected Notes

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

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

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

0111 0101 0001 0001 1001 0011 1011 1010 1111 0100 1000 0000 0000 1101 1100 0010 1110 0110

dfff dfff lfff 0xxx dfff dfff dfff dfff dfff dfff dfff lfff 0xx0 dfff dfff dfff dfff dfff

ffff ffff ffff xxxx ffff ffff ffff ffff ffff ffff ffff ffff 0000 ffff ffff ffff ffff ffff

C,DC,Z Z Z Z Z Z Z Z Z

1,2 1,2 2 1,2 1,2 1,2,3 1,2 1,2,3 1,2 1,2

C C C,DC,Z Z

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

BIT-ORIENTED FILE REGISTER OPERATIONS BCF BSF BTFSC BTFSS ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW f, b f, b f, b f, b k k k k k k k k k Bit Clear f Bit Set f Bit Test f, Skip if Clear Bit Test f, Skip if Set Add literal and W AND literal with W Call subroutine Clear Watchdog Timer Go to address Inclusive OR literal with W Move literal to W Return from interrupt Return with literal in W Return from Subroutine Go into standby mode Subtract W from literal Exclusive OR literal with W 1 1 1 (2) 1 (2) 1 1 2 1 2 1 1 2 2 2 1 1 1
01 01 01 01 00bb 01bb 10bb 11bb bfff bfff bfff bfff ffff ffff ffff ffff

1,2 1,2 3 3 C,DC,Z Z TO,PD Z

LITERAL AND CONTROL OPERATIONS


11 11 10 00 10 11 11 00 11 00 00 11 11 111x 1001 0kkk 0000 1kkk 1000 00xx 0000 01xx 0000 0000 110x 1010 kkkk kkkk kkkk 0110 kkkk kkkk kkkk 0000 kkkk 0000 0110 kkkk kkkk kkkk kkkk kkkk 0100 kkkk kkkk kkkk 1001 kkkk 1000 0011 kkkk kkkk

TO,PD C,DC,Z Z

Note 1: When an I/O register is modified as a function of itself ( e.g., MOVF PORTB, 1), the value used will be that value present on the pins themselves. For example, if the data latch is 1 for a pin configured as input and is driven low by an external device, the data will be written back with a 0. 2: If this instruction is executed on the TMR0 register (and, where applicable, d = 1), the prescaler will be cleared if assigned to the Timer0 module. 3: If Program Counter (PC) is modified, or a conditional test is true, the instruction requires two cycles. The second cycle is executed as a NOP.

Note:

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

DS30292C-page 136

2001 Microchip Technology Inc.

L293D L293DD
PUSH-PULL FOUR CHANNEL DRIVER WITH DIODES
600mA OUTPUT CURRENT CAPABILITY PER CHANNEL 1.2A PEAK OUTPUT CURRENT (non repetitive) PER CHANNEL ENABLE FACILITY OVERTEMPERATURE PROTECTION LOGICAL 0 INPUT VOLTAGE UP TO 1.5 V (HIGH NOISE IMMUNITY) INTERNAL CLAMP DIODES 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. BLOCK DIAGRAM

SO(12+4+4)

Powerdip (12+2+2)

ORDERING NUMBERS: L293DD 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

1/7

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

PIN CONNECTIONS (Top view)

SO(12+4+4)

Powerdip(12+2+2)

THERMAL DATA
Symbol Rth j-pins Rth j-amb Rth j-case Decription Thermal Resistance Junction-pins Thermal Resistance junction-ambient Thermal Resistance Junction-case max. max. max. DIP 80 14 SO 14 50 (*) Unit C/W C/W

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

2/7

Aiv'lIiJIKA. TRADING

CO.,

,4nnexeto Ambika No. loa, Shankara Park, Bangalore . 560 004.


Telefax: 6613337, 6602160 e.mail: ambikaramesh@hotmail.com

.'''''-

GearSeries(533 & (528


Spur Reduction Gearhead
Design
Gear series C533 &C528 contains Brassgears 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. .
Standard Data kg-cm
"

~
Motor Data
Motor. . D03 D03 D03 003 DC25 DC25 Voltage 6 6 12 12 2.5 6 '
'.

Direction
CW or ACW

Speed 2400 2400 2400 7500 2200 8500

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

I Reversible
CW or ACW

Reversible Reversible Reversible

GearTorque Combination motor Mounting Weight Axial thrust


Radial torque Lateral torque Output shafts Ambient' temperature operation

3 Standard small DC motor Dia 33 availiable in 6 V,9 V or 12V DC

any position
150
"'.

gm
"C'" kg

kg kg-cm eJ

." 2 5 '1 5 4.00,4.76,5.00,6.00,6.35 &7.00 (others on request) -15...+55 . . .,...,... .

.C

Transmission ratios

---~'--

(5 :;;:.

J -~O~O~~.~~ J
I
n-I

--GEAr~.~~AD (533

.,mm, . I ---~ o. - ._d~ ~.

, --"--- ,

_--nn__---

~
/

I
!

25

28.1

nos.8 Bp,. tappings On17PCD

2J~L---i

'"

"0--(5 :;;:

a.

MOTOR DC 25 ----

GEAR HEAD (528

,
01 "I -' -, Q G' '-..1

4 nos. 8BA \ On 17.0PCD

.29.L._.

J
47.9

I 26.1

j
-,_..1
.,.

""-,, '0..

LM339, LM239, LM2901, LM2901V, NCV2901, MC3302 Single Supply Quad Comparators
These comparators are designed for use in level detection, lowlevel sensing and memory applications in consumer, automotive, and industrial electronic applications.
Features
14 1

http://onsemi.com

SOIC14 D SUFFIX CASE 751A

PbFree 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

PDIP14 N, P SUFFIX CASE 646 14 1

14 1

TSSOP14 DTB SUFFIX CASE 948G

PIN CONNECTIONS
Output 2 Output 1 VCC Input 1 + Input 1 Input 2 + Input 2
1 2 3 4 5 6 7 14 13 12 11 10 9 8

Output 3 Output 4 GND + Input 4 Input 4 + Input 3 Input 3

* 1 ) *2 )

) * ) *

(Top View)

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

DEVICE MARKING INFORMATION


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

*For additional information on our PbFree 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

Philips Semiconductors

Product specication

Triple 3-input NOR gate


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

74HC/HCT27

Fig.1 Pin configuration.

Fig.2 Logic symbol.

Fig.3 IEC logic symbol.

FUNCTION TABLE INPUTS nA L X X H Notes 1. H = HIGH voltage level L = LOW voltage level X = dont care Fig.4 Functional diagram. Fig.5 Logic diagram (one gate). nB L X H X nC L H X X OUTPUT nY H L L L

December 1990

MM74HC148 8-3 Line Priority Encoder

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 07 and outputs 3 lines A0A2. 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
s Typical propagation delay: 13 ns s Wide supply voltage range: 2V6V

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

Connection Diagram

Truth Table
Inputs EI H L L L L L L L L L 0 1 2 3 4 5 6 X X X X X X X X H H H H H H H H X X X X X X X L X X X X X X L H X X X X X L H H X X X X L H H H X X X L H H H H X X L H H H H H X L H H H H H H L H H H H H H H H H L L L L H H H H Outputs 7 A2 A1 A0 GS EO H H L L H H L L H H H H L H L H L H L H H H L L L L L L L L H L H H H H H H H H

H = HIGH L = LOW X = Irrelevant

2001 Fairchild Semiconductor Corporation

DS009390

www.fairchildsemi.com

Philips Semiconductors

Product specication

Hex inverter

74HC04; 74HCT04

handbook, halfpage

1A 1

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

1A

1Y

1Y 2A 2Y 3A 3Y

2 3 4 5 6 7 Top view GND 8 4Y

GND(1)

11 10 9

4A

4Y

11

5A

5Y

10

13
MBL760

6A

6Y

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.

handbook, halfpage

6
handbook, halfpage

Y
MNA341

11

10

13

1
MNA343

12

Fig.4 IEC logic symbol.

Fig.5 Logic diagram (one inverter).

2003 Jul 23

LM78XX Series Voltage Regulators

May 2000

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, 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 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 package 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 dissipation. 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 output, 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
n n n n n n Output current in excess of 1A 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
LM7805C LM7812C LM7815C 5V 12V 15V

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

DS007746-3 DS007746-2

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

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

2000 National Semiconductor Corporation

DS007746

www.national.com

You might also like