Habitualmente medimos el ancho de los pulsos recibidos mediante la
interrupción externa y un timer, contando el tiempo transcurrido entre el flanco de subida y el de bajada, lo que nos obliga a hacer un tratamiento de los datos en la propia interrupción.
En este truco os explicaré otro método, utilizando la técnica
Timer Gate Accumulation; una prestación de los Timer que nos hace
olvidarnos de la interrupción externa y nos entrega el
resultado ya hecho.
Este esquema es el Timer de un dsPIC33F, pero tiene pocas diferencias con el resto de los PIC. Si te fijas, hay un recuadro llamado Gate Sync y una señal de control llamada TGATE.

Cuando hacemos TGATE=1 y TCS=0 estamos configurando el
multiplexor de entrada del Timer para que reciba los pulsos a través del Gate Sync, que hace un
AND con la señal Tcy (frecuencia de oscilación del micro).
¿En qué se traduce esto?, pues en que con cada pulso recibido, el micro se pone a
contar Tcy como un loco, a la frecuencia de instrucciones que esté configurado. Lo vemos mejor con este gráfico:

Obviamente, si queremos saber el ancho de pulso, sólo tenemos que ver el
resultado del recuento del Timer y ya lo tendremos.
Espero que podáis aprovechar esta técnica; yo he implementado un
lector de PWM con ella y funciona estupendamente.
Hay una copia de este artículo en
MicroPIC, aquí:
Medición de ancho de pulso con TGATE