Program to benchmark AnalogIn performance

Dependencies:   mbed

Fork of ADC_spikes by Chris Styles

Committer:
chris
Date:
Fri Dec 02 10:04:15 2011 +0000
Revision:
1:bdd134268a52
Parent:
0:62a007afbcbf
Child:
2:4c61969f2207

        

Who changed what in which revision?

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