RRNegi
Junior Member level 2
I am working on PIC18F4550 microcontroller to generate PWM of diffferent duty cycle. In PIC18F4550 timer2 is used for PWM. What is the use of prescaler and postscaler in timer2 for generating PWM?
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 #define NCP5623_ADDRESS 0x70 #define CHIP_SHUTDOWN 0b00000000 #define SET_MAX_LED_CURRENT 0b00100000 #define PWM_RED_LED 0b01000000 #define PWM_GREEN_LED 0b01100000 #define PWM_BLUE_LED 0b10000000 #define TARGET_UPWARD_IEND 0b10100000 #define TARGET_DOWNWARD_IEND 0b11000000 #define GRADUAL_DIMMING_STEP_TIME 0b11100000 #define LED_CURRENT_16 0b00010000 #define LED_CURRENT_8 0b00001000 #define LED_CURRENT_4 0b00000100 #define LED_CURRENT_2 0b00000010 #define LED_CURRENT_1 0b00000001 #define BPWM16 0b00010000 #define BPWM8 0b00001000 #define BPWM4 0b00000100 #define BPWM2 0b00000010 #define BPWM1 0b00000001 #define GDIM16 0b00010000 #define GDIM8 0b00001000 #define GDIM4 0b00000100 #define GDIM2 0b00000010 #define GDIM1 0b00000001 #define GDIM128ms 0b00010000 #define GDIM64ms 0b00001000 #define GDIM32ms 0b00000100 #define GDIM16ms 0b00000010 #define GDIM8ms 0b00000001 unsigned char i = 0; void NCP5623_Shutdown() { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); I2C1_Wr(CHIP_SHUTDOWN); I2C1_Stop(); } void NCP5623_Set_Led_Current(char value) { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); if((value == LED_CURRENT_16) || (value == LED_CURRENT_8) || (value == LED_CURRENT_4) || (value == LED_CURRENT_2) || (value == LED_CURRENT_1)) { I2C1_Wr(SET_MAX_LED_CURRENT | value); } I2C1_Stop(); } void NCP5623_Set_Red_Led_Brightness(char value) { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); if((value == BPWM16) || (value == BPWM8) || (value == BPWM4) || (value == BPWM2) || (value == BPWM1)) { I2C1_Wr(PWM_RED_LED | value); } I2C1_Stop(); } void NCP5623_Set_Green_Led_Brightness(char value) { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); if((value == BPWM16) || (value == BPWM8) || (value == BPWM4) || (value == BPWM2) || (value == BPWM1)) { I2C1_Wr(PWM_GREEN_LED | value); } I2C1_Stop(); } void NCP5623_Set_Blue_Led_Brightness(char value) { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); if((value == BPWM16) || (value == BPWM8) || (value == BPWM4) || (value == BPWM2) || (value == BPWM1)) { I2C1_Wr(PWM_BLUE_LED | value); } I2C1_Stop(); } void NCP5623_Set_Gradual_Dimming_Upward(char value) { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); if((value == GDIM16) || (value == GDIM8) || (value == GDIM4) || (value == GDIM2) || (value == GDIM1)) { I2C1_Wr(TARGET_UPWARD_IEND | value); } I2C1_Stop(); } void NCP5623_Set_Gradual_Dimming_Downward(char value) { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); if((value == GDIM16) || (value == GDIM8) || (value == GDIM4) || (value == GDIM2) || (value == GDIM1)) { I2C1_Wr(TARGET_DOWNWARD_IEND | value); } I2C1_Stop(); } void NCP5623_Set_Gradual_Dimming_Step_Time(char value) { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); if((value == GDIM128ms) || (value == GDIM64ms) || (value == GDIM32ms) || (value == GDIM16ms) || (value == GDIM8ms)) { I2C1_Wr(GRADUAL_DIMMING_STEP_TIME | value); } I2C1_Stop(); } void NCP5623_Set_Rgb_Brightness(char r_value, char g_value, char b_value) { I2C1_Start(); I2C1_Wr(NCP5623_ADDRESS); I2C1_Wr(PWM_RED_LED | r_value); I2C1_Wr(PWM_GREEN_LED | g_value); I2C1_Wr(PWM_BLUE_LED | b_value); I2C1_Stop(); } void main() { ADCON1 = 0x0F; I2C1_Init(100000); Delay_ms(200); NCP5623_Set_Led_Current(LED_CURRENT_16); NCP5623_Set_Red_Led_Brightness(BPWM16); NCP5623_Set_Green_Led_Brightness(BPWM16); NCP5623_Set_Blue_Led_Brightness(BPWM16); NCP5623_Set_Gradual_Dimming_Upward(GDIM16); NCP5623_Set_Gradual_Dimming_Step_Time(GDIM32ms); while(1) { for(i = 0x01; i < 0x20; i<<1) { NCP5623_Set_Rgb_Brightness(i, i, i); Delay_ms(2000); } Delay_ms(4000); for(i = 0x10; i >= 0x01; i>>1) { NCP5623_Set_Rgb_Brightness(i, i, i); Delay_ms(2000); } Delay_ms(4000); i = 0x01; NCP5623_Set_Rgb_Brightness((i << 4), (i << 2), i); Delay_ms(2000); i = 0x10; NCP5623_Set_Rgb_Brightness(i, (i >> 2), (i >> 4)); Delay_ms(2000); } }
#include <P18F4550.h>
#include <delays.h>
#include <i2c.h>
#pragma config FOSC = HS // Using 20 MHz crystal with PLL
#pragma config WDT = OFF // Disable Watchdog timer
#pragma config MCLRE = ON // Enable MCLR Enable
#pragma config LVP = OFF // Disable low voltage ICSP
void Delay_ms (unsigned int itime);
#define NCP5623_ADDRESS 0x70
#define CHIP_SHUTDOWN 0b00000000
#define SET_MAX_LED_CURRENT 0b00100000
#define PWM_RED_LED 0b01000000
#define PWM_GREEN_LED 0b01100000
#define PWM_BLUE_LED 0b10000000
#define TARGET_UPWARD_IEND 0b10100000
#define TARGET_DOWNWARD_IEND 0b11000000
#define GRADUAL_DIMMING_STEP_TIME 0b11100000
#define LED_CURRENT_16 0b00010000
#define LED_CURRENT_8 0b00001000
#define LED_CURRENT_4 0b00000100
#define LED_CURRENT_2 0b00000010
#define LED_CURRENT_1 0b00000001
#define BPWM16 0b00010000
#define BPWM8 0b00001000
#define BPWM4 0b00000100
#define BPWM2 0b00000010
#define BPWM1 0b00000001
#define GDIM16 0b00010000
#define GDIM8 0b00001000
#define GDIM4 0b00000100
#define GDIM2 0b00000010
#define GDIM1 0b00000001
#define GDIM128ms 0b00010000
#define GDIM64ms 0b00001000
#define GDIM32ms 0b00000100
#define GDIM16ms 0b00000010
#define GDIM8ms 0b00000001
unsigned char ReadI2C1 (void);
void StartI2C1 (void);
void StopI2C1 (void);
unsigned char WriteI2C1 (unsigned char data_out);
unsigned char i = 0;
void NCP5623_Shutdown()
{
StartI2C1 ();
WriteI2C1 (NCP5623_ADDRESS);
WriteI2C1(CHIP_SHUTDOWN);
StopI2C1();
}
void NCP5623_Set_Led_Current(char value)
{
StartI2C1();
WriteI2C1(NCP5623_ADDRESS);
if((value == LED_CURRENT_16) || (value == LED_CURRENT_8) || (value == LED_CURRENT_4)
|| (value == LED_CURRENT_2) || (value == LED_CURRENT_1))
{
WriteI2C1 (SET_MAX_LED_CURRENT | value);
}
StopI2C1();
}
void NCP5623_Set_Red_Led_Brightness(char value)
{
StartI2C1();
WriteI2C1 (NCP5623_ADDRESS);
if((value == BPWM16) || (value == BPWM8) || (value == BPWM4)
|| (value == BPWM2) || (value == BPWM1))
{
WriteI2C1(PWM_RED_LED | value);
}
StopI2C1 ();
}
void NCP5623_Set_Green_Led_Brightness(char value)
{
StartI2C1();
WriteI2C1 (NCP5623_ADDRESS);
if((value == BPWM16) || (value == BPWM8) || (value == BPWM4)
|| (value == BPWM2) || (value == BPWM1))
{
WriteI2C1 (PWM_GREEN_LED | value);
}
StopI2C1();
}
void NCP5623_Set_Blue_Led_Brightness(char value)
{
StartI2C1();
WriteI2C1 (NCP5623_ADDRESS);
if((value == BPWM16) || (value == BPWM8) || (value == BPWM4)
|| (value == BPWM2) || (value == BPWM1))
{
WriteI2C1(PWM_BLUE_LED | value);
}
StopI2C1 ();
}
void NCP5623_Set_Gradual_Dimming_Upward(char value)
{
StartI2C1();
WriteI2C1 (NCP5623_ADDRESS);
if((value == GDIM16) || (value == GDIM8) || (value == GDIM4)
|| (value == GDIM2) || (value == GDIM1))
{
WriteI2C1(TARGET_UPWARD_IEND | value);
}
StopI2C1 ();
}
void NCP5623_Set_Gradual_Dimming_Downward(char value)
{
StartI2C1();
WriteI2C1 (NCP5623_ADDRESS);
if((value == GDIM16) || (value == GDIM8) || (value == GDIM4)
|| (value == GDIM2) || (value == GDIM1))
{
WriteI2C1 (TARGET_DOWNWARD_IEND | value);
}
StopI2C1 ();
}
void NCP5623_Set_Gradual_Dimming_Step_Time(char value)
{
StartI2C1 ();
WriteI2C1(NCP5623_ADDRESS);
if((value == GDIM128ms) || (value == GDIM64ms) || (value == GDIM32ms)
|| (value == GDIM16ms) || (value == GDIM8ms))
{
WriteI2C1(GRADUAL_DIMMING_STEP_TIME | value);
}
StopI2C1();
}
void NCP5623_Set_Rgb_Brightness( char r_value, char g_value, char b_value)
{
StartI2C1();
WriteI2C1 (NCP5623_ADDRESS);
WriteI2C1(PWM_RED_LED | r_value);
WriteI2C1(PWM_GREEN_LED | g_value);
WriteI2C1(PWM_BLUE_LED | b_value);
StopI2C1();
}
void main (void)
{
ADCON1 = 0x0F;
I2C1_Init(100000);
Delay_ms (200);
NCP5623_Set_Led_Current(LED_CURRENT_16);
NCP5623_Set_Red_Led_Brightness(BPWM16);
NCP5623_Set_Green_Led_Brightness(BPWM16);
NCP5623_Set_Blue_Led_Brightness(BPWM16);
NCP5623_Set_Gradual_Dimming_Upward(GDIM16);
NCP5623_Set_Gradual_Dimming_Step_Time(GDIM32ms);
while(1)
{
for(i = 0x01; i < 0x20; i<<1)
{
NCP5623_Set_Rgb_Brightness(i, i, i);
Delay_ms (2000);
}
Delay_ms(4000);
for(i = 0x10; i >= 0x01; i>>1)
{
NCP5623_Set_Rgb_Brightness(i, i, i);
Delay_ms (2000);
}
Delay_ms (4000);
i = 0x01;
NCP5623_Set_Rgb_Brightness((i << 4), (i << 2), i);
Delay_ms (2000);
i = 0x10;
NCP5623_Set_Rgb_Brightness(i, (i >> 2), (i >> 4));
Delay_ms (2000);
}
}
OpenI2C() is added
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 #include <P18F4550.h> #include <delays.h> #include <i2c.h> #pragma config FOSC = HS // Using 20 MHz crystal with PLL #pragma config WDT = OFF // Disable Watchdog timer #pragma config MCLRE = ON // Enable MCLR Enable #pragma config LVP = OFF // Disable low voltage ICSP #define NCP5623_ADDRESS 0x70 #define CHIP_SHUTDOWN 0b00000000 #define SET_MAX_LED_CURRENT 0b00100000 #define PWM_RED_LED 0b01000000 #define PWM_GREEN_LED 0b01100000 #define PWM_BLUE_LED 0b10000000 #define TARGET_UPWARD_IEND 0b10100000 #define TARGET_DOWNWARD_IEND 0b11000000 #define GRADUAL_DIMMING_STEP_TIME 0b11100000 #define LED_CURRENT_16 0b00010000 #define LED_CURRENT_8 0b00001000 #define LED_CURRENT_4 0b00000100 #define LED_CURRENT_2 0b00000010 #define LED_CURRENT_1 0b00000001 #define BPWM16 0b00010000 #define BPWM8 0b00001000 #define BPWM4 0b00000100 #define BPWM2 0b00000010 #define BPWM1 0b00000001 #define GDIM16 0b00010000 #define GDIM8 0b00001000 #define GDIM4 0b00000100 #define GDIM2 0b00000010 #define GDIM1 0b00000001 #define GDIM128ms 0b00010000 #define GDIM64ms 0b00001000 #define GDIM32ms 0b00000100 #define GDIM16ms 0b00000010 #define GDIM8ms 0b00000001 unsigned char i = 0; void Delay_ms(unsigned int mSec); void NCP5623_Shutdown(); void NCP5623_Set_Led_Current(char value); void NCP5623_Set_Red_Led_Brightness(char value); void NCP5623_Set_Green_Led_Brightness(char value); void NCP5623_Set_Blue_Led_Brightness(char value); void NCP5623_Set_Gradual_Dimming_Upward(char value); void NCP5623_Set_Gradual_Dimming_Downward(char value); void NCP5623_Set_Gradual_Dimming_Step_Time(char value); void NCP5623_Set_Rgb_Brightness( char r_value, char g_value, char b_value); void Delay_ms(unsigned int mSec) { while(mSec != 0) { Delay1KTCYx(10); mSec--; } } void NCP5623_Shutdown() { StartI2C(); WriteI2C(NCP5623_ADDRESS); WriteI2C(CHIP_SHUTDOWN); StopI2C(); } void NCP5623_Set_Led_Current(char value) { StartI2C(); WriteI2C(NCP5623_ADDRESS); if((value == LED_CURRENT_16) || (value == LED_CURRENT_8) || (value == LED_CURRENT_4) || (value == LED_CURRENT_2) || (value == LED_CURRENT_1)) { WriteI2C(SET_MAX_LED_CURRENT | value); } StopI2C(); } void NCP5623_Set_Red_Led_Brightness(char value) { StartI2C(); WriteI2C (NCP5623_ADDRESS); if((value == BPWM16) || (value == BPWM8) || (value == BPWM4) || (value == BPWM2) || (value == BPWM1)) { WriteI2C(PWM_RED_LED | value); } StopI2C(); } void NCP5623_Set_Green_Led_Brightness(char value) { StartI2C(); WriteI2C (NCP5623_ADDRESS); if((value == BPWM16) || (value == BPWM8) || (value == BPWM4) || (value == BPWM2) || (value == BPWM1)) { WriteI2C(PWM_GREEN_LED | value); } StopI2C(); } void NCP5623_Set_Blue_Led_Brightness(char value) { StartI2C(); WriteI2C(NCP5623_ADDRESS); if((value == BPWM16) || (value == BPWM8) || (value == BPWM4) || (value == BPWM2) || (value == BPWM1)) { WriteI2C(PWM_BLUE_LED | value); } StopI2C(); } void NCP5623_Set_Gradual_Dimming_Upward(char value) { StartI2C(); WriteI2C(NCP5623_ADDRESS); if((value == GDIM16) || (value == GDIM8) || (value == GDIM4) || (value == GDIM2) || (value == GDIM1)) { WriteI2C(TARGET_UPWARD_IEND | value); } StopI2C(); } void NCP5623_Set_Gradual_Dimming_Downward(char value) { StartI2C(); WriteI2C(NCP5623_ADDRESS); if((value == GDIM16) || (value == GDIM8) || (value == GDIM4) || (value == GDIM2) || (value == GDIM1)) { WriteI2C(TARGET_DOWNWARD_IEND | value); } StopI2C(); } void NCP5623_Set_Gradual_Dimming_Step_Time(char value) { StartI2C(); WriteI2C(NCP5623_ADDRESS); if((value == GDIM128ms) || (value == GDIM64ms) || (value == GDIM32ms) || (value == GDIM16ms) || (value == GDIM8ms)) { WriteI2C(GRADUAL_DIMMING_STEP_TIME | value); } StopI2C(); } void NCP5623_Set_Rgb_Brightness( char r_value, char g_value, char b_value) { StartI2C(); WriteI2C (NCP5623_ADDRESS); WriteI2C(PWM_RED_LED | r_value); WriteI2C(PWM_GREEN_LED | g_value); WriteI2C(PWM_BLUE_LED | b_value); StopI2C(); } void main (void) { ADCON1 = 0x0F; OpenI2C(MASTER, SLEW_OFF);// Initialize I2C module Delay_ms(200); NCP5623_Set_Led_Current(LED_CURRENT_16); NCP5623_Set_Red_Led_Brightness(BPWM16); NCP5623_Set_Green_Led_Brightness(BPWM16); NCP5623_Set_Blue_Led_Brightness(BPWM16); NCP5623_Set_Gradual_Dimming_Upward(GDIM16); NCP5623_Set_Gradual_Dimming_Step_Time(GDIM32ms); while(1) { for(i = 0x01; i < 0x20; i<<1) { NCP5623_Set_Rgb_Brightness(i, i, i); Delay_ms(2000); } Delay_ms(4000); for(i = 0x10; i >= 0x01; i>>1) { NCP5623_Set_Rgb_Brightness(i, i, i); Delay_ms(2000); } Delay_ms (4000); i = 0x01; NCP5623_Set_Rgb_Brightness((i << 4), (i << 2), i); Delay_ms(2000); i = 0x10; NCP5623_Set_Rgb_Brightness(i, (i >> 2), (i >> 4)); Delay_ms(2000); } }