Mikroelektronika MIKROE-738 Datenbogen
![Mikroelektronika](https://files.manualsbrain.com/attachments/e0529b3b58069a916ad7bb89f7e9f5f0eda73421/common/fit/150/50/1b07b99aa3112e022a916b06db07f1f4f211e91d41878452d87c7638b1bf/brand_logo.gif)
mikroC PRO for PIC32
MikroElektronika
403
Library Example
The example changes PWM duty ratio on channels 1 and 2 continuously. If LEDs are connected to channels 1 and 2,
a gradual change of emitted light will be noticeable.
Copy Code To Clipboard
unsigned int current_duty, old_duty, current_duty1, old_duty1;
unsigned int pwm_period1, pwm_period2;
void InitMain() {
CHECON =
0x32
;
AD1PCFG =
0xFFFF
;
// Configure AN pins as digital I/O
TRISB =
0xFFFF
;
// configure PORTB pins as input
PORTD =
0
;
// set PORTD to 0
TRISD =
0
;
// designate PORTD pins as output
}
void main() {
InitMain();
current_duty =
100
;
// initial value for current_duty
current_duty1 =
100
;
// initial value for current_duty1
pwm_period1 = PWM_Init(
5000 , 1, 1, 2
);
pwm_period2 = PWM_Init(
10000, 2, 1, 3
);
PWM_Start(
1
);
PWM_Start(
2
);
PWM_Set_Duty(current_duty, 1);
// Set current duty for PWM1
PWM_Set_Duty(current_duty1, 2);
// Set current duty for PWM2
while (
1
) {
// endless loop
if (RB0_bit) {
// button on RB0 pressed
Delay_ms(
1
);
current_duty = current_duty +
5
;
// increment current_duty
if (current_duty > pwm_period1) {
// if we increase current_duty greater then
possible pwm_period1 value
current_duty =
0
;
// reset current_duty value to zero
}
PWM_Set_Duty(current_duty, 1);
// set newly acquired duty ratio
}
if (RB1_bit) {
// button on RB1 pressed
Delay_ms(
1
);
current_duty = current_duty -
5
;
// decrement current_duty
if (current_duty > pwm_period1) {
// if we decrease current_duty greater then
possible pwm_period1 value (overflow)
current_duty = pwm_period1;
// set current_duty to max possible value
}
PWM_Set_Duty(current_duty, 1);
// set newly acquired duty ratio
}