Chris Styles
/
ADCPerformanceMeter
Added explicit check for spikes
main.cpp@1:748e07bbe96e, 2011-12-05 (annotated)
- Committer:
- chris
- Date:
- Mon Dec 05 14:23:15 2011 +0000
- Revision:
- 1:748e07bbe96e
- Parent:
- 0:7d24851a0521
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
chris | 0:7d24851a0521 | 1 | #include "mbed.h" |
chris | 0:7d24851a0521 | 2 | |
chris | 0:7d24851a0521 | 3 | #define NUM_SAMPLES 500000 // size of sample series |
chris | 0:7d24851a0521 | 4 | #define SAMPLE_BLOCKS 5 |
chris | 0:7d24851a0521 | 5 | |
chris | 0:7d24851a0521 | 6 | Timer t; |
chris | 0:7d24851a0521 | 7 | |
chris | 0:7d24851a0521 | 8 | Serial pc(USBTX,USBRX); |
chris | 0:7d24851a0521 | 9 | |
chris | 0:7d24851a0521 | 10 | AnalogIn ain(p17); |
chris | 0:7d24851a0521 | 11 | |
chris | 0:7d24851a0521 | 12 | // initialise error counters |
chris | 0:7d24851a0521 | 13 | int num_4; |
chris | 0:7d24851a0521 | 14 | int num_8; |
chris | 0:7d24851a0521 | 15 | int num_16; |
chris | 0:7d24851a0521 | 16 | int num_32; |
chris | 0:7d24851a0521 | 17 | int num_64; |
chris | 0:7d24851a0521 | 18 | int num_128; |
chris | 0:7d24851a0521 | 19 | int num_256; |
chris | 0:7d24851a0521 | 20 | int num_512; |
chris | 0:7d24851a0521 | 21 | int num_1024; |
chris | 1:748e07bbe96e | 22 | int num_spike; |
chris | 0:7d24851a0521 | 23 | |
chris | 0:7d24851a0521 | 24 | int main() { |
chris | 0:7d24851a0521 | 25 | |
chris | 0:7d24851a0521 | 26 | int num_samples = 0; |
chris | 0:7d24851a0521 | 27 | |
chris | 0:7d24851a0521 | 28 | num_4 = 0; |
chris | 0:7d24851a0521 | 29 | num_8 = 0; |
chris | 0:7d24851a0521 | 30 | num_16 = 0; |
chris | 0:7d24851a0521 | 31 | num_32 = 0; |
chris | 0:7d24851a0521 | 32 | num_64 = 0; |
chris | 0:7d24851a0521 | 33 | num_128 = 0; |
chris | 0:7d24851a0521 | 34 | num_256 = 0; |
chris | 0:7d24851a0521 | 35 | num_512 = 0; |
chris | 0:7d24851a0521 | 36 | num_1024 = 0; |
chris | 1:748e07bbe96e | 37 | num_spike = 0; |
chris | 0:7d24851a0521 | 38 | |
chris | 0:7d24851a0521 | 39 | |
chris | 0:7d24851a0521 | 40 | // Take the average over 500,000 samples |
chris | 0:7d24851a0521 | 41 | // This is because the bias to 1.65v has a tolerance |
chris | 0:7d24851a0521 | 42 | float AVERAGE = 0.5; |
chris | 0:7d24851a0521 | 43 | |
chris | 0:7d24851a0521 | 44 | pc.printf("Taking an average over %d samples\n",NUM_SAMPLES); |
chris | 0:7d24851a0521 | 45 | while (num_samples < NUM_SAMPLES) { |
chris | 0:7d24851a0521 | 46 | float r = ain.read(); |
chris | 0:7d24851a0521 | 47 | |
chris | 0:7d24851a0521 | 48 | if ((r > 0.45) && (r < 0.55)) { |
chris | 0:7d24851a0521 | 49 | AVERAGE += r; |
chris | 0:7d24851a0521 | 50 | num_samples++; |
chris | 0:7d24851a0521 | 51 | } |
chris | 0:7d24851a0521 | 52 | } |
chris | 1:748e07bbe96e | 53 | |
chris | 0:7d24851a0521 | 54 | AVERAGE /= NUM_SAMPLES; |
chris | 1:748e07bbe96e | 55 | |
chris | 0:7d24851a0521 | 56 | num_samples = 0; |
chris | 0:7d24851a0521 | 57 | pc.printf("Average = %f\n",AVERAGE); |
chris | 0:7d24851a0521 | 58 | |
chris | 0:7d24851a0521 | 59 | |
chris | 0:7d24851a0521 | 60 | // Now start sampling series of 500,000 |
chris | 0:7d24851a0521 | 61 | // acculumating the errors seen in each range |
chris | 0:7d24851a0521 | 62 | pc.printf("Profiling %d samples\n",SAMPLE_BLOCKS*NUM_SAMPLES); |
chris | 1:748e07bbe96e | 63 | |
chris | 1:748e07bbe96e | 64 | |
chris | 0:7d24851a0521 | 65 | for (int j=0; j < SAMPLE_BLOCKS ; j++) { |
chris | 0:7d24851a0521 | 66 | |
chris | 0:7d24851a0521 | 67 | t.reset(); |
chris | 0:7d24851a0521 | 68 | t.start(); |
chris | 1:748e07bbe96e | 69 | |
chris | 0:7d24851a0521 | 70 | for (int i = 0; i < NUM_SAMPLES ; i++) { |
chris | 0:7d24851a0521 | 71 | float a = ain.read(); |
chris | 0:7d24851a0521 | 72 | |
chris | 1:748e07bbe96e | 73 | |
chris | 1:748e07bbe96e | 74 | if (a == 1.0) { |
chris | 1:748e07bbe96e | 75 | num_spike++; // > 2048 lsb |
chris | 0:7d24851a0521 | 76 | } else if (a > (AVERAGE + 0.2500)) { |
chris | 0:7d24851a0521 | 77 | num_1024++; // > 1024 lsb |
chris | 0:7d24851a0521 | 78 | } else if (a > (AVERAGE + 0.0625)) { |
chris | 0:7d24851a0521 | 79 | num_512++; // > 512 lsb |
chris | 0:7d24851a0521 | 80 | } else if (a > (AVERAGE + 0.0312)) { |
chris | 0:7d24851a0521 | 81 | num_256++; // > 256 lsb |
chris | 0:7d24851a0521 | 82 | } else if (a > (AVERAGE + 0.0312)) { |
chris | 0:7d24851a0521 | 83 | num_128++; // > 128 lsb |
chris | 0:7d24851a0521 | 84 | } else if (a > (AVERAGE + 0.0156)) { |
chris | 0:7d24851a0521 | 85 | num_64++; // > 64 lsb |
chris | 0:7d24851a0521 | 86 | } else if (a > (AVERAGE + 0.0078)) { |
chris | 0:7d24851a0521 | 87 | num_32++; // > 32 lsb |
chris | 0:7d24851a0521 | 88 | } else if (a > (AVERAGE + 0.0039)) { |
chris | 0:7d24851a0521 | 89 | num_16++; // > 16 lsb |
chris | 0:7d24851a0521 | 90 | } else if (a > (AVERAGE + 0.0019)) { |
chris | 0:7d24851a0521 | 91 | num_8++; // > 8 lsb |
chris | 0:7d24851a0521 | 92 | } else if (a > (AVERAGE + 0.0009)) { |
chris | 0:7d24851a0521 | 93 | num_4++; // > 8 lsb |
chris | 0:7d24851a0521 | 94 | } |
chris | 0:7d24851a0521 | 95 | |
chris | 0:7d24851a0521 | 96 | num_samples++; |
chris | 0:7d24851a0521 | 97 | } |
chris | 0:7d24851a0521 | 98 | t.stop(); |
chris | 1:748e07bbe96e | 99 | |
chris | 1:748e07bbe96e | 100 | if (j==0) { |
chris | 1:748e07bbe96e | 101 | pc.printf("Samples\t"); |
chris | 1:748e07bbe96e | 102 | pc.printf("4\t"); |
chris | 1:748e07bbe96e | 103 | pc.printf("8\t"); |
chris | 1:748e07bbe96e | 104 | pc.printf("16\t"); |
chris | 1:748e07bbe96e | 105 | pc.printf("32\t"); |
chris | 1:748e07bbe96e | 106 | pc.printf("64\t"); |
chris | 1:748e07bbe96e | 107 | pc.printf("128\t"); |
chris | 1:748e07bbe96e | 108 | pc.printf("256\t"); |
chris | 1:748e07bbe96e | 109 | pc.printf("512\t"); |
chris | 1:748e07bbe96e | 110 | pc.printf("1024\t"); |
chris | 1:748e07bbe96e | 111 | pc.printf("Spikes\t"); |
chris | 1:748e07bbe96e | 112 | pc.printf("Time\n"); |
chris | 1:748e07bbe96e | 113 | } |
chris | 1:748e07bbe96e | 114 | |
chris | 1:748e07bbe96e | 115 | |
chris | 0:7d24851a0521 | 116 | // Every 500,000 print the results |
chris | 0:7d24851a0521 | 117 | pc.printf("%d\t",num_samples); |
chris | 0:7d24851a0521 | 118 | pc.printf("%d\t",num_4); |
chris | 0:7d24851a0521 | 119 | pc.printf("%d\t",num_8); |
chris | 0:7d24851a0521 | 120 | pc.printf("%d\t",num_16); |
chris | 0:7d24851a0521 | 121 | pc.printf("%d\t",num_32); |
chris | 0:7d24851a0521 | 122 | pc.printf("%d\t",num_64); |
chris | 0:7d24851a0521 | 123 | pc.printf("%d\t",num_128); |
chris | 0:7d24851a0521 | 124 | pc.printf("%d\t",num_256); |
chris | 0:7d24851a0521 | 125 | pc.printf("%d\t",num_512); |
chris | 0:7d24851a0521 | 126 | pc.printf("%d\t",num_1024); |
chris | 1:748e07bbe96e | 127 | pc.printf("%d\t",num_spike); |
chris | 1:748e07bbe96e | 128 | pc.printf("%fs\n",t.read()); |
chris | 0:7d24851a0521 | 129 | } |
chris | 1:748e07bbe96e | 130 | |
chris | 0:7d24851a0521 | 131 | pc.printf("==== Test Complete ====\n"); |
chris | 0:7d24851a0521 | 132 | } |