Duda con pequeño programa

Bien, estoy programando el PIC16F628A en mplab x y este es el codigo inicial:



#include <htc.h>


__CONFIG(WDTDIS & LVPDIS & INTIO);


int main (void) {

PR2 = 0xFF; //periodo de PWM
CCPR1L = 0b10000000; // MSb
CCP1CON = 0b00001111; //LSb
TRISB = 0b11110111; // CCP1 pin como salida
T2CON = 0b00000100; //Postcaler 1:1 Prescaler 1:1 activa Timer2

while (1)

return 0;
}


Se trata de simplemente controlar una salida PWM, en el programa aplico un valor en CCPR1L y CCP1CON para el porcentaje del ciclo.

Ademas despejando veo que con esta formula obtengo un valor que es el porcentaje del ciclo que está en alto:

Porcentaje en alto = (10-bit de resolución) * ( 100 / 4(PR2+1))

En mi caso:

Porcentaje en alto = (10000000) * ( 100 / 4(255+1)) = 50

Tengo un 50% en alto.




Cuando ejecuto el programa en un simulador, veo que efectivamente empieza a funcionar bien con el 50%, pero despues de unas decenas de ciclos se para y se queda en estado bajo y no entiendo porque ocurre.

Cambie el código y obtuve el siguiente:

#include <htc.h>


__CONFIG(WDTDIS & LVPDIS & INTIO);

int main (void) { //50%

while (1) {

PR2 = 0xFF; //periodo de PWM
CCPR1L = 0b10000000; // MSb
CCP1CON = 0b00001111; //LSb
TRISB = 0b11110111; // CCP1 pin como salida
T2CON = 0b00000100; //Postcaler 1:1 Prescaler 1:1 activa Timer2

}


return 0;
}

Hice que repitiera la acción de escribir todos los valores, y efectivamente funciona, pero no me parece demasiado bien arreglado.

¿Podeis explicarme porque el primer código no funcionó bien?


Otra duda. El segundo código si funciona en el simulador, pero despues cuando escribo en el PIC y lo ejecuto no hace literalmente nada.

¿Sabeis por qué?
 
Atrás
Arriba