Hola a todos, les comento que estoy queriendo medir un segundo con un 16F877A
esta todo casi bien, salvo por este "casi" jaja
Para medirlo, lo que hago es cargarle al timer1 el valor de 3036, dicho valor
sale de un calculo y cuando el timer desborde, habran pasado 500 ms y se
producira la interrupcion.
El problema que tengo es que para corroborar que realmente el pic esta contando
un "verdadero" segundo, conecto el osciloscopio a una salida y veo en el mismo
el periodo de un pulso, cuando dicho periodo es igual a 1 segundo,
entonces todo funciona perfecto.
Dicho pulso de 1 segundo se compone de 500 ms de nivel bajo y 500 ms de nivel alto,
midiendo estos con el osciloscopio, los 500 ms de nivel alto son perfectos, pero cuando
mido los de nivel bajo son algo mas de 500 ms (525 ms), por lo tanto el programa esta demorando
25 ms en mandar la orden que suba la salida (especificamente dentro del if (cantidad ==2)).
A continuacion les muestro la interrupcion para que alguien me diga que puede ser que
me este produciendo esta demora, que al cabo de un largo tiempo empezaria a tener
importancia.
Sera el tipo de variable con la que fue declarada la variable cantidad ?
Sera la propia funcion output_high (PIN_D4) ?
O sera set_timer1 (3036) ?
#int_TIMER1
void tratamiento(void){ //Función de tratamiento del rtcc (Cada vez que el timer1 desborda se llama a esta funcion)
if (cantidad == 2){ // Para que sea un segundo debe entrar dos veces la interrupcion, ya que cada interrupcion entra cada 0.5 seg
output_high (PIN_D4);
cantidad=1;
set_timer1 (3036);
}
else {
output_low (PIN_D4);
cantidad++;
}
} // Cierro la funcion tratamiento
Estaria bueno lograr que funcione bien para que quede algo estandar que puedan utilizar todos de como medir un segundo, ya que lo busque
y no lo he encontrado en otra parte del foro.
Gracias y saludos !!