Exp.4: To control the Speed of DC motor using PWMinPIC18F
CODE
#include<p18f4550.h>
void delay(unsigned int time)
{
unsigned int i, j;
for(i=0;i<time;i++)
for(j=0;j<1000;j++);
}
void main(void)
{
unsigned int i;
TRISCbits.TRISC1 = 0; //RC1 pin as output
TRISCbits.TRISC2 = 0; //CCP1 pin as output
LATCbits.LATC1 = 0;
CCP1CON = 0x3c; //Select PWM mode;
CCPR1L = 0x0F; //Duty cycle 10%T2CON = 0x20; //Prescalar = 16; Timer2 OFF
PR2 = 0x95; //Period Register
TMR2ON = 1; //Timer2 ON
while(1) //Loop forever
{
for(i=15;i<150;i++)
{
CCPR1L = i;
delay(100);
}
for(i=150;i>15;i- -)
{
CCPR1L = i;
delay(100);
}
}
}
Revised code:
#include <p18f4550.h>
void delay(unsigned int time)
{
unsigned int i, j;
for (i = 0; i < time; i++)
{
for (j = 0; j < 1000; j++);
}
}
void main(void)
{
unsigned int i;
TRISCbits.TRISC1 = 0; // RC1 pin as output
TRISCbits.TRISC2 = 0; // CCP1 pin as output
LATCbits.LATC1 = 0;
CCP1CON = 0x3C; // Select PWM mode
CCPR1L = 0x0F; // Duty cycle 10%
T2CON = 0x04; // Prescaler = 16; Timer2 ON
PR2 = 0x95; // Period Register
TMR2 = 0; // Initialize Timer2
while (1) // Loop forever
{
for (i = 15; i < 150; i++)
{
CCPR1L = i;
delay(100);
}
for (i = 150; i > 15; i--)
{
CCPR1L = i;
delay(100);
}
}
}

Comments
Post a Comment