Added explicit check for spikes

Dependencies:   mbed

Committer:
chris
Date:
Mon Dec 05 14:23:15 2011 +0000
Revision:
1:748e07bbe96e
Parent:
0:7d24851a0521

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }