Difference between revisions of "PIC16F877A PWM"
Line 77: | Line 77: | ||
=Example= | =Example= | ||
− | Program to demonstrates the variable PWM signal generation | + | Program to demonstrates the variable PWM signal generation. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Revision as of 09:31, 9 May 2016
In this tutorial we are going to discuss the PWM module of PIC16F877A.
First we will see how to configure the PWM registers to generate signals of required PWM, At the end we will see how to use the ExploreEmdedded PWM library.
Contents
PIC16F877A PWM Module
PIC16F877A microcontroller has two independent CCP(Capture/Compare/PWM) modules, named as CCP1 and CCP2. Each CCP module has two 8-bit resistors(CCPxH,CCPxL) that can be use as:
- 16 bit Capture Register
- 16 bit Compare Register
- 10-bit PWM Regsietrs .
In this tutorial we will be discussing only the PWM part of CCP. PIC has 2PWM module with a resolution of 10-bits. The 8-Msb bits are stored in CCPRxL and remeining 2-bits in CCPxCON register. Below tables shows the PWM module of PIC.
PWM Channel | Port Pin | Control Register | Duty Cycle Register |
---|---|---|---|
PWM1 | PC.2 | CCP1CON | CCPR1L |
PWM2 | PC.1 | CCP2CON | CCPR2L |
PIC16F877A PWM Registers
The below table shows the registers associated with PIC16F877A PWM.
Register | Description |
---|---|
CCPxCON | This register is used to Configure the CCP module for Capture/Compare/PWM opertaion. |
CCPRxL | This register holds the 8-Msb bits of PWM, lower 2-bits will be part of CCPxCON register. |
TMR2 | Free running counter which will be compared with CCPR1L and PR2 for generating the PWM output. |
Register Configuration
The below table shows the registers associated with LPC1768 PWM.
CCPxCON | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
— | — | CCPxX | CCPxY | CCPxM3 | CCPxM2 | CCPxM1 | CCPxM0 |
CCPxX:CCPxY: PWM Least Significant bits
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);
11xx - PWM mode
Steps to Configure PWM
- Configure the GPIO pins for PWM operation in respective PINSEL register.
- Configure TCR to enable the Counter for incrementing the TC, and Enable the PWM block.
- Set the required pre-scalar value in PR. In our case it will be zero.
- Configure MCR to reset the TC whenever it matches MR0.
- Update the Cycle time in MR0. In our case it will be 100.
- Load the Duty cycles for required PWMx channels in respective match registers MRx(x: 1-6).
- Enable the bits in LER register to load and latch the new match values.
- Enable the required pwm channels in PCR register.
Example
Program to demonstrates the variable PWM signal generation.