Cálculo por terminal. Test.

Dependencies:   ADC

Dependents:   ADC

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");
+}