Chris Styles
/
ADC_spikes
Program to benchmark AnalogIn performance
main.cpp@0:62a007afbcbf, 2011-12-01 (annotated)
- Committer:
- chris
- Date:
- Thu Dec 01 16:37:07 2011 +0000
- Revision:
- 0:62a007afbcbf
- Child:
- 1:bdd134268a52
Who changed what in which revision?
User | Revision | Line number | New 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 | } |