// Prescaler accuracy test https://www.gammon.com.au/adc
void setup ()
{
Serial.begin (115200);
Serial.println ();
ADCSRA &= ~(bit (ADPS0) | bit (ADPS1) | bit (ADPS2)); // clear prescaler bits
// uncomment as required
// ADCSRA |= bit (ADPS0); // 2
// ADCSRA |= bit (ADPS1); // 4
// ADCSRA |= bit (ADPS0) | bit (ADPS1); // 8
// ADCSRA |= bit (ADPS2); // 16
// ADCSRA |= bit (ADPS0) | bit (ADPS2); // 32
// ADCSRA |= bit (ADPS1) | bit (ADPS2); // 64
ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); // 128
} // end of setup
const int ITERATIONS = 1000;
unsigned long totals [6];
const byte lowPort = 0;
const byte highPort = 3;
void loop ()
{
for (int whichPort = lowPort; whichPort <= highPort; whichPort++)
totals [whichPort - lowPort] = 0;
unsigned long startTime = micros ();
for (int i = 0; i < ITERATIONS; i++)
{
for (int whichPort = lowPort; whichPort <= highPort; whichPort++)
{
int result = analogRead (whichPort);
totals [whichPort - lowPort] += result;
}
}
unsigned long endTime = micros ();
for (int whichPort = lowPort; whichPort <= highPort; whichPort++)
{
Serial.print ("Analog port = ");
Serial.print (whichPort);
Serial.print (", average result = ");
Serial.println (totals [whichPort - lowPort] / ITERATIONS);
}
Serial.print ("Time taken = ");
Serial.print (endTime - startTime);
Serial.println ();
Serial.flush ();
exit (0);
} // end of loop
//results:
//128
// Analog port = 0, average result = 516
// Analog port = 1, average result = 523
// Analog port = 2, average result = 514
// Analog port = 3, average result = 519
// Time taken = 428092
//64
// Analog port = 0, average result = 513
// Analog port = 1, average result = 510
// Analog port = 2, average result = 497
// Analog port = 3, average result = 512
// Time taken = 219480
//32
// Analog port = 0, average result = 513
// Analog port = 1, average result = 494
// Analog port = 2, average result = 513
// Analog port = 3, average result = 515
// Time taken = 115536
//16
// Analog port = 0, average result = 513
// Analog port = 1, average result = 499
// Analog port = 2, average result = 504
// Analog port = 3, average result = 512
// Time taken = 64300
//8
// Analog port = 0, average result = 498
// Analog port = 1, average result = 498
// Analog port = 2, average result = 523
// Analog port = 3, average result = 513
// Time taken = 38056
//4
// Analog port = 0, average result = 517
// Analog port = 1, average result = 521
// Analog port = 2, average result = 521
// Analog port = 3, average result = 506
// Time taken = 24316
//2
// Analog port = 0, average result = 527
// Analog port = 1, average result = 494
// Analog port = 2, average result = 491
// Analog port = 3, average result = 508
// Time taken = 18052