Holass
estoy trabajando con el PIC16F877A y deseo realizar una modulación por ancho de pulsos (PWM).
trabajo en mikroC y simulando en proteus. soy nuevo en esto y realice circuitos básicos I/O con leds, pero no he logrado obtener la salida PWM.
Estoy usando este codigo, que lo extrai de
http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html
El drama esque en el simuladro no tengo ninguna respuesta =/
****************************************************************
void main()
{
unsigned char dc ;
TRISC = 0 ; // set PORTC as output
PORTC = 0 ; // clear PORTC
/*
* configure CCP module as 4000 Hz PWM output
*/
PR2 = 0b01111100 ;
T2CON = 0b00000101 ;
CCP1CON = 0b00001100 ;
CCP2CON = 0b00111100 ;
for(;
// forever
{
/*
* PWM resolution is 10 bits
* don't use last 2 less significant bits CCPxCON,
* so only CCPRxL have to be touched to change duty cycle
*/
for(dc = 0 ; dc < 128 ; dc++)
{
CCPR1L = dc ;
CCPR2L = 128 - dc ;
Delay_ms(100) ;
}
for(dc = 127 ; dc > 0 ; dc--)
{
CCPR1L = dc ;
CCPR2L = 128 - dc ;
Delay_ms(100) ;
}
}
}
****************************************************************
Gracias por su tiempo
estoy trabajando con el PIC16F877A y deseo realizar una modulación por ancho de pulsos (PWM).
trabajo en mikroC y simulando en proteus. soy nuevo en esto y realice circuitos básicos I/O con leds, pero no he logrado obtener la salida PWM.
Estoy usando este codigo, que lo extrai de
http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html
El drama esque en el simuladro no tengo ninguna respuesta =/
****************************************************************
void main()
{
unsigned char dc ;
TRISC = 0 ; // set PORTC as output
PORTC = 0 ; // clear PORTC
/*
* configure CCP module as 4000 Hz PWM output
*/
PR2 = 0b01111100 ;
T2CON = 0b00000101 ;
CCP1CON = 0b00001100 ;
CCP2CON = 0b00111100 ;
for(;
{
/*
* PWM resolution is 10 bits
* don't use last 2 less significant bits CCPxCON,
* so only CCPRxL have to be touched to change duty cycle
*/
for(dc = 0 ; dc < 128 ; dc++)
{
CCPR1L = dc ;
CCPR2L = 128 - dc ;
Delay_ms(100) ;
}
for(dc = 127 ; dc > 0 ; dc--)
{
CCPR1L = dc ;
CCPR2L = 128 - dc ;
Delay_ms(100) ;
}
}
}
****************************************************************
Gracias por su tiempo