Not happy with my results today
Attached the results I achieved today... the best sample time was about 7.9 uS with 8 bit... until about 10Khz (signal) the resolution is acceptable... but something over that value is not good.
I am using an Arduino Nano.
long numSamples = 0;
byte samples = 200;
byte values[200];
int i;
long t, t0;
void setup()
{
Serial.begin(9600);
ADCSRA = 0; // clear ADCSRA register
ADCSRB = 0; // clear ADCSRB register
ADMUX |= (0 & 0x07); // set A0 analog input pin
ADMUX |= (1 << REFS1) | (1 << REFS0); // set reference voltage
ADMUX |= (1 << ADLAR); // left align ADC value to 8 bits from ADCH register
// sampling rate is [ADC clock] / [prescaler] / [conversion clock cycles]
// for Arduino Uno ADC clock is 16 MHz and a conversion takes 13 clock cycles
//ADCSRA |= (1 << ADPS2) | (1 << ADPS0); // 32 prescaler for 38.5 KHz
//ADCSRA |= (1 << ADPS2); // 16 prescaler for 76.9 KHz
ADCSRA |= (1 << ADPS1) | (1 << ADPS0); // 8 prescaler for 153.8 KHz
//ADCSRA |= (1 << ADPS1); // 4 prescaler
//ADCSRA |= (1 << ADPS0); // 4 prescaler
ADCSRA |= (1 << ADATE); // enable auto trigger
ADCSRA |= (1 << ADIE); // enable interrupts when measurement complete
ADCSRA |= (1 << ADEN); // enable ADC
ADCSRA |= (1 << ADSC); // start ADC measurements
}
ISR(ADC_vect)
{
if (numSamples < samples){
//byte x = ADCH; // read 8 bit value from ADC
values[numSamples] = ADCH;
//Serial.println(x);
numSamples++;
}
}
void loop()
{
if (numSamples == samples)
{
Serial.println("---- begin");
t = micros() - t0; // calculate elapsed time
Serial.print("uS between samples: ");
Serial.println((t * 1.0) / (samples * 1.0));
Serial.println(t);
//delay(2000);
for(i = 0; i < samples; i++) {
//Serial.println(values[i]);
Serial.println(values[i] * 1.1 / 255.0);
}
delay(10000);
// restart
t0 = micros();
numSamples = 0;
}
}
Attached the results I achieved today... the best sample time was about 7.9 uS with 8 bit... until about 10Khz (signal) the resolution is acceptable... but something over that value is not good.
I am using an Arduino Nano.
long numSamples = 0;
byte samples = 200;
byte values[200];
int i;
long t, t0;
void setup()
{
Serial.begin(9600);
ADCSRA = 0; // clear ADCSRA register
ADCSRB = 0; // clear ADCSRB register
ADMUX |= (0 & 0x07); // set A0 analog input pin
ADMUX |= (1 << REFS1) | (1 << REFS0); // set reference voltage
ADMUX |= (1 << ADLAR); // left align ADC value to 8 bits from ADCH register
// sampling rate is [ADC clock] / [prescaler] / [conversion clock cycles]
// for Arduino Uno ADC clock is 16 MHz and a conversion takes 13 clock cycles
//ADCSRA |= (1 << ADPS2) | (1 << ADPS0); // 32 prescaler for 38.5 KHz
//ADCSRA |= (1 << ADPS2); // 16 prescaler for 76.9 KHz
ADCSRA |= (1 << ADPS1) | (1 << ADPS0); // 8 prescaler for 153.8 KHz
//ADCSRA |= (1 << ADPS1); // 4 prescaler
//ADCSRA |= (1 << ADPS0); // 4 prescaler
ADCSRA |= (1 << ADATE); // enable auto trigger
ADCSRA |= (1 << ADIE); // enable interrupts when measurement complete
ADCSRA |= (1 << ADEN); // enable ADC
ADCSRA |= (1 << ADSC); // start ADC measurements
}
ISR(ADC_vect)
{
if (numSamples < samples){
//byte x = ADCH; // read 8 bit value from ADC
values[numSamples] = ADCH;
//Serial.println(x);
numSamples++;
}
}
void loop()
{
if (numSamples == samples)
{
Serial.println("---- begin");
t = micros() - t0; // calculate elapsed time
Serial.print("uS between samples: ");
Serial.println((t * 1.0) / (samples * 1.0));
Serial.println(t);
//delay(2000);
for(i = 0; i < samples; i++) {
//Serial.println(values[i]);
Serial.println(values[i] * 1.1 / 255.0);
}
delay(10000);
// restart
t0 = micros();
numSamples = 0;
}
}
Comment