Analisis de codigo PWM en PIC16F887
Enviado por lightzpeed99 • 5 de Mayo de 2022 • Apuntes • 275 Palabras (2 Páginas) • 69 Visitas
Análisis del código original
void InicializarPWM(void){
TRISC2_bit = 0; //Pin CCP1 Como salida, localizado en el pin 2 del puerto C (17)
CCP1CON = 0X0C; //Configura el pin CCP1 Como PWM (0b00001100)
PR2 = 0XFF; // Configuración inicial del periodo PWM (Al máximo: 255)
T2CON = 0X01; // Configura el preescaler para una frecuencia 4.88kHZ (Para un oscilador de 20Mhz)
}
void AnchoPulsoPWM(unsigned Pulso){ //Pulso: valor de 10 bits entre 0 y 1023
CCPR1L = Pulso>>2; //Asignamos los 8 bits altos a CCPRL1
EJEMPLO CON DATO DE LONGITUD DE 1023 BITS (100% DC)
//1024 -> 0011,1111,1111>>2 -> * 0000,1111,1111
//1024 -> 0011,1111,1111<<4 -> * 1111,1111,0000
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
& | x | C | F | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 |
CCPR1L | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | |||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
& | x | 3 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | ||||
CCPR1L | | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
//al ser de 10 bits lo “jalamos” a la derecha, para ajustarlo a los 8 bits de CCPRL1
CCPR1L &= 0xCF; //Limpiamos los bits 5 y 4 poniendo 0
//si ya asignaste 8 bits a CCPR1L ahora con & operamos 0b1100,1111
...