Program to benchmark AnalogIn performance

Dependencies:   mbed

Fork of ADC_spikes by Chris Styles

Committer:
chris
Date:
Fri Dec 02 13:51:06 2011 +0000
Revision:
3:4c45267b653d
Parent:
2:4c61969f2207

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris 3:4c45267b653d 1 #include "mbed.h"
chris 3:4c45267b653d 2
chris 3:4c45267b653d 3 #define NUM_SAMPLES 500000 // size of sample series
chris 3:4c45267b653d 4 #define SAMPLE_BLOCKS 5
chris 3:4c45267b653d 5
chris 3:4c45267b653d 6 Timer t;
chris 3:4c45267b653d 7
chris 3:4c45267b653d 8 Serial pc(USBTX,USBRX);
chris 3:4c45267b653d 9
chris 3:4c45267b653d 10 AnalogIn ain(p20);
chris 3:4c45267b653d 11
chris 3:4c45267b653d 12 // initialise error counters
chris 3:4c45267b653d 13 int num_4;
chris 3:4c45267b653d 14 int num_8;
chris 3:4c45267b653d 15 int num_16;
chris 3:4c45267b653d 16 int num_32;
chris 3:4c45267b653d 17 int num_64;
chris 3:4c45267b653d 18 int num_128;
chris 3:4c45267b653d 19 int num_256;
chris 3:4c45267b653d 20 int num_512;
chris 3:4c45267b653d 21 int num_1024;
chris 3:4c45267b653d 22 int num_2048;
chris 3:4c45267b653d 23
chris 3:4c45267b653d 24
chris 3:4c45267b653d 25 int main() {
chris 3:4c45267b653d 26
chris 3:4c45267b653d 27 pc.baud(115200);
chris 3:4c45267b653d 28
chris 3:4c45267b653d 29 int num_samples = 0;
chris 3:4c45267b653d 30
chris 3:4c45267b653d 31 num_4 = 0;
chris 3:4c45267b653d 32 num_8 = 0;
chris 3:4c45267b653d 33 num_16 = 0;
chris 3:4c45267b653d 34 num_32 = 0;
chris 3:4c45267b653d 35 num_64 = 0;
chris 3:4c45267b653d 36 num_128 = 0;
chris 3:4c45267b653d 37 num_256 = 0;
chris 3:4c45267b653d 38 num_512 = 0;
chris 3:4c45267b653d 39 num_1024 = 0;
chris 3:4c45267b653d 40 num_2048 = 0;
chris 3:4c45267b653d 41
chris 3:4c45267b653d 42 // Take the average over 500,000 samples
chris 3:4c45267b653d 43 // This is because the bias to 1.65v has a tolerance
chris 3:4c45267b653d 44 float AVERAGE = 0.5;
chris 3:4c45267b653d 45
chris 3:4c45267b653d 46 pc.printf("Taking an average over %d samples\n",NUM_SAMPLES);
chris 3:4c45267b653d 47 while (num_samples < NUM_SAMPLES) {
chris 3:4c45267b653d 48 float r = ain.read();
chris 3:4c45267b653d 49
chris 3:4c45267b653d 50 if ((r > 0.45) && (r < 0.55)) {
chris 3:4c45267b653d 51 AVERAGE += r;
chris 3:4c45267b653d 52 num_samples++;
chris 3:4c45267b653d 53 }
chris 3:4c45267b653d 54 }
chris 3:4c45267b653d 55
chris 3:4c45267b653d 56 AVERAGE /= NUM_SAMPLES;
chris 3:4c45267b653d 57
chris 3:4c45267b653d 58 num_samples = 0;
chris 3:4c45267b653d 59 pc.printf("Average = %f\n",AVERAGE);
chris 3:4c45267b653d 60
chris 3:4c45267b653d 61
chris 3:4c45267b653d 62 // Now start sampling series of 500,000
chris 3:4c45267b653d 63 // acculumating the errors seen in each range
chris 3:4c45267b653d 64 pc.printf("Profiling %d samples\n",SAMPLE_BLOCKS*NUM_SAMPLES);
chris 3:4c45267b653d 65 for (int j=0; j < SAMPLE_BLOCKS ; j++) {
chris 3:4c45267b653d 66
chris 3:4c45267b653d 67 t.reset();
chris 3:4c45267b653d 68 t.start();
chris 3:4c45267b653d 69
chris 3:4c45267b653d 70 for (int i = 0; i < NUM_SAMPLES ; i++) {
chris 3:4c45267b653d 71 float a = ain.read();
chris 3:4c45267b653d 72
chris 3:4c45267b653d 73 if (a > (AVERAGE + 0.5000)) {
chris 3:4c45267b653d 74 num_2048++; // > 2048 lsb
chris 3:4c45267b653d 75 } else if (a > (AVERAGE + 0.2500)) {
chris 3:4c45267b653d 76 num_1024++; // > 1024 lsb
chris 3:4c45267b653d 77 } else if (a > (AVERAGE + 0.0625)) {
chris 3:4c45267b653d 78 num_512++; // > 512 lsb
chris 3:4c45267b653d 79 } else if (a > (AVERAGE + 0.0312)) {
chris 3:4c45267b653d 80 num_256++; // > 256 lsb
chris 3:4c45267b653d 81 } else if (a > (AVERAGE + 0.0312)) {
chris 3:4c45267b653d 82 num_128++; // > 128 lsb
chris 3:4c45267b653d 83 } else if (a > (AVERAGE + 0.0156)) {
chris 3:4c45267b653d 84 num_64++; // > 64 lsb
chris 3:4c45267b653d 85 } else if (a > (AVERAGE + 0.0078)) {
chris 3:4c45267b653d 86 num_32++; // > 32 lsb
chris 3:4c45267b653d 87 } else if (a > (AVERAGE + 0.0039)) {
chris 3:4c45267b653d 88 num_16++; // > 16 lsb
chris 3:4c45267b653d 89 } else if (a > (AVERAGE + 0.0019)) {
chris 3:4c45267b653d 90 num_8++; // > 8 lsb
chris 3:4c45267b653d 91 } else if (a > (AVERAGE + 0.0009)) {
chris 3:4c45267b653d 92 num_4++; // > 8 lsb
chris 3:4c45267b653d 93 }
chris 3:4c45267b653d 94
chris 3:4c45267b653d 95 num_samples++;
chris 3:4c45267b653d 96 }
chris 3:4c45267b653d 97 t.stop();
chris 3:4c45267b653d 98
chris 3:4c45267b653d 99 // Every 500,000 print the results
chris 3:4c45267b653d 100 pc.printf("%d\t",num_samples);
chris 3:4c45267b653d 101 pc.printf("%d\t",num_4);
chris 3:4c45267b653d 102 pc.printf("%d\t",num_8);
chris 3:4c45267b653d 103 pc.printf("%d\t",num_16);
chris 3:4c45267b653d 104 pc.printf("%d\t",num_32);
chris 3:4c45267b653d 105 pc.printf("%d\t",num_64);
chris 3:4c45267b653d 106 pc.printf("%d\t",num_128);
chris 3:4c45267b653d 107 pc.printf("%d\t",num_256);
chris 3:4c45267b653d 108 pc.printf("%d\t",num_512);
chris 3:4c45267b653d 109 pc.printf("%d\t",num_1024);
chris 3:4c45267b653d 110 pc.printf("%d\t",num_2048);
chris 3:4c45267b653d 111 pc.printf("%f\n",t.read());
chris 3:4c45267b653d 112 }
chris 3:4c45267b653d 113
chris 3:4c45267b653d 114 pc.printf("==== Test Complete ====\n");
chris 3:4c45267b653d 115 }