Added explicit check for spikes

Dependencies:   mbed

Committer:
chris
Date:
Fri Dec 02 17:11:13 2011 +0000
Revision:
0:7d24851a0521
Child:
1:748e07bbe96e

        

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 0:7d24851a0521 22 int num_2048;
chris 0:7d24851a0521 23
chris 0:7d24851a0521 24 int main() {
chris 0:7d24851a0521 25
chris 0:7d24851a0521 26 pc.baud(115200);
chris 0:7d24851a0521 27
chris 0:7d24851a0521 28 int num_samples = 0;
chris 0:7d24851a0521 29
chris 0:7d24851a0521 30 num_4 = 0;
chris 0:7d24851a0521 31 num_8 = 0;
chris 0:7d24851a0521 32 num_16 = 0;
chris 0:7d24851a0521 33 num_32 = 0;
chris 0:7d24851a0521 34 num_64 = 0;
chris 0:7d24851a0521 35 num_128 = 0;
chris 0:7d24851a0521 36 num_256 = 0;
chris 0:7d24851a0521 37 num_512 = 0;
chris 0:7d24851a0521 38 num_1024 = 0;
chris 0:7d24851a0521 39 num_2048 = 0;
chris 0:7d24851a0521 40
chris 0:7d24851a0521 41
chris 0:7d24851a0521 42 // Take the average over 500,000 samples
chris 0:7d24851a0521 43 // This is because the bias to 1.65v has a tolerance
chris 0:7d24851a0521 44 float AVERAGE = 0.5;
chris 0:7d24851a0521 45
chris 0:7d24851a0521 46 pc.printf("Taking an average over %d samples\n",NUM_SAMPLES);
chris 0:7d24851a0521 47 while (num_samples < NUM_SAMPLES) {
chris 0:7d24851a0521 48 float r = ain.read();
chris 0:7d24851a0521 49
chris 0:7d24851a0521 50 if ((r > 0.45) && (r < 0.55)) {
chris 0:7d24851a0521 51 AVERAGE += r;
chris 0:7d24851a0521 52 num_samples++;
chris 0:7d24851a0521 53 }
chris 0:7d24851a0521 54 }
chris 0:7d24851a0521 55
chris 0:7d24851a0521 56 AVERAGE /= NUM_SAMPLES;
chris 0:7d24851a0521 57
chris 0:7d24851a0521 58 num_samples = 0;
chris 0:7d24851a0521 59 pc.printf("Average = %f\n",AVERAGE);
chris 0:7d24851a0521 60
chris 0:7d24851a0521 61
chris 0:7d24851a0521 62 // Now start sampling series of 500,000
chris 0:7d24851a0521 63 // acculumating the errors seen in each range
chris 0:7d24851a0521 64 pc.printf("Profiling %d samples\n",SAMPLE_BLOCKS*NUM_SAMPLES);
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 0:7d24851a0521 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 0:7d24851a0521 73 if (a > (AVERAGE + 0.5000)) {
chris 0:7d24851a0521 74 num_2048++; // > 2048 lsb
chris 0:7d24851a0521 75 } else if (a > (AVERAGE + 0.2500)) {
chris 0:7d24851a0521 76 num_1024++; // > 1024 lsb
chris 0:7d24851a0521 77 } else if (a > (AVERAGE + 0.0625)) {
chris 0:7d24851a0521 78 num_512++; // > 512 lsb
chris 0:7d24851a0521 79 } else if (a > (AVERAGE + 0.0312)) {
chris 0:7d24851a0521 80 num_256++; // > 256 lsb
chris 0:7d24851a0521 81 } else if (a > (AVERAGE + 0.0312)) {
chris 0:7d24851a0521 82 num_128++; // > 128 lsb
chris 0:7d24851a0521 83 } else if (a > (AVERAGE + 0.0156)) {
chris 0:7d24851a0521 84 num_64++; // > 64 lsb
chris 0:7d24851a0521 85 } else if (a > (AVERAGE + 0.0078)) {
chris 0:7d24851a0521 86 num_32++; // > 32 lsb
chris 0:7d24851a0521 87 } else if (a > (AVERAGE + 0.0039)) {
chris 0:7d24851a0521 88 num_16++; // > 16 lsb
chris 0:7d24851a0521 89 } else if (a > (AVERAGE + 0.0019)) {
chris 0:7d24851a0521 90 num_8++; // > 8 lsb
chris 0:7d24851a0521 91 } else if (a > (AVERAGE + 0.0009)) {
chris 0:7d24851a0521 92 num_4++; // > 8 lsb
chris 0:7d24851a0521 93 }
chris 0:7d24851a0521 94
chris 0:7d24851a0521 95 num_samples++;
chris 0:7d24851a0521 96 }
chris 0:7d24851a0521 97 t.stop();
chris 0:7d24851a0521 98
chris 0:7d24851a0521 99 // Every 500,000 print the results
chris 0:7d24851a0521 100 pc.printf("%d\t",num_samples);
chris 0:7d24851a0521 101 pc.printf("%d\t",num_4);
chris 0:7d24851a0521 102 pc.printf("%d\t",num_8);
chris 0:7d24851a0521 103 pc.printf("%d\t",num_16);
chris 0:7d24851a0521 104 pc.printf("%d\t",num_32);
chris 0:7d24851a0521 105 pc.printf("%d\t",num_64);
chris 0:7d24851a0521 106 pc.printf("%d\t",num_128);
chris 0:7d24851a0521 107 pc.printf("%d\t",num_256);
chris 0:7d24851a0521 108 pc.printf("%d\t",num_512);
chris 0:7d24851a0521 109 pc.printf("%d\t",num_1024);
chris 0:7d24851a0521 110 pc.printf("%d\t",num_2048);
chris 0:7d24851a0521 111 pc.printf("%f\n",t.read());
chris 0:7d24851a0521 112 }
chris 0:7d24851a0521 113
chris 0:7d24851a0521 114 pc.printf("==== Test Complete ====\n");
chris 0:7d24851a0521 115 }