Que tal gente del Foro, esta ves para una duda sobre el Timer0 del 12F629.
Resulta que quiero generar un PWM por software a una frecuencia de 100Hz, por lo que el periodo debe ser 10ms, estoy poniendo una resolución de 256 asi que 10ms/256 = 0.039ms ese es el tiempo en que se debe desbordar el timer0, sacando calculos para la precarga me da un valor de 219, usando el oscilador interno de 4Mhz y el prescaler de 1, hasta aqui todo bien.
Realizo el programa como se los pongo a continuacion
#include <12F629.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOPUT //No Power Up Timer
#use fast_io (A)
#use delay(clock=4000000)
int8 conteo=0, duty_arriba=128;
#int_TIMER0
void RTCC_isr(void)
{
conteo++;
if(conteo==0)
output_high(PIN_A0);
else if (conteo==duty_arriba)
output_low(PIN_A0);
set_timer0(254);
}
void main()
{
set_tris_a(0b111100); //Configuramos entradas-salidas del puerto
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_comparator(NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
// TODO: USER CODE!!
do{
}while(true);
}
Se genera el PWM bien, el problema es que al ver la simulacion el periodo en lugar de 10ms, me da 20ms
, al programar el PIC se nota un tenue pero molesto de parpadeo, probe incrementando la precarga del timer hasta 254 y lo mejor que logre fue un periodo de 17ms aprox. Porque será que no me esta dando la frecuencia que en teoria deberia dar?
como podria lograrlo?
Gracias de antemano, Saludos.