He encontrado un gazapo en mi código.... Ahora si funciona como debería! La configuración de los registros con |= no fue buena idea.....
#define mysize 600
unsigned long tStart;
unsigned long tEnd;
byte mydata[mysize];
void setup()
{
Serial.begin(115200);
//Prescaler
//ADPS2 - ADPS1 - ADPS0 - Division Factor
//0 - 0 - 0 ->2
//0 - 0 - 1 ->2
//0 - 1 - 0 ->4
//0 - 1 - 1 ->8
//1 - 0 - 0 ->16
//1 - 0 - 1 ->32
//1 - 1 - 0 ->64
//1 - 1 - 1 ->128
//Configure to Prescaler=32
bitWrite(ADCSRA,ADPS2,1);
bitWrite(ADCSRA,ADPS1,0);
bitWrite(ADCSRA,ADPS0,1);
//Entrada A5
ADMUX=(1<<ADLAR)|(0<<REFS1)|(1<<REFS0)|(0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(1<<MUX0);
}
void loop()
{
tStart=micros();
for (int i=0; i<mysize;i++)
{
mydata[i]=analogReadFast();
}
tEnd=micros();
Serial.println("NEW ACQUISITION");
Serial.print("tStart=");
Serial.println(tStart);
Serial.print("tEnd=");
Serial.println(tEnd);
Serial.print("nPoints=");
Serial.println(mysize);
for (int i=0; i<mysize;i++)
{
Serial.println(mydata[i],DEC);
}
}
int analogReadFast()
{
ADCSRA|=(1<<ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
return ADCH;
}
Ahora son 35.6 kHz!! Es decir, 28 us por sample!! El módulo del ADC con el prescaler=32 está trabajando 500 kHz y estoy utilizando 8 bits.