Program to benchmark AnalogIn performance
main.cpp
- Committer:
- chris
- Date:
- 2011-12-02
- Revision:
- 3:4c45267b653d
- Parent:
- 2:4c61969f2207
File content as of revision 3:4c45267b653d:
#include "mbed.h"
#define NUM_SAMPLES 500000 // size of sample series
#define SAMPLE_BLOCKS 5
Timer t;
Serial pc(USBTX,USBRX);
AnalogIn ain(p20);
// initialise error counters
int num_4;
int num_8;
int num_16;
int num_32;
int num_64;
int num_128;
int num_256;
int num_512;
int num_1024;
int num_2048;
int main() {
pc.baud(115200);
int num_samples = 0;
num_4 = 0;
num_8 = 0;
num_16 = 0;
num_32 = 0;
num_64 = 0;
num_128 = 0;
num_256 = 0;
num_512 = 0;
num_1024 = 0;
num_2048 = 0;
// Take the average over 500,000 samples
// This is because the bias to 1.65v has a tolerance
float AVERAGE = 0.5;
pc.printf("Taking an average over %d samples\n",NUM_SAMPLES);
while (num_samples < NUM_SAMPLES) {
float r = ain.read();
if ((r > 0.45) && (r < 0.55)) {
AVERAGE += r;
num_samples++;
}
}
AVERAGE /= NUM_SAMPLES;
num_samples = 0;
pc.printf("Average = %f\n",AVERAGE);
// Now start sampling series of 500,000
// acculumating the errors seen in each range
pc.printf("Profiling %d samples\n",SAMPLE_BLOCKS*NUM_SAMPLES);
for (int j=0; j < SAMPLE_BLOCKS ; j++) {
t.reset();
t.start();
for (int i = 0; i < NUM_SAMPLES ; i++) {
float a = ain.read();
if (a > (AVERAGE + 0.5000)) {
num_2048++; // > 2048 lsb
} else if (a > (AVERAGE + 0.2500)) {
num_1024++; // > 1024 lsb
} else if (a > (AVERAGE + 0.0625)) {
num_512++; // > 512 lsb
} else if (a > (AVERAGE + 0.0312)) {
num_256++; // > 256 lsb
} else if (a > (AVERAGE + 0.0312)) {
num_128++; // > 128 lsb
} else if (a > (AVERAGE + 0.0156)) {
num_64++; // > 64 lsb
} else if (a > (AVERAGE + 0.0078)) {
num_32++; // > 32 lsb
} else if (a > (AVERAGE + 0.0039)) {
num_16++; // > 16 lsb
} else if (a > (AVERAGE + 0.0019)) {
num_8++; // > 8 lsb
} else if (a > (AVERAGE + 0.0009)) {
num_4++; // > 8 lsb
}
num_samples++;
}
t.stop();
// Every 500,000 print the results
pc.printf("%d\t",num_samples);
pc.printf("%d\t",num_4);
pc.printf("%d\t",num_8);
pc.printf("%d\t",num_16);
pc.printf("%d\t",num_32);
pc.printf("%d\t",num_64);
pc.printf("%d\t",num_128);
pc.printf("%d\t",num_256);
pc.printf("%d\t",num_512);
pc.printf("%d\t",num_1024);
pc.printf("%d\t",num_2048);
pc.printf("%f\n",t.read());
}
pc.printf("==== Test Complete ====\n");
}