Hola, agradecerpía mucho una ayuda para poder entender mejor el TIMER0 como contador, yo necesito contar pulso de bajo a alto, entiendo que selia low_to_high la configuración, y utilizando el prescaler de 1:2 tendría que contar un pulso de 70uS en el pin T0CKI, que al prescaler 1:2 esto serían 140uS, eso es errado o es cierto?
Voy a explicarte un poco, pero todo lo demas lo vas a tener que aprender del datasheet del micro. En el datasheet esta TODO.
el LOW_TO_HIGH es para que ingrese un pulso al timer cuando la señal EXTERNA pasa de bajo a alto. Como bien dije, es una señal EXTERNA que entraria por un pin.
Si vos queres saber el tiempo que paso. Usaria mejor el reloj interno, en ves de tomar pulsos de afuera, los tome del mismo reloj que usa el procesador ( Fosc / 4 )
El contador/timer, es un timer de 8 bits, asi que el maximo que puede almacenar es 255 (0xFF), siempre es ascendente, cuando suma 1 mas ocurre que produce un overflow y pasa a 0x00. Es en ese momento que uno debe recargarlo de vuelta y que sabe que paso ya el tiempo cargado.
Supongamos que queres 140us, y tenes un micro con un cristal de 4Mhz, al tener un cristal de 4Mhz el reloj que entra al procesador y al timer es de 4Mhz / 4 = 1Mhz, esto te da un periodo de 1 / 1Mhz = 1us. Entonces el PIC va a sumar 1, cada 1us, si quisieramos que pasen 140us, deberiamos contar 140. Ahora viene la parte "tramposa" de esto.
Como dije antes el timer/contador es siempre ascendente. Por lo cual si quisieramos cargar un valor y que a los 140 llegue a 0, deberiamos cargar 256 - 140 = 116, Cargando 116, cuando cuente 140 va a estar en 0x00 y es ahi donde vamos a tener que cargarlo de nuevo. Esto con preescaler en 1:1, si fuera 1:2 serian 70 pulsos
lo que no sé bien es como configurar el pin T0CKI para que cuente el ancho de los flancos ascendentes hasta que descienden otra vez a 0
Lo que explique arriba es el funcionamiento del Timer como contador/timer.
Si quisieras hacer eso con el TMR0, deberias leer el pin. Supongamos que queres leer el pulso en alto. Usando el timer y siguiendo el ejemplo de arriba, tenes que cada pulso es 1us.
Leo el pin y espero que se ponga a 1. Al momento que se pone en uno, leo el valor del timer y lo guardo en una variable. Ahora espero el 0, cuando leo cero, guardo ese valor en otra variable.
El ancho va a estar dado por la diferencia de esas 2 variables. Si el timer va a tener "cuentas" de pulsos, pero vos sabes exactamente cuanto tarda cada pulso de reloj, en el ejemplo de 4Mhz el cristal y preescaler 1:1, teniamos que eran 1us por pulso o cuenta del timer, si teniamos preescaler 1:2 son 2us cada cuenta.
Asi podes determinar el ancho de tu pulso con el TMR0