Autor Tema: Problemas PWM XC8  (Leído 1838 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Problemas PWM XC8
« en: 04 de Agosto de 2015, 16:00:37 »
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.

Código: [Seleccionar]
#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){                   
       
    }
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problemas PWM XC8
« Respuesta #1 en: 04 de Agosto de 2015, 21:48:38 »
Citar
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

Antes de ver el codigo...
El proteus esta corriendo a tiempo real?, esta bien puesta la frecuencia del Proteus?, viste que frecuencia sale del pin de PWM ?

Recorda que Proteus es un simulador, y muchas veces va mas lento que el tiempo real, usando una calculadora online que encontre.
Me encuentro que para unos XTAL de 20Mhz (suponiendo que entra directo sin PLL ni nada) no podes conseguir frecuencias menores a 2500Hz paroximadamente, y me resulta casi imposible pensar que puedas ver titilar el PWM a esa frecuencia
http://eng-serve.com/pic/pic_pwm.html


 

anything