Tenga en cuenta que un convertidor analógico a digital le da una lectura instantánea del voltaje (bueno, le toma tiempo hacer lo que haga ...) Le da una lectura ahora, ahora, ahora, ahora, ahora, etc. Y podría obtener lecturas como -200
, -100
, -20
, +50
, +75
, +60
, +10
, -40
.
La frecuencia depende del tiempo. Si obtuviera las lecturas anteriores, podría interpretar que el voltaje máximo estaba alrededor de +75
(cualquiera que sean las unidades), y que la onda cruzó la marca 0
entre la tercera y cuarta lectura, subiendo, y la séptima y Octava lecturas, bajando. Si quisiera saber cuál era la frecuencia, tendría que saber a qué hora ocurrieron esos cruces. A partir de eso se puede calcular la frecuencia de la ola. ¡No olvide que debe calcular la diferencia en tiempos entre dos pasos ascendentes o dos hacia abajo!
En el piano, C1
es 32.703 Hz. B5
es 987.77 Hz. Eso no es tan malo: si muestreaste la ola 4,000 veces por segundo (¡mínimo! Mira "tasa de Nyquist" si quieres las matemáticas) podrías hacer ese tipo de cálculos de cruce por cero para obtener un conteo de frecuencia razonable. Sin embargo, ¡más muestras por segundo siempre son mejores!
Pero personalmente utilizaría el comparador analógico incorporado del AT89C2051. P1.0
y P1.1
se pueden configurar para comparar continuamente dos voltajes analógicos. Cuando P1.0
> P1.1
entonces P3.6
es un 1
. De lo contrario es un 0
. Por:
- Asegurarse de que la forma de onda muestreada en
P1.0
está compensada en VCC/2
, y no se enlaza con VCC
o GND
;
- Usando un divisor de voltaje 50/50 en
P1.1
;
- Pedirle a la MCU que interrumpa cuando
P3.6
cambia;
entonces puede obtener la detección de cruce por cero para "gratis". Luego puede leer el temporizador en cada interrupción y hacer los cálculos para obtener la frecuencia.
Por supuesto, eso requiere que el hardware esté conectado correctamente, que el temporizador esté configurado correctamente, que el Comparador analógico esté configurado correctamente y que la interrupción esté configurada correctamente ... y luego pueda calcular y mostrar la frecuencia! O incluso mejor, convierta esa frecuencia a un valor de nota usando una tabla de búsqueda.