Program to benchmark AnalogIn performance

Dependencies:   mbed

Fork of ADC_spikes by Chris Styles

Committer:
chris
Date:
Thu Dec 01 16:37:07 2011 +0000
Revision:
0:62a007afbcbf
Child:
1:bdd134268a52

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris 0:62a007afbcbf 1 #include "mbed.h"
chris 0:62a007afbcbf 2
chris 0:62a007afbcbf 3 #define NUM_SAMPLES 500000
chris 0:62a007afbcbf 4
chris 0:62a007afbcbf 5 DigitalOut myled(LED1);
chris 0:62a007afbcbf 6 Serial pc(USBTX,USBRX);
chris 0:62a007afbcbf 7
chris 0:62a007afbcbf 8 AnalogIn ain(p17);
chris 0:62a007afbcbf 9
chris 0:62a007afbcbf 10 Timer t;
chris 0:62a007afbcbf 11
chris 0:62a007afbcbf 12 int num_8;
chris 0:62a007afbcbf 13 int num_16;
chris 0:62a007afbcbf 14 int num_32;
chris 0:62a007afbcbf 15 int num_64;
chris 0:62a007afbcbf 16 int num_128;
chris 0:62a007afbcbf 17 int num_256;
chris 0:62a007afbcbf 18 int num_512;
chris 0:62a007afbcbf 19 int num_1024;
chris 0:62a007afbcbf 20 int num_2048;
chris 0:62a007afbcbf 21
chris 0:62a007afbcbf 22
chris 0:62a007afbcbf 23 int main() {
chris 0:62a007afbcbf 24
chris 0:62a007afbcbf 25 pc.baud(115200);
chris 0:62a007afbcbf 26
chris 0:62a007afbcbf 27 int num_samples = 0;
chris 0:62a007afbcbf 28
chris 0:62a007afbcbf 29 num_8 = 0;
chris 0:62a007afbcbf 30 num_16 = 0;
chris 0:62a007afbcbf 31 num_32 = 0;
chris 0:62a007afbcbf 32 num_64 = 0;
chris 0:62a007afbcbf 33 num_128 = 0;
chris 0:62a007afbcbf 34 num_256 = 0;
chris 0:62a007afbcbf 35 num_512 = 0;
chris 0:62a007afbcbf 36 num_1024 = 0;
chris 0:62a007afbcbf 37 num_2048 = 0;
chris 0:62a007afbcbf 38
chris 0:62a007afbcbf 39 /*
chris 0:62a007afbcbf 40 while (1) {
chris 0:62a007afbcbf 41 pc.printf("%f\n",ain.read());
chris 0:62a007afbcbf 42 // wait(0.1);
chris 0:62a007afbcbf 43 }
chris 0:62a007afbcbf 44 */
chris 0:62a007afbcbf 45
chris 0:62a007afbcbf 46
chris 0:62a007afbcbf 47
chris 0:62a007afbcbf 48
chris 0:62a007afbcbf 49 // do a calibration
chris 0:62a007afbcbf 50
chris 0:62a007afbcbf 51 float AVERAGE = 0.5;
chris 0:62a007afbcbf 52
chris 0:62a007afbcbf 53 // taking an average
chris 0:62a007afbcbf 54 pc.printf("Taking an average over %d samples\n",NUM_SAMPLES);
chris 0:62a007afbcbf 55 while (num_samples < NUM_SAMPLES) {
chris 0:62a007afbcbf 56 float r = ain.read();
chris 0:62a007afbcbf 57
chris 0:62a007afbcbf 58 if ((r > 0.49) && (r < 0.51)) {
chris 0:62a007afbcbf 59 AVERAGE = (AVERAGE + r) /2.0;
chris 0:62a007afbcbf 60 num_samples++;
chris 0:62a007afbcbf 61 }
chris 0:62a007afbcbf 62
chris 0:62a007afbcbf 63 }
chris 0:62a007afbcbf 64 pc.printf("Average = %f\n",AVERAGE);
chris 0:62a007afbcbf 65
chris 0:62a007afbcbf 66
chris 0:62a007afbcbf 67
chris 0:62a007afbcbf 68 pc.printf("Reading floats\n");
chris 0:62a007afbcbf 69 num_samples = 0;
chris 0:62a007afbcbf 70 t.reset();
chris 0:62a007afbcbf 71 t.start();
chris 0:62a007afbcbf 72
chris 0:62a007afbcbf 73 while (num_samples < NUM_SAMPLES) {
chris 0:62a007afbcbf 74 float a = ain.read();
chris 0:62a007afbcbf 75
chris 0:62a007afbcbf 76
chris 0:62a007afbcbf 77 if (a > (AVERAGE + 0.5000))
chris 0:62a007afbcbf 78 {num_2048++;} // > 2048 lsb
chris 0:62a007afbcbf 79 else if (a > (AVERAGE + 0.2500))
chris 0:62a007afbcbf 80 {num_1024++;} // > 1024 lsb
chris 0:62a007afbcbf 81 else if (a > (AVERAGE + 0.0625))
chris 0:62a007afbcbf 82 {num_512++;} // > 512 lsb
chris 0:62a007afbcbf 83 else if (a > (AVERAGE + 0.0312))
chris 0:62a007afbcbf 84 {num_256++;} // > 256 lsb
chris 0:62a007afbcbf 85 else if (a > (AVERAGE + 0.0312))
chris 0:62a007afbcbf 86 {num_128++;} // > 128 lsb
chris 0:62a007afbcbf 87 else if (a > (AVERAGE + 0.0156))
chris 0:62a007afbcbf 88 {num_64++;} // > 64 lsb
chris 0:62a007afbcbf 89 else if (a > (AVERAGE + 0.0078))
chris 0:62a007afbcbf 90 {num_32++;} // > 32 lsb
chris 0:62a007afbcbf 91 else if (a > (AVERAGE + 0.0039))
chris 0:62a007afbcbf 92 {num_16++;} // > 16 lsb
chris 0:62a007afbcbf 93 else if (a > (AVERAGE + 0.0019))
chris 0:62a007afbcbf 94 {num_8++;} // > 8 lsb
chris 0:62a007afbcbf 95
chris 0:62a007afbcbf 96 num_samples++;
chris 0:62a007afbcbf 97 }
chris 0:62a007afbcbf 98
chris 0:62a007afbcbf 99 t.stop();
chris 0:62a007afbcbf 100 pc.printf("Time taken for %d samples was %fs\n",NUM_SAMPLES,t.read());
chris 0:62a007afbcbf 101 pc.printf("over 8 lsb = %d\n",num_8);
chris 0:62a007afbcbf 102 pc.printf("over 16 lsb = %d\n",num_16);
chris 0:62a007afbcbf 103 pc.printf("over 32 lsb = %d\n",num_32);
chris 0:62a007afbcbf 104 pc.printf("over 64 lsb = %d\n",num_64);
chris 0:62a007afbcbf 105 pc.printf("over 128 lsb = %d\n",num_128);
chris 0:62a007afbcbf 106 pc.printf("over 256 lsb = %d\n",num_256);
chris 0:62a007afbcbf 107 pc.printf("over 512 lsb = %d\n",num_512);
chris 0:62a007afbcbf 108 pc.printf("over 1024 lsb = %d\n",num_1024);
chris 0:62a007afbcbf 109 pc.printf("over 2048 lsb = %d\n",num_2048);
chris 0:62a007afbcbf 110
chris 0:62a007afbcbf 111
chris 0:62a007afbcbf 112
chris 0:62a007afbcbf 113
chris 0:62a007afbcbf 114
chris 0:62a007afbcbf 115 /*
chris 0:62a007afbcbf 116 pc.printf("Reading _u16\n");
chris 0:62a007afbcbf 117 num_samples = 0;
chris 0:62a007afbcbf 118 t.reset();
chris 0:62a007afbcbf 119 t.start();
chris 0:62a007afbcbf 120 while (num_samples < NUM_SAMPLES) {
chris 0:62a007afbcbf 121 int a = ain.read_u16();
chris 0:62a007afbcbf 122 num_samples++;
chris 0:62a007afbcbf 123 }
chris 0:62a007afbcbf 124 t.stop();
chris 0:62a007afbcbf 125 pc.printf("Time taken for %d samples was %fs\n",NUM_SAMPLES,t.read());
chris 0:62a007afbcbf 126
chris 0:62a007afbcbf 127 */
chris 0:62a007afbcbf 128
chris 0:62a007afbcbf 129
chris 0:62a007afbcbf 130 }