Calculador PWM


Este applet permite calcular los valores de los regitros necesarios
para configurar PWM por harware en microcontroladores PIC

El bit 2 de T2CON arranca/para el Timer2 que se usa en el PWM.

Hay que asegurarse de que que el pin correspondiente se configura como salida.



Fosc (MHz):    
Frec. PWM (Hz):    
Duty Cycle (%):  
 
 
Registro     DEC  HEX      BIN
PR2:     
T2CON:     
CCPR1L:     
CCP1CON:     
 
Freq PWM Real:  
Duty max.:  
 
Resulatdo:  


Ejemplo de uso

Este fragmento de codigo en C (SDCC) es un ejemplo de como usar los valores obtenidos.
Un Led conectado a la salida PWM1 se enciende y se apaga progresivamente.

Es necesaria una librería de retardos, la funcion delay_ms() podría ser otra.




    void main() 
    {
        // Hay que configurar pin PWM como salida, esto depende del modelo PIC


        unsigned int duty_max = 0; 	// Poner valor obtenido en el applet
        unsigned int duty = 0;      // Variable usada para variar intensidad de led
        
        
        PR2 = 0; 			// Poner valor obtenido en el applet
        T2CON = 0; 			// Poner valor obtenido en el applet
        CCP1CON = 0; 		// Poner valor obtenido en el applet


        while( true )
        {
            for( duty=0; duty<=duty_max; duty++ )    // Enciende 0% - 100%
            {
                setDuty( duty );
                
                delay_ms(10);
            }

            for( duty=duty_max; duty>=0; duty-- )    // Apaga 100% - 0%
            {
                setDuty( duty );

                delay_ms(10);
            }
        }
    }


    void setDuty( unsigned int d ) // Esta funcion fija el duty por valor 0 - duty_max
    {
        CCP1CON,CCP1X = d,1;
        CCP1CON,CCP1Y = d,0;

        CCPR1L = d>>2;
    }


    void setDutyPc( unsigned char percent ) // Esta funcion fija el duty por % 0 - 100%
    {
        unsigned int d = percent*duty_max/100;
        
        setDuty( d );
    }