Chris Styles
/
ADC_spikes
Program to benchmark AnalogIn performance
Diff: main.cpp
- Revision:
- 0:62a007afbcbf
- Child:
- 1:bdd134268a52
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Dec 01 16:37:07 2011 +0000 @@ -0,0 +1,130 @@ +#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()); + +*/ + + +}