Mihail Stoyanov
/
ADC_spikes
Program to benchmark AnalogIn performance
Fork of ADC_spikes by
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"); }