MikroC provides a very simple PWM library with 4 functions shown below
- Pwm_Init
- Pwm_Change_Duty
- Pwm_Start
- Pwm_Stop
To Initialize a PWM module at 2KHz do this :Pwm_Init(2000);
Pwm_Start and Pwm_Stop are used for starting and stopping PWM .
Pwm_Change_Duty Changes PWM duty ratio. Parameter duty
takes values from 0 to 255. It can be calculate using equation (Percent*255)/100
. See 0 is 0%, 127 is 50%, and 255 is 100% duty ratio.
Take a look at the following simple program
// microcontroller : P16F877A
// PWM module is set on RC2 Pin No 17.
unsigned short i;
void main() {
PORTC = 00; // Set PORTC to $FF
TRISC = 0; // PORTC is output
Pwm_Init(5000); // Initialize PWM module
Pwm_Start(); // Start PWM
while (1) { // Endless loop
for(i=0;i<=255;i++)
{ Pwm1_Change_Duty(i);
delay_ms(10); }
} }

Download DSN for Proteus
Respected sir,
ReplyDeleteI am haja.please send the path link of pcb fabrication in your blog.
yours faithfully
haja
http://picmicrochip.blogspot.com/2008/09/howto-make-pcb-in-home.html
ReplyDeletecan u plzz tell how i can interface servo motor with my microcontroller
ReplyDeletei have to change speed using PWM and also want to change its direction of rotation and want to control my microcontroller with my PC
email: piyush.gig.nitdgp@gmail.com
Good day Sir. I was wondering if you could help me out. I have written the c code to generate a 120Khz pwm output for the PIC16f877using ccp1 which will then be outputted on RC1. The problem i am having is when i try to run it on Proteus. It runs for a while and then i get a simulation error log with the following: [spice]tran: timestep too small; timestep=8.67362e-19: trouble with node #v:u1:a:1#branch.
ReplyDeleteWhy is this happening and how can i fix the problem. Please help
Good day Sir. I was wondering if you could help me out. I have written the c code to generate a 120Khz pwm output for the PIC16f877using ccp1 which will then be outputted on RC1. The problem i am having is when i try to run it on Proteus. It runs for a while and then i get a simulation error log with the following: [spice]tran: timestep too small; timestep=8.67362e-19: trouble with node #v:u1:a:1#branch.
ReplyDeleteWhy is this happening and how can i fix the problem. Please help
Good day Sir. I was wondering if you could help me out. I have written the c code to generate a 120Khz pwm output for the PIC16f877using ccp1 which will then be outputted on RC1. The problem i am having is when i try to run it on Proteus. It runs for a while and then i get a simulation error log with the following: [spice]tran: timestep too small; timestep=8.67362e-19: trouble with node #v:u1:a:1#branch.
ReplyDeleteWhy is this happening and how can i fix the problem. Please help
PRIYA BUY ORIGINEL PROTUES
ReplyDeleteoh.. nice article. I had learned something interesting with your post. thanks a lot. keep on updating.
ReplyDeleteThanks a lot
ReplyDeletethis is post is very useful
Very Good information on Pulse Width Modulation. thanks for sharing with us.
ReplyDeletethanx alot for this article, i would ask about how to generate pwm that used as pulse generator in single phase inverte to generate ac source
ReplyDeletehow to build it using pic16f877 ??