Cálculo por terminal. Test.
Dependencies: ADC
Diff: medir_frecuencia.h
- Revision:
- 108:5a5126fe974e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/medir_frecuencia.h Fri Jan 31 13:29:52 2020 +0000 @@ -0,0 +1,60 @@ +//Comentarios para Damian +//Algunas cosas quedaron tal cual el código de Dani. No pude hacer andar el que él me pasaba. Quizás es porque él generaba la señal con otro micro +//mientras que nosotros la generamos con un generador de señal. No sabría porqué pero es lo que sucede. + +#include <stdio.h> +#include <stdlib.h> + + +#define N_MUESTRAS 2048 //El criterio es tomar una cantidad determinada de muestras y analizarla +//Defino umbrales para histéresis +#define UMBRAL_SUP 1300 +#define UMBRAL_INF 1000 +#define ADC_RES_bits 12 +#define ADC_RES_Cuentas ((1<<ADC_RES_bits)-1) //Esto es para hacer las cuentas, lo saqué del código de Daniel. Se podría mejorar o hacer de otra forma mas simple. + + +float calcular_frecuencia(uint16_t *muestras,int N_muestras,float ts); +void imprimir_datos(uint16_t *p); + + +float calcular_frecuencia(uint16_t *muestras,int N_muestras,float ts) +{ + float frecHZ; + int i; + int contador = 0; + int flag = 0; + float ventana = ts * (float)N_MUESTRAS; + + for(i = 0; i<N_MUESTRAS; i++) + { + if ((muestras[i] > UMBRAL_SUP) && (flag == 0)) + { + contador++; //Cuento los pasos por encima de la histeresis + flag = 1; // Activo flag + } + + //Para el margen de ruido + if ((muestras[i] < UMBRAL_SUP) && (muestras[i] < UMBRAL_INF)) + { + flag = 0; //Desactivo flag para + } + } + + contador = contador-1; + + frecHZ = 1000000*contador/ventana; //El por 1000000 es porque está en microsegundos y lo quiero expresar en Hz. + return frecHZ; +} + +void imprimir_datos(uint16_t *p) +{ + int i,j=0; + printf("\n"); + for(i=0;i<N_MUESTRAS;i++) + { + j++; + printf("%d, ",p[i]); //Eso, imprime los datos, lo dejé tal cual estaba en el de dani + } + printf("\n"); +}