Mihail Stoyanov
/
ADC_spikes
Program to benchmark AnalogIn performance
Fork of ADC_spikes by
main.cpp
- Committer:
- chris
- Date:
- 2011-12-01
- Revision:
- 0:62a007afbcbf
- Child:
- 1:bdd134268a52
File content as of revision 0:62a007afbcbf:
#include "mbed.h" #define NUM_SAMPLES 500000 DigitalOut myled(LED1); Serial pc(USBTX,USBRX); AnalogIn ain(p17); Timer t; int num_8; int num_16; int num_32; int num_64; int num_128; int num_256; int num_512; int num_1024; int num_2048; int main() { pc.baud(115200); int num_samples = 0; num_8 = 0; num_16 = 0; num_32 = 0; num_64 = 0; num_128 = 0; num_256 = 0; num_512 = 0; num_1024 = 0; num_2048 = 0; /* while (1) { pc.printf("%f\n",ain.read()); // wait(0.1); } */ // do a calibration float AVERAGE = 0.5; // taking an average pc.printf("Taking an average over %d samples\n",NUM_SAMPLES); while (num_samples < NUM_SAMPLES) { float r = ain.read(); if ((r > 0.49) && (r < 0.51)) { AVERAGE = (AVERAGE + r) /2.0; num_samples++; } } pc.printf("Average = %f\n",AVERAGE); pc.printf("Reading floats\n"); num_samples = 0; t.reset(); t.start(); while (num_samples < NUM_SAMPLES) { float a = ain.read(); if (a > (AVERAGE + 0.5000)) {num_2048++;} // > 2048 lsb else if (a > (AVERAGE + 0.2500)) {num_1024++;} // > 1024 lsb else if (a > (AVERAGE + 0.0625)) {num_512++;} // > 512 lsb else if (a > (AVERAGE + 0.0312)) {num_256++;} // > 256 lsb else if (a > (AVERAGE + 0.0312)) {num_128++;} // > 128 lsb else if (a > (AVERAGE + 0.0156)) {num_64++;} // > 64 lsb else if (a > (AVERAGE + 0.0078)) {num_32++;} // > 32 lsb else if (a > (AVERAGE + 0.0039)) {num_16++;} // > 16 lsb else if (a > (AVERAGE + 0.0019)) {num_8++;} // > 8 lsb num_samples++; } t.stop(); pc.printf("Time taken for %d samples was %fs\n",NUM_SAMPLES,t.read()); pc.printf("over 8 lsb = %d\n",num_8); pc.printf("over 16 lsb = %d\n",num_16); pc.printf("over 32 lsb = %d\n",num_32); pc.printf("over 64 lsb = %d\n",num_64); pc.printf("over 128 lsb = %d\n",num_128); pc.printf("over 256 lsb = %d\n",num_256); pc.printf("over 512 lsb = %d\n",num_512); pc.printf("over 1024 lsb = %d\n",num_1024); pc.printf("over 2048 lsb = %d\n",num_2048); /* pc.printf("Reading _u16\n"); num_samples = 0; t.reset(); t.start(); while (num_samples < NUM_SAMPLES) { int a = ain.read_u16(); num_samples++; } t.stop(); pc.printf("Time taken for %d samples was %fs\n",NUM_SAMPLES,t.read()); */ }