Buenas tardes a todos, estoy pelando con el PWM en XC8. El tema que tengo es que cuando lo simulo en proteus tengo conectado un led a la salida del PWM y el efecto que tengo es que en ves de ver menos intensidad en el led este parpadea.
Abajo les dejo el código que uso no se si ven algo inadecuado o una mala ultilzacion del PWM.
El pic utilizado es un 18f242. Dentro de "configuracion.h" estan los fuses y la frecuencia del cristal que es de 20MHz.
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include "configuracion.h"
#define T2_DIV_BY_1 0b00000000
#define T2_DIV_BY_4 0b00000001
#define T2_DIV_BY_16 0b00000010
#define CCP_PWM 0b00001100
/* posiciones del boton */
#define PRESIONADO 0b0 /* Define logica del boton -> activo en bajo */
/* asignacion de pines */
#define LED PORTBbits.RB4 /* Asigna "LED" al pin GP0 */
#define PB_1 PORTBbits.RB0 /* Asigna "Pulsador" al pin GP5 */
#define PR2_DATA 0xFF
void initPWM1(unsigned char pr2, unsigned char t2ckps);
void setPWM1Duty(unsigned int duty);
void initPWM1(unsigned char pr2, unsigned char t2ckps)
{
PR2 = pr2;
CCP1CON = CCP_PWM;
setPWM1Duty(0);
T2CON = t2ckps;
T2CON |= 0x04;
}
void setPWM1Duty(unsigned int duty)
{
CCPR1L = duty >> 2;
CCP1CON &= 0b11001111;
CCP1CON |= 0b00110000 & (duty << 4);
}
void main(void)
{
unsigned int duty1, duty2;
unsigned char flag1, flag2;
TRISA = 0x00;
TRISB = 0x00;
TRISC = 0x00;
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
initPWM1(PR2_DATA, T2_DIV_BY_1);
setPWM1Duty(0);
duty1 = 0;
flag1 = 0;
duty2 = 511;
flag2 = 1;
setPWM1Duty(511);
while(1){
}
}