No vamos a darle código de alimentación, porque no aprenderá nada de esa manera. Sin embargo, espero que podamos ayudarle a comprender las teorías subyacentes.
Hay varias formas diferentes de medir la frecuencia. Brevemente estos son:
- Medición del período
- Conteo de bordes
- Temporización cerrada
- FFT
La medición del período es básicamente lo que sugiere en su pregunta. Mida el tiempo entre un borde anterior (o descendente) y el siguiente. Para que esto sea preciso, necesita tener un temporizador que sea capaz de funcionar más rápido que la frecuencia más alta que desea medir. Su sistema tiene que ser capaz de reaccionar lo suficientemente rápido como para medir el tiempo entre los bordes sin perder un borde.
Contador de bordes es un sistema más simple de implementar y puede permitir la medición de frecuencias más altas que el período de medición, pero solo le da una frecuencia promedio en un período corto. Básicamente, esto funciona contando el número de bordes entrantes de la forma de onda durante un período predefinido. El período más simple de usar es un segundo. Cada vez que el pin de entrada ve un borde, se incrementa un contador. Cada segundo devuelve ese conteo y lo reinicia a cero. Se podría hacer usando un pin de interrupción o un temporizador con la fuente del reloj configurada para ser un pin de entrada. Este último es más preciso en frecuencias más altas si tiene la capacidad en su chip.
La sincronización cerrada es probablemente la más divertida, pero requiere instalaciones específicas en tu chip. Algunos temporizadores pueden funcionar en modo "sincronizado", por lo que cuentan en la frecuencia de reloj del sistema (o parte de ella) solo cuando un determinado pin de entrada está en un estado ALTO. Combine eso con un segundo temporizador para medir el tiempo entre las activaciones de la puerta y no solo tendrá el período de la ola, sino también el ciclo de trabajo.
FFT , o la Transformada Rápida de Fourier, es la más matemáticamente intensiva. Sin embargo, puede proporcionarle información de frecuencia sobre formas de onda más complejas. Probablemente esto esté más allá del alcance de un PIC16, pero vale la pena mencionar de todos modos. Con FFT, graba un conjunto de muestras (analógicas) en la memoria y luego realiza la transformación FFT. El resultado es un conjunto de "cubos", cada uno de los cuales representa la amplitud de un rango de frecuencias. No es realmente lo que estás buscando cuando solo quieres medir la frecuencia de una onda cuadrada, pero vale la pena saber que existe para un proyecto futuro.
Entonces, ¿qué método debes usar? Bueno, eso es muy subjetivo. Todo depende de los rangos de frecuencia que desee medir, la precisión que desea alcanzar, si está interesado en el ciclo de trabajo o no, y de las instalaciones que ofrece su chip. Ahora ya sabe más sobre las opciones en las que puede comenzar a buscar el método que más le convenga.