Program to benchmark AnalogIn performance

Dependencies:   mbed

Fork of ADC_spikes by Chris Styles

main.cpp

Committer:
chris
Date:
2011-12-01
Revision:
0:62a007afbcbf
Child:
1:bdd134268a52

File content as of revision 0:62a007afbcbf:

#include "mbed.h"

#define NUM_SAMPLES 500000

DigitalOut myled(LED1);
Serial pc(USBTX,USBRX);

AnalogIn ain(p17);

Timer t;

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_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;

/*
    while (1) {
        pc.printf("%f\n",ain.read());
//        wait(0.1);
    }
*/




// do a calibration

    float AVERAGE = 0.5;

    // taking an average    
    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++;
     }
    
    }
    pc.printf("Average = %f\n",AVERAGE);

        

    pc.printf("Reading floats\n");
    num_samples = 0;
    t.reset();
    t.start();
    
    while (num_samples < NUM_SAMPLES) {
        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
        
        num_samples++;
    }
    
    t.stop();
    pc.printf("Time taken for %d samples was %fs\n",NUM_SAMPLES,t.read());
    pc.printf("over 8 lsb = %d\n",num_8);
    pc.printf("over 16 lsb = %d\n",num_16);
    pc.printf("over 32 lsb = %d\n",num_32);
    pc.printf("over 64 lsb = %d\n",num_64);
    pc.printf("over 128 lsb = %d\n",num_128);
    pc.printf("over 256 lsb = %d\n",num_256);
    pc.printf("over 512 lsb = %d\n",num_512);
    pc.printf("over 1024 lsb = %d\n",num_1024);
    pc.printf("over 2048 lsb = %d\n",num_2048);





/*
    pc.printf("Reading _u16\n");
    num_samples = 0;
    t.reset();
    t.start();
    while (num_samples < NUM_SAMPLES) {
        int a = ain.read_u16();
        num_samples++;
    }
    t.stop();
    pc.printf("Time taken for %d samples was %fs\n",NUM_SAMPLES,t.read());

*/


}