Cálculo por terminal. Test.

Dependencies:   ADC

Dependents:   ADC

Committer:
luisquiroga
Date:
Fri Jan 31 13:29:52 2020 +0000
Revision:
108:5a5126fe974e
Calculo por terminal.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
luisquiroga 108:5a5126fe974e 1 //Comentarios para Damian
luisquiroga 108:5a5126fe974e 2 //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
luisquiroga 108:5a5126fe974e 3 //mientras que nosotros la generamos con un generador de señal. No sabría porqué pero es lo que sucede.
luisquiroga 108:5a5126fe974e 4
luisquiroga 108:5a5126fe974e 5 #include <stdio.h>
luisquiroga 108:5a5126fe974e 6 #include <stdlib.h>
luisquiroga 108:5a5126fe974e 7
luisquiroga 108:5a5126fe974e 8
luisquiroga 108:5a5126fe974e 9 #define N_MUESTRAS 2048 //El criterio es tomar una cantidad determinada de muestras y analizarla
luisquiroga 108:5a5126fe974e 10 //Defino umbrales para histéresis
luisquiroga 108:5a5126fe974e 11 #define UMBRAL_SUP 1300
luisquiroga 108:5a5126fe974e 12 #define UMBRAL_INF 1000
luisquiroga 108:5a5126fe974e 13 #define ADC_RES_bits 12
luisquiroga 108:5a5126fe974e 14 #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.
luisquiroga 108:5a5126fe974e 15
luisquiroga 108:5a5126fe974e 16
luisquiroga 108:5a5126fe974e 17 float calcular_frecuencia(uint16_t *muestras,int N_muestras,float ts);
luisquiroga 108:5a5126fe974e 18 void imprimir_datos(uint16_t *p);
luisquiroga 108:5a5126fe974e 19
luisquiroga 108:5a5126fe974e 20
luisquiroga 108:5a5126fe974e 21 float calcular_frecuencia(uint16_t *muestras,int N_muestras,float ts)
luisquiroga 108:5a5126fe974e 22 {
luisquiroga 108:5a5126fe974e 23 float frecHZ;
luisquiroga 108:5a5126fe974e 24 int i;
luisquiroga 108:5a5126fe974e 25 int contador = 0;
luisquiroga 108:5a5126fe974e 26 int flag = 0;
luisquiroga 108:5a5126fe974e 27 float ventana = ts * (float)N_MUESTRAS;
luisquiroga 108:5a5126fe974e 28
luisquiroga 108:5a5126fe974e 29 for(i = 0; i<N_MUESTRAS; i++)
luisquiroga 108:5a5126fe974e 30 {
luisquiroga 108:5a5126fe974e 31 if ((muestras[i] > UMBRAL_SUP) && (flag == 0))
luisquiroga 108:5a5126fe974e 32 {
luisquiroga 108:5a5126fe974e 33 contador++; //Cuento los pasos por encima de la histeresis
luisquiroga 108:5a5126fe974e 34 flag = 1; // Activo flag
luisquiroga 108:5a5126fe974e 35 }
luisquiroga 108:5a5126fe974e 36
luisquiroga 108:5a5126fe974e 37 //Para el margen de ruido
luisquiroga 108:5a5126fe974e 38 if ((muestras[i] < UMBRAL_SUP) && (muestras[i] < UMBRAL_INF))
luisquiroga 108:5a5126fe974e 39 {
luisquiroga 108:5a5126fe974e 40 flag = 0; //Desactivo flag para
luisquiroga 108:5a5126fe974e 41 }
luisquiroga 108:5a5126fe974e 42 }
luisquiroga 108:5a5126fe974e 43
luisquiroga 108:5a5126fe974e 44 contador = contador-1;
luisquiroga 108:5a5126fe974e 45
luisquiroga 108:5a5126fe974e 46 frecHZ = 1000000*contador/ventana; //El por 1000000 es porque está en microsegundos y lo quiero expresar en Hz.
luisquiroga 108:5a5126fe974e 47 return frecHZ;
luisquiroga 108:5a5126fe974e 48 }
luisquiroga 108:5a5126fe974e 49
luisquiroga 108:5a5126fe974e 50 void imprimir_datos(uint16_t *p)
luisquiroga 108:5a5126fe974e 51 {
luisquiroga 108:5a5126fe974e 52 int i,j=0;
luisquiroga 108:5a5126fe974e 53 printf("\n");
luisquiroga 108:5a5126fe974e 54 for(i=0;i<N_MUESTRAS;i++)
luisquiroga 108:5a5126fe974e 55 {
luisquiroga 108:5a5126fe974e 56 j++;
luisquiroga 108:5a5126fe974e 57 printf("%d, ",p[i]); //Eso, imprime los datos, lo dejé tal cual estaba en el de dani
luisquiroga 108:5a5126fe974e 58 }
luisquiroga 108:5a5126fe974e 59 printf("\n");
luisquiroga 108:5a5126fe974e 60 }