Buenas,
Tengo una duda con respecto a este ejercicio, que en principio fue hecho con el bloque CTC pero que Julio recomendó como aplicación de bloques timer y counter.
Puede ser que solo sea necesario un timer (y no un counter) interrumpiendo al micro con prioridad 2, cada un cierto tiempo (a determinar segun la duracion de la vuelta anterior)?
Mi idea seria cargar en el timer el tiempo de cada sector, con unprescaler fijo en 256 (y una constante a decrementar a ajustar), y actualizar por software en una variable (por ejemplo CUENTA), en cada interrupcion del timer, la cantidad de "sectores temporales" a los que ha llegado la rueda. Por ende, si viene una interrupción del sensor, y CUENTA>16, quiere decir que la rueda esta yendo mas lento que en la vuelta anterior. Y si CUENTA<16, la rueda esta yendo mas rapido que en la vuelta anterior. El tiempo de cada sector para la vuelta siguiente, puedo estimarlo mediante la fórmula:
T_Sector(n)={CUENTA*T_sector(n-1)+cuenta_actual_del_timer}/16
De esta forma, se considera que la rueda anda demasiado lento sii T_Sector es mayor a 65536/16=4096=256*16, lo que implica tener una constante a decrementar de valor 16.
Es correcta esta idea?
Gracias.