Timer 0 - Delay Using Polling

Hardware Timers are built into most microcontrollers and can be a useful timebase for many projects. This project demonstrates how to use a timer to create a delay for a blinking LED.

proj1.png

Step by Step Instructions

Using the MPLAB® Code Configurator (MCC), this project generates the code to blink an LED using a hardware Timer 0 to generate the delay between the On and Off state.

proj1pic.png

The project uses:

PICDEM™ Lab II Connections:

  • Connect 5 V and Gnd to the power bus of the protoboard.
  • Connect 5 V to the Vdd pin of the PIC16F1508
  • Connect Gnd to the Vss pin of the PIC16F1508
  • Connect a wire from the RA2 pin (pin 17) to the breadboard Row 23
  • Connect a wire from the ground bus to breadboard Row 27
  • Connect the LED Anode to breadboard Row 23
  • Connect the LED Cathode to breadboard Row 24
  • Connect a 330 ohm resistor between Row 24 and Row 27

To follow along with these steps, MPLAB® X should be open and the Programmer/Debugger connected to both the computer and the Development Board. The setup was described in the Setup and Installation section of this training module. You should see a screen similar to the one below to move on to step 1.

mplabx.png

1

Create a new "Stand-Alone" project in MPLAB® X for a PIC16F1508. Instructions are below if this is your first project.

2

Open the MPLAB® Code Configurator under the Tools -> Embedded menu of MPLAB® X IDE.

mcclaunch.png

3

Select the peripherals for your project.
In this first project these peripherals need to be selected:

  • System Module
  • Interrupt Module
  • Pin Module
  • TMR0

The System Module, Interrupt Module and the Pin Module will all be automatically included when you launch the MCC. TMR0 needs to be added from the Device Resources area. Just click on the Timer category and then double click on the Timer 0 to add it to the project. The result should look like the picture below:

proj4per.png

4

Open the Pin Manager and then click on the PORTA pin 2 (RA2) Output blue lock symbol. It should turn green. This adds this RA2 I/O pin to the project. Also make sure the Reset pin has the blue lock shown. If it's green then click on the green lock to make it blue. This will make the Reset internal. It should look like the picture here when completed:

proj4io2.png

5

Close the Pin Manager and then click on the Pin Module selection in the Project Resources section.

gpio.png

The center screen should show RA2 listed on the I/O chart. Click on the output box to make the pin an output (if not checked) and make sure Analog and WPU are not checked (click on them to uncheck them).

proj1ioset.png

6

The System needs to be setup next. Click on the System name in the Project Resources list.

system.png

The System section will appear. In this section the oscillator settings and the configuration settings are selected.

Oscillator

  1. Select the INTOSC from the drop down menu for the System Clock Select.
  2. Select the 1MHz_HF selection from the Internal Clock drop down menu.

This will enable the internal 1 MHz internal oscillator as the system clock.

oscillator.png

Configuration

Each configuration setting can be changed under the Register tab of the System window. Match the selections shown here.

config1.png
config2.png

7

Timer0 needs to be setup. Click on the TMR0 label in the Project Resources menu to make the Timer0 setup screen appear.

tmr0.png
  1. Check the Enable Prescaler box and select the 1:256 selection from the drop down menu.
  2. Click on the Clock Source and select Internal (Fosc/4). This will select the instruction clock as the clock input to the Timer0.
  3. Input 250 into the Period box and it will change to the exact value of 249.856 ms. This is the closest the setup can get to a 250 millisecond delay. This will set the Timer0 to overflow every 250 milliseconds (249.856 ms actually).

The window should look like the one below after the proper setup:

tmr0setup.png

8

Click on the Generate Code button to have the MCC create the software libraries for this project.

generate.png

9

The project will now have both generated Header Files and Source Files. It should also have a generated main.c file.
Note: MCC may offer to generate a main.c file. Click YES to allow it to complete that task.

proj4files.png

Double click on the main.c file to open it up in the editor window.

mainfile.png

10

Timer0 will run until it overflows and then it will set a Timer Oveflow Bit (T0IF) and keep running. The software routine just has to monitor that T0IF bit and when it's set, toggle the LED from OFF to ON or ON to OFF. Then software must clear the T0IF bit so it can be set again on the next overflow.

Add the following code to the end of the main.c file:

 while (1)
    {
        // Add your application code
        if (TMR0_HasOverflowOccured()) //Has Timer0 Overflowed?
        {
            IO_RA2_Toggle(); //Switch state of RA2 LED when overflow occurs
            TMR0IF = 0;      //Clear the Timer0 overflow flag
        }
    }
maincode4.png

Note: The TMR0_HasOverflowOccured() and IO_RA2_Toggle() functions are generated by the MCC and their definitions are located in the pin_manager.h file.

This is a simple example of how the MCC generates a library of useful functions to make creating project code much easier and quicker.

11

Click on the Build Project icon (the hammer) to compile the code; you should see a BUILD SUCCESSFUL message in the output window of MPLAB X IDE.

Main_Build_Project.png
BUILD SUCCESSFUL (total time: 4s)

12

Make sure your project has the programming tool selected and power is supplied to your development board.

The PICkit 3 has limited power capability so we recommend powering the board separately.
The ICD 3 can power a development board, but for the sake of simplicity, we recommend powering the board separately.
The Real ICE cannot power the development board so powering the board separately is required.

Click on the Make and Program Device icon. This will build the project again and launch the programmer. In the output window you should see a series of messages and, if successful, it will end with a Programming and Verify Successful message and the LED connected to RA2 should be blinking quickly on the PICDEM™ Lab II Development Board.

Main_Program_Target_Project.png
Connecting to MPLAB^^®^^ PICkit 3...
Firmware Suite Version.....01.34.11
Firmware type..............Enhanced Midrange

Target detected
Device ID Revision = 6

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x7ff
configuration memory
Device Erased...

Programming...
Programming/Verify complete
ra2lit.jpg

If it's the first time the programmer is connected to the board, the programming tool may need to download the proper operating firmware for the exact device. You may see a series of processes if this occurs. This should only happen once:

Downloading Firmware…
Downloading bootloader
Bootloader download complete
Programming download…
Downloading RS…
RS download complete
Programming download…
Downloading AP…
AP download complete
Programming download…
Firmware Suite Version…..01.34.11
Firmware type…………..Enhanced Midrange

13

The project can be closed in MPLAB® X IDE. The project is saved automatically when it is built, but any changes to files or configuration may ask to be saved before the project is closed.
The project can be closed under the File Menu > Close Project

closeproject.png

Download

If you have any problems with your project, the completed MPLAB® X project file can be downloaded from the link below:

File Download
Installation
Instructions
Windows Linux Mac OSX
Project 4 Files

20th Annual
Microchip MASTERs Conference 2016
Register now - Deadline: July 29

JW Marriott Desert Ridge Resort-Phoenix, AZ

© 2016 Microchip Technology, Inc.
Information contained on this site regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer's risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.