Cálculo por terminal. Test.
Dependencies: ADC
medir_frecuencia.h@108:5a5126fe974e, 2020-01-31 (annotated)
- Committer:
- luisquiroga
- Date:
- Fri Jan 31 13:29:52 2020 +0000
- Revision:
- 108:5a5126fe974e
Calculo por terminal.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |