Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

PIC16F877 Microcontroller Tutorial

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

PIC16F877 Microcontroller Tutorial revA Page 1 of 36

Tutorial: Microchip PIC16F877 Microcontroller


Table of Contents
1. Introduction
1.1 What is a Microcontroller?
1.2 Why are Microcontrollers used?
2 Getting started
2.1 Parts list and vendors
2.2 Connecting the equipment
3 PIC16fF877 Microcontroller
3.1 Flash PIC development board
3.2 CCS PIC-C compiler
3.3 In Circuit Debugger/Programmer (ICD-S)
3.4 Embedded C Programming and the Microchip PIC
4 Experiments on PIC16F877
4.1 LED
4.2 Dip Switch
4.3 ADC Temperature Measurement
4.4 Open Loop and Closed Loop Temperature Control
5 Where do we go from here?

1. Introduction
This tutorial is to introduce the microcontroller technolgy the capabilities and the specifications of a
commonly used Microcontroller Microchip PIC16F877 and describe the experiments conducted using the
Development board Flash PIC development board which accomodates this microcontroller.

1.1. What is a microcontroller?


A microcontroller is a compact standalone computer, optimized for control applications. Entire
processor, memory and the I/O interfaces are located on a single piece of silicon so, it takes less time
to read and write to extrernal devices.
1.2. Why are microcontrollers used?
Following are the reasons why microcontrollers are incorporated in control systems:
a. Cost: Microcontrollers with the supplemantary circuit components are much cheaper than a
computer with an analog and digital I/O
b. Size and Weight: Microcontrollers are compact and light compared to computers
c. Simple applications: If the application requires very few number of I/O and the code is relatively
small, which do not require extended amount of memory and a simple LCD display is sufficient as
a user interface, a microcontroller would be suitable for this application.
d. Reliability: Since the architecture is much simpler than a computer it is less likely to fail.
e. Speed: All the components on the microcontroller are located on a singe piece of silicon. Hence,
the applications run much faster than it does on a computer.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 2 of 36

2. Getting Started
2.1. Parts list:

The parts list and the vendor list is given in Table-2.1.1

Description Vendor Part No. Price Qty.


FlashPIC- PRLLC FlashPIC- 45.00$ 1
Development Dev
Board
CCS ICD-S PRLLC ICD-S 75.00$ 1
debugger/
programmer
Embedded C Amazon.com N/A 57.70$ 1
Programming
and the
Microchip
PIC
Richard H.
Barnett,
Larry D.
O’Cull,
Sarah A. Cox
ISBN:
1401837484
12VDC Radioshack 273-1776 16.99$ 1
adapter
8 position dip Jameco 38842 0.89$ 1
switch
Multipurpose Radioshack 276-150 $1.69 1
PC Board
LM35CZ Jameco 107107 $5.79 1
Linear Series
Plastic Bubblegum
Sphere machine
DAC-0832 8 Jameco 128186 3.95 1
bit DAC
LF353 Op- Jameco 22939 $.39 1
Amp

10Kohm Radioshack 271-1335 $.99 1


Resistor
20Kohm Radioshack 271-0265 $.99 2
Resistor
10ohm 10W Radioshack 271-132 $1.69 1
Resistor
TIP31 Power Jameco 33048 $.49 1
Transistor
0.01uF Radioshack 272-1051 $1.19 1

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 3 of 36

Capacitor
1N4004 Radioshack 276-1103 $.79 1
Diode
100 ohm Radioshack 271-1311 $.99 1
resistor
Technie Toyz Compusa MD-TTF- $10.99 1
12V PC Fan 8025A-2B
9V battery Radioshack 23-875 $3.29 1
6-Ft. Serial Radio Shack 26-117 $13.49 1
RS-232C
Cable
1x40 pin Jameco 103270 0.75$ 1
header

Note: It is assumed that the user has the following common electrical equipment: 1x8 pin ribbon
cable, alligator clips, soldering iron and solder.

2.2. Connecting the equipment


a. Powering up the PIC Development Board
The PIC16F877 chip has to be powered at all times when its being programmed and running an
application.
1. Cut the connector off the DC end of the 12VDC adapter and strip the wire ends.
2. Determine the + and – wire leads using a voltmeter.
3. Apply the 12VDC to the board by connecting the 12VDC adapter to + and – pins of J2 of Flash
PIC Development Board. See Figure2.2-1
Caution: Make sure you wire the – and + ends of the adapter of the to the right pins of Jumper
2. Do not plug the adapter to 110V/AC outlet before you wire the power to the board. In order
to avoid cheking the leads with a voltmeter everytime, its always a good practice to label the
leads for future reference.

Figure-2.2-1 12VDC Power connection J2

4. Plug the adapter to the 110V/AC outlet.


5. Observe the green LED D9 illuminating and rest of the LEDs flashing in order.

b.Connecting the Flash PIC Development Board to a PC through ICD-S:

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 4 of 36

After we put power on the FlashPIC development board, now we are ready to program the PIC16F877
chip.
1. Connect the ICD-S to the computer using the RS-232 cable, which came with the ICD-S.
2. Conncect the ICD-S to the developmet board using the phone jack. (See Figure2.2-2)

Figure2.2-2 Connecting the ICD-S, PC, and the FlashPIC-Development Board


c. Coding,Compiling and Transfering the .hex files to the chip
Now that we have our hardware setup, we are ready to write the code and transfer the .hex files to the
PIC16F877.
1. Install the CCS compiler demo version, which came with the reference book ”Embedded C
Programming and the Microchip PIC” to your computer
2. Insall the ICD software which came with the ICD-S unit.
3. Start the CCS compiler.
4. Go to menu path: Options>Debugger/Programmer
5. Change the to the path of Icd.exe. (See Figure2.2-3)This would enable starting the ICD-S software
via toolbar button.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 5 of 36

Figure-2.2-3 Device Debugger/Programmer Options Menu


6. The software setup is complete. We can type the source code and compile it and transfer the file to
the PIC chip as illustrated in Figure2.0-3. After single clicking the “compile” command button on
the toolbar and generating the .hex file, we can single click the “program chip” command button.
These coomand buttons are illustrated in Figure 2.2-4.

Figure2.2-4 The CCS Compiler


7. After the “program chip” command button is pressed the ICD V2.7 program is initiated. First we
check the RS-232 communications, the ICD-S and the PIC16F877 by using the following
command buttons respectively: “Check COMM”, “Test ICD”, “Test Target”. If all of them check
to be OK, now we can browse and transfer the .hex file to the chip by using “Download to target

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 6 of 36

Command button”. After the .hex file is transferred, now we can run the software and test its
functionality by clicking on “Run Program” command button. (Figure2.2-4)
8. Since the software is tested now the ICD-S can be disconnected and the Development board can be
powered up and the .hex file can be run without being connected to the computer.

Figure2.2-5 ICD Control Program

3. PIC16F877 Microcontroller
In this section, properties of PIC16F877 microcontroller,CCS compiler, ICD-S, the
reference book “Embedded C programming and the microchip PIC” are briefly explained to give a
general idea; it may seem confusing for a first time reader who is not familiar to microcontrollers
technology or C programming. However, as the funtionality of the components such as timers, A/D
converters, I/O Ports are explained in detail in Section 3 as they are being used in the experiments, the
fundemental concepts would be better understood and, the reader can flashback to this section to view
the schematics and the specifications.

PIC16F877 is one of the most commonly used microcontroller especially in


automotive, industrial, appliances and consumer applications. In Figure –1, the block diagram of the
PIC16F877 is illustrated.
The core features of PIC16F877 are:
• 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

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 7 of 36

• 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

The peripheral features of the PIC16F877 are:

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

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 8 of 36

The Pinouts of the PIC16F877 is given in Figure 3.0-2

Figure-3.0-1 PIC16F877 Block Diagram

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 9 of 36

Figure 3.0-2 Pin diagram of PIC16F877

3.1. Flash PIC development board

Usually, a microcontroller by itself is not sufficient to perform the intended tasks. For instance, an
oscillator chip is necessary to time the programmed instructions. In order to investigate the
capabilities or to test a given microcontroller, obviously it is vital to build the proper circuitary.
Example: potentiometer and a power supply to simulate analog inputs or LEDs to simulate the digital
outputs. Hence, some hardware and sofware vendors provide the microcontroller with the
supplemantary circuit elements on the same breadboard. These boards are called Development
Boards. One can also build a development board himself/herself if he/she is willing to go through the
painsaking process of building the circuit.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 10 of 36

Figure-3.1-1 FlashPIC Development Board

The development board used in the series of experiments is Flash PIC development board.
(Figure3.1-1) It has the following features:

- RS232 through a 9-Pin D-Shell as well as screw terminals and a jumper header.
- Up to 32K words of In-System Programmable FLASH memory with up to 256
bytes of EEPROM and up to 1.5K of Internal RAM (depending on processor
selection).
- Up to 8, 10 bit, Analog Inputs, using either internal or user supplied reference.
- 9 I/O controlled LEDs, 8 of which are jumper selectable.
- 32KHz “watch” crystal for on-board Real-Time operations.
- A universal clock socket allows for “canned oscillators”, as well as a variety of
crystals, ceramic resonators, and passive terminations.
- 0.1” centered headers provide for simple connection to the processor special
function pins and I/O.
- A 6-pin, ICD connection is provided for in-system programming and debugging.
This connection is directly compatible with the Microchip ICD, ICD2 and CCS
ICD-S programming hardware. Flash PICs can also be programmed through
RS232 using an appropriate boot loader application.
- On-board regulation allows for power inputs from 8-38VDC with an LED power
indicator.
- Termination is provided for 5VDC output at 250ma

3.2. CCS PIC-C compiler


The CCS PCW compiler is specially designed to meet the special needs of the PICmicro MCU
controllers. These tools allow developers to quickly design application software for these controllers
in a highly readable, high-level language.
The compilers has some limitations when compared to a more traditional C
compiler. The hardware limitations make many traditional C compilers
ineffective. As an example of the limitations, the compilers will not permit
pointers to constant arrays. This is due to the separate code/data segments in

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 11 of 36

the PICmicro MCU hardware and the inability to treat ROM areas as data. On
the other hand, the compilers have knowledge about the hardware limitations
and do the work of deciding how to best implement your algorithms. The
compilers can efficiently implement normal C constructs, input/output operations
and bit twiddling operations.
The compiler can output 8 bit hex, 16 bit hex, and binary files. Two listing formats
are available. Standard format resembles the Microchip tools and may be
required by some third-party tools. The simple format is easier to read. The
debug file may either be a Microchip .COD file or Advanced Transdata .MAP file.
All file formats and extensions are selected via the Options|File Formats menu
option in the Windows IDE.
The usage of the copiler is explained in Section 2.0 Getting started. The reference book
“Embedded C Programming and the Microchip PIC” comes with a demo version of the compiler.

3.3. ICD-S Debugger/Programmer


The ICD-S programmer is the hardware/firmware interface to burn the .hex files to the Microchip
PIC. The ICD unit works with CCS's PCW debugger or CCS's stand-alone ICD control software.
CCS's PCW debugger is a very robust debugger integrated with PCW, and provides very detailed
debugging information at the C level. The stand-alone control software allows you to quickly
program target chips using ICD's ICSP. The control software also lets you update the ICD unit's
firmware without having to remove the chip from the ICD unit. (Using these software tools requires
you to have loaded the CCS-ICD firmware onto the ICD unit, which is loaded by default).
Authors note 01/22/04 : I found it odd that prllc.com does not provide a freeware program like “AVR
bootloader.exe” for FlashPIC Development board as they do for Atmel AVR development board, that
would enable programming the chip via serial communication connector P1 in-built to the
development board. I don`t think that Development board and Compiler vendors should force the
costumers to buy products like ICD-S where an option like programming via serial link exists. I have
seen a program in http://sjeffroy.free.fr/Prog__PIC/BootLoader/bootloader.html which seems like it
might work given the fact that bootloader file “loader.hex” pre-exists on the chip. Personally, I did
not try running this program and programming the chip via RS-232.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 12 of 36

Figure-3.3-1 FlashPIC Development Board

3.4. The Reference Book: Embedded C Programming and the Microchip PIC by Barnett, Cox
and O’Cull
This book is a good guide for introducing the microcontroller technology. First chapter is dedicated to
teaching basic C programming however, this book shouldn’t be considered a C programming
handbook. One should always have a book like: Teach yourself C by Zhang ISBN 0-672-31861 as a
C programming reference guide for beginners.

This book is designed to teach C language programming as it applies to embedded microcontrollers


and to fuel knowledge in the application of the Microchip family of PIC microcontrollers. Coverage
begins with a step-by-step exploration of the C language showing readers how to create C language
programs to solve problems. PIC processors are then studied, from basic architecture to all of the
standard peripheral devices included in the microcontrollers. Numerous worked-out example
programs demonstrate common uses for each of the peripherals. Readers are subsequently introduced
to the built-in functions available in C, to speed their programming and problem solving. Finally,
readers are taken through use of the C Compiler, and to help custom learn to efficiently develop
projects.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 13 of 36

Figure-3.4-1 Embedded C Programming and the Microchip PIC

Included with the book is a CDROM containing samples all of the example programs from the
book as well as an evaluation version of the CCS-PICC Compiler.

Author`s note 01/22/04 : In the first examples and projects in chapter 1, functions like “scanf” and
“printf” are used that require prior knowledge to interface the board through RS-232 which is introduced
in the late chapters of the book. It might be discouraging for the student not being able to do the first
project of the book, hands-on. Although I was able to find answers to most of my questions about using
the C compiler and the hardware however, I had to do a lot of skipping between chapters and Appendixes
to find these answers which was time consuming. In general it is a nice and descriptive text book.

4. Experiments
The most quick and effective way of learning a new topic is, having hands on experience. In this section
we will conduct some experiments using the FlashPIC Development board to which would give us a
jump start on in PIC usage.

4.1. LED Experiment

The digital I/O and the timers will be discussed with this experiment. The program will count
from 0 to 255 and output the binary equivalent of this number to PortD every 2 seconds. The digital I/O
peripherals are discussed in detail in the next experiment “Dipswitch”. In this experiment we will focus
on the usage timers.
Timers and counters are one of the most commonly used perpheral in a microcontroller. They can
be used to measure time periods, speed and provide output signals in a specified rate.
The PIC16F877 has 4 timers timer0, timer1, timer2 and watch dog timer. Timer0 and timer2 are 8
bit timers and timer1 is a 16bit timer. The inportant issue is to know when the counter reaches the
maximum value (255 in 8 bit timers and 65,535 is 16bit timers) and rolls over.

The watch dog timer is a safety device. When an unepected event occurs, the watch dog timer resets the
microcontroller. In this experiment we will use the watch dog timer as our timer to time the digital
output.

#use delay(clock=10000000, RESTART_WDT)

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 14 of 36

The command line above, is used to tell the compiler to insert an appropriate code to automatically reload
the WDT during delay functions.

“delay_ms(2000)” command line is used to place a delay the event 2000ms in every cycle of the while
loop. “output_d(z)” command line is used to output the digital number through portD.

Instructions:

1. We type the code in Figure4.1-1, compile it and program the chip as explained in Section 2. The
code can also be downloaded from here ledwdt.c.

Figure4.1-1 The source code for the LED experiment


2. We can unplug the ICD-S and run the experiment and observe the progress of the count every 2
seconds.
]
4.2. Dip switch Experiment
The goal of this experiment is to illustrate digital inputs and outputs. An 8 bit binary number is
introduced using an 8-position dip switch. The input representing the 8 bit digital number is given
through the PIC16F877 through portB using the dipswitch circuit. The software outputs this binary
number via portD LEDs.

There are 5 I/O ports in the in the PIC16F877. The individual bits and the whole channel can set to
digital inputs or outputs. The following commands are used to set the ports to output:

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 15 of 36

set_tris_d( 0x00 )
set_tris_b( 0xFF )

With these command lines, port D and port B is set to output and input respectively. The following
commands to read and input from port B and write it to port D respectively.
z=input_b()
output_d(z)
The following command is also used to activate the port B pullups.
port_b_pullups(TRUE)
The procedure for the experiment:
1. Place the dipswitch, (4.2-1) 8 pin header and single pin header as illustrated in Figure4.2-2 on the
component side of the board and solder them on the solder side of the board. Only the holes which
have been used are illustrated in Figure 4.2-2.

Figure-4.2-1 The 8 Position Dip Switch

Figure-4.2-
2 The layout of the dipswitch breadboard

2. One side of the switch is jumped together and tied to common ground. The single pin header is
jumped to the common ground of the development board using an alligotor clip. The other side of

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 16 of 36

the switch is tied to Port B using a ribbon cable. See Figure-4.2-3 and Figure-4.2-4.

Figure-4.2-3 Schematics of the Dip Switch Circuit

4.2-4 Connection details of the dip switch circuit to the Development Board

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 17 of 36

4.2-5 The experiment setup

3. We type the code in Figure4.2-6, compile it and program the chip as explained in Section 2. The
code can also be downloaded from here dip.c. Note that the I/O process is located in an infinite
loop with the while(1) command line. Hence, the program is constantly reading from port B and
writing to Port D.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 18 of 36

4.2-6 The source code for the dip experiment

4. We can unplug the ICD-S and run the experiment and observe the binary numbers change as we
change the dip switch positions.

4.3. ADC Temperature Measurement


In this experiment, the usage of the in built 10-bit Analog to Digital Converter will be demonstrated.
The temperature sensor LM35 is wired to channel 1 of the ADC port; portA. Then this temperature
sensor is dropped in boiling water which is left in room temperature to cool down and the temperature is
read and recorded by the PIC16F877 every 5 minutes. Since the LM35 is not water proof, the chip is
placed in a container and the container shall be sealed.
The procedure for the experiment:
1. Wire the LM35 to channel 1 of PortA and the power supply (9V battery) The pin out of the LM35
is given in Figure 4.3-1. The wiring shematic is given in Figure 4.3-2. Jumpers are placed on the
unused analog channels to prevent the cross talk between channels and noise.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 19 of 36

Figure 4.3-1 Pin out of the LM35 Temperature Sensor

Figure 4.3-2 The wiring schematics for the temperature sensor experiment

2. Type the following code (Figure 4.3-3) and burn it on the chip after compiling it. By implementing
the line “#device ADC=10”, the analog to digital conversion is set to 10bit resolution. The LM35
outputs the temperature with the sensitivity of 10mv/oC (Example: 25 oC corresponds to 250mv).
The range of the ADC of the PIC Development Board is 0 to 5V and the ADC conversion is 10bits.
Hence, the resolution is 210-1=1023. So the formula for analog to digital conversion would be;
Temperature in Celsius = 5.00 * Voltage read from LM35 * 100.00/1023.00

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 20 of 36

Figure 4.3-3 Source code for the temperature sensor experiment


3. The LM35 is not waterproof. Hence, we need to place it in a plastic sphere (like the ones in the
bubblegum machines) and epoxy the hole to seal the sphere. Before sealing the sphere for good, we
need to put some weight (Example: coins nuts and bolts) in the sphere to prevent the sphere from
floating in the water. (See Figure 4.3-4) We need to keep the water level low so that we do not soak
the wires coming out of the plastic sphere in hot water.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 21 of 36

Figure 4.3-4 Overall experiment setup with the LM35 sealed

4. In this application, the RS-232 communications will be used as the data interface between the PC
and the PIC16F877 development board. Notice that PIC Flash Development board comes with 2
separate means of serial communications which are marked in Figure 4.3-5.

Figure 4.3-5 RS-232 Communication pins


Due to the convenience of using a standard RS-232 cable one would prefer to use the
standard DB-9 connector which is labeled P1 however, the transmit and receive pins for this

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 22 of 36

cable/connector do not match the transmit and receive pins for the standard RS-232 cable
so, we have to use the screw terminal RS-232 communications which is labeled RS232. So we cut
the female connector off the standard RS-232 cable and strip the connector down to its shell.
(Figure 4.3-6)

Figure 4.3-6 DB9 Female connector


Now we can solder the Receive(R-pin number 3 ), Transmit(T-pin number 2) and Ground
(G-pin number 5) pins according to the wiring schematic given in Figure 4.3-7. Keep in mind that
this wiring scheme is given from the front view of the connector. The picture of the wiring is in
Figure 4.3-8.

Figure 4.3-7 Wiring Schematics of the RS-232 communications

Figure 4.3-8 View of the Development board with RS-232 communications established

5. After checking the wiring and making sure the LM35 is sealed properly, we can power up the
development board and plug in the RS-232 serial communications cable to the computer and start
the hyper terminal application which will be used for data acquisition. The usual path of the hyper
terminal is start menu>Programs>Accessories>Communications>hyperterminal. Settings of the

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 23 of 36

hyper terminal communications is given in Figure 4.3-9.

Figure 4.3-9 Hyper terminal Communications Settings


Now we are ready to acquire data. Due to the while loop we have implemented in the source code,
it will take 5minutes to acquire our first set of data. It would be convenient to delete the ten “delay_ms
(30000)” lines and put a single delay_ms(500) to test if we are acquiring meaningful data. Depending on
the applications unfortunately, RS-232 is somewhat a troublesome communication link. If you experience
problems with communications, make sure the ICD-S software is not running and ICD-S is not plugged
in the development board, try connecting and disconnecting until communications is established. If there
are problems with the acquired data, we should try recycling power of the development board and
rebooting the PC. A screen shot of the hyper terminal screen is given in Figure 4.3-10.

Figure 4.3-10 Screen Shot of the hyper terminal screen


6. The values recorded through hyper terminal screen can be saved as a text file and be opened in
MS Excel and plotted. The results of the experiment are given in Figure4.3-11. Notice that the

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 24 of 36

first and second values of the curve is 52 and 79. Since the water is boiled we would expect the first
reading to be 100oC. However, the coins and the plastic bulb, which is at room temperature
initially, absorbs some of the energy therefore the temperature drops significantly and reaches a
steady state 79 oC before decaying.

Figure 4.3-11 Cooling curve of the boiled water in ADC thermistor experiment

4.4. Open Loop and Close Loop Temperature Control


As a final experiment we will get a chance to deploy all the features of PIC16F877, which
we previously have investigated. In addition to these features we will also learn how the usage of
a 8-bit Digital to Analog Converter (DAC).
As in the ADC experiment, the temperature sensor LM35 is placed into a cup of water.
This cup is also exposed to hot air from a blow dryer which can be considered as a disturbance to
the system intended to be controlled. Speed of a PC fan is regulated, to keep the water
temperature at 27oC. Obviously, we should not ignore the effects of the natural convection as an
additional disturbance. Two different controls approaches are used while regulating the
temperature:
‰ Closed Loop Control: The fan speed is adjusted according to the temperature feedback every
time step. The generic block diagram of the control system is given in Figure 4.4.1.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 25 of 36

Figure 4.4-1 Generic Block Diagram of Closed Loop Temperature Control System

‰ Open Loop (Bang Bang) Control: The fan is either turned on at maximum speed or turned off
depending on temperature feedback exceeding the temperature goal. Actually, this control
system can also be considered to be close loop since the control system responds to a
feedback, however since the feedback only triggers a switching operation, it is considered an
open loop operation. The generic block diagram of is given in Figure 4.4-2.

Figure 4.4-2 Generic Block Diagram of Open Loop Temperature Control System
The procedure of the experiment:
1. As the first step of the experiment, we will build our DAC/LF353 Op-Amp Circuit.
A schematic of the DAC /Op-Amp circuit is given in Figure 4.4-3. The theory of operation for this
circuit is that when an eight bit word is sent to the digital to analog converter (DAC), the DAC outputs a
current that is defined in equation 2.1.
Equation 4.4. 1

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 26 of 36

Vref word
I out = *
R fb 256
Where :
I out = Output Current
Vref = Reference Voltage
R fb = DAC' s Internal Resistance
word = Eight Bit Word Input to DAC

The output current is then fed into the op amps of the LF353 integrated circuit. The output from the
LF353 circuit is defined:
Equation 4.4. 2
⎛ word − 128 ⎞
Vout = Vref ⎜ ⎟
⎝ 128 ⎠
Where :
Vout = Voltage Output form Overall Circuit
Vref = Reference Voltage
word = Eight Bit Word Input to DAC

The DAC/LF353 card takes a digital word as an input, and outputs a proportional voltage. In this
application the digitalword of 181 will result in an output voltage of 4.2 V, given a reference voltage of
+12 V. 181 corresponds to fan’s minimum speed. Digitalword of 255 will produce output of 7.5V which
is the maximum speed of the fan. All the pins of PortD of the PIC16F877 is set for output and they are
wired to the DAC/LF353 circuit. Illustration of DAC/LF353 circuit is given in Figure4.4-4.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 27 of 36

Figure 4.4-3 Schematics of the DAC/LF353 Op-amp circuit

Figure 4.4-4 DAC/LF353 Op-amp circuit

2. As the second step we can build our TIP31 Power Transistor Circuit. A schematic of the TIP31
power transistor circuit may be found as Figure 4.4-5 This circuit is necessary because motors do not
run on voltage, rather they run on current. The current is obtained from an external power supply,
which is added proportionally to the voltage that is input to the TIP31 circuit. The TIP31 works by
reading a reference voltage from its base pin (b), then an equivalent voltage supplied by the a source
attached to the collector (c), is allowed to pass to the emitter (e). This allows for an external power
supply to be regulated by a low current circuit. The DAC/LF353 Op-amp circuit is illustrated in
Figure 4.4-6.

Figure 4.4-5 Schematics of the Power Transistor TIP31 Circuit

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 28 of 36

Figure 4.4-6 Power Transistor TIP31 Circuit

3. For this experiment, as we review the schematics, it is evident that we need a power supply which
can give us the following voltages:12V,-12V and 5V. We can use a common PC power supply for
this application. However we need to make a slight modification to the power supply. The PC power
supplies are switching supplies. Hence, they require proper amount of load to be operational. The
following site is a nice guide for modifying PC power supplies for general use:
http://web2.murraystate.edu/andy.batts/ps/powersupply.htm. The main idea is to add a 10ohm 10watt
resistor across 5V and common to apply the necessary load for operation. However, the resistor gets
extremely hot; so, it would be appropriate to apply a heat sink on the resistor and place the resistor in
front of the power supply fan (Figure-4.4-7) to avoid resistor failure which would eventually lead to
power supply failure.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 29 of 36

Figure 4.4-7 Power supply with load applied

4. Now we can start assembling the circuit. The reference voltage of DAC/LF353 is tied to +12V of the
power supply. The grounds of all the components (Development board, LM35, DAC/LF353, TIP31
Power transistor circuit/DC Fan) are tied to the power supply ground. The output voltage of Pin7 of
LF353 is tied to the TIP31 base. The LM35 is wired as described in section 4.3 ADC Experiment.
This time instead of using a 9V battery to power the LM35, we can use 5V power supply. The RS-
232 communications cable is wired as described in the ADC experiment in section 4.3 and is plugged
into the computer. We also need a blow-dryer for this experiment as a disturbance to the system as
described above. While doing the wiring, preparing the hardware necessary for this experiment, be
sure to check the wiring before putting power to it. Each sub-assembly should be tested separately
before putting the experiment setup together as a whole. For instance, once the DAC/LF353 circuit is
prepared, run the dip.c program and check if the voltages correspond to the digitalwords using a
voltmeter. The Experiment setup is illustrated in Figure-4.4-8.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 30 of 36

Figure-4.4-8 The Experiment Setup

5. We are ready to program the chip. The code given in Figure4.4-9 is used for the close loop
application. The code is also provided in file project3.c. There aren’t any new commands introduced
with this code. The digitalword=181 can be considered as the threshold value which gives 4.2V and
generates enough current through the TIP31 circuit so that the fan rotation starts. Furthermore, the
digitalword=255 generates 7.5V which generates the highest speed using the hardware listed in this
section. So, we can control the speed through the digital word ranging from 181 to 255. The
resolution is 255-181=74 steps. We use Kp=2.5 as the proportional gain of the control system. This
seems to be an ideal value for the operational range and the cooling load involved.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 31 of 36

Figure4.4-9
The source code for the Open Loop (Bang-Bang ) Control is given in Figure4.4-10. It is also
available with file project3bb.c. The temp_comparator variable compares the temperature feedback with
the target temperature and switches the fan on at full speed or off.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 32 of 36

Figure4.4-10
6. We are ready to program the chip and start the experiments. In the first experiment, the initial
temperature of the water is chosen to be 42oC. As stated before, the target temperature is 27 oC. In the
second experiment the, the water is heated from 16 oC to the target temperature 27oC. These two
experiments are conducted both using the close loop and open loop program. The data recording is
performed via the hyperterminal screen as described in Section 4.3. All the recorded data is also
provided in Appendix A in Excel Spreadsheets.
Cooling Experiments:
In Figure4.4-11 and Figure4.4-12, the results Close Loop and Open Loop cooling are given
respectively. While reviewing the graphs, keep in mind that, the negative speed commands mean
digital words smaller than 181 which correspond to motor currents smaller than the threshold level for
the DC Fan to move. So, the DC Fan does not move with the negative speed commands. These

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 33 of 36

values are given only to illustrate how digitalword changes with varying temperature level.
The closed loop system cools down to the steady state between 500sec and 2200sec. So, it takes
roughly 1700 seconds for it to cool down. However for the open loop system, since the fan is
commanded to its maximum speed while the temperature is higher than the target, it takes much less
time (1800-500=1300sec) for it to cool down to the desired steady state. In the closed loop system,
the system seems to be critically damped since there is steady state error and no overshoot. We can
increase the gain and check the overshoot if a faster responding system with minimal steady state
error is desired.

Figure4.4-11 Cooling Curve for Close Loop Fan Speed Control

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 34 of 36

Figure4.4-12 Cooling Curve for Open Loop Fan Speed Control


Since in the open loop cooling, temperature feedback is intermittently under the influence of noise,
the control system becomes unstable especially around 1000 second mark. If the effects of noise
becomes more significant, a low pass filter can be added to the circuit; but in this case the effect is
minimal. Since the fan is either turned on or off, the fan commanded speed takes values either 0 or 74
as we converge to the steady state. One might find it difficult to follow what speed commands are
given at each time-step to the DC fan at steady state temperature. The Excel Sheets given in
Appendix A can be used for more thorough analysis of the data.

Heating Experiments:
In Figure4.4-13 and Figure4.4-14, the results Close Loop and Open Loop cooling are given
respectively. Since in both close loop and open loop system the fan is off before converging to steady
state, the rise time for both systems are roughly the same which is approximately 1000sec. We
observe intermittent electrical noise problems which do not impact the control system performance
significantly. In close loop control mode, around 2300sec mark, after the system reaches steady state,
the hairdryer is moved closer to the cup, in order to experiment increasing the effect of the
disturbance. 60 seconds later the temperature starts increasing. Roughly 100seconds later, the control
system starts to stabilize the increasing temperature and around 2500second mark, the temperature is
back to target temperature. This is a good indication that the system responds very slowly to varying
disturbances.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 35 of 36

Figure4.4-13 Heating Curve for Open Loop Fan Speed Control

Figure4.4-14 Heating Curve for Open Loop Fan Speed Control


7. For the heating, the performance of the open loop and close loop systems are very similar. As the
results are reviewed for cooling , the close loop control system seems to be critically damped.
Obviously, we can improve the rise time by increasing the gain. Since we get a better rise time for
the open loop system and it takes less time to reach steady state, it is more preferable over the Closed
Loop system with proportional gain of Kp=2.5.

mc_prayer 7/3/2010
PIC16F877 Microcontroller Tutorial revA Page 36 of 36

5. Where do we go from here?

Now that we have explored basics of the PIC16F877 and the compiler, we are ready to
conduct more advanced experiments. Good luck!

Note for Dr Oh`s student who will replicate this effort: Please don’t hesitate to contact me
from cy56@drexel.edu and phone:215 378 39 88 if you have any questions. Leave a message and
I definitely will return your call.

mc_prayer 7/3/2010

You might also like