Program to benchmark AnalogIn performance

Dependencies:   mbed

Fork of ADC_spikes by Chris Styles

main.cpp

Committer:
chris
Date:
2011-12-02
Revision:
1:bdd134268a52
Parent:
0:62a007afbcbf
Child:
2:4c61969f2207

File content as of revision 1:bdd134268a52:

#include "mbed.h"

#define NUM_SAMPLES 500000 // size of sample series

Serial pc(USBTX,USBRX);

AnalogIn ain(p17);

// 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 teh 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.49) && (r < 0.51)) {
            AVERAGE = (AVERAGE + r) /2.0;
            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 
    while (1) {

        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++;
        }

        // 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\n",num_2048);
    }
}