8 ADC-Kanäle schnell auslesen
Hallo,
ich möchte mit einem at90can 8 ADC Kanäle so schnell auslesen:
Der ADC-Takt ist 125 kHz. (16.000.000 Hz / 128 Prescaler)
In dem AVRGCC-Tutorial wird geraten eine Dummy-Messung durchzuführen. Gilt das nur nachdem ich den ADEN gesetzt hab oder auch beim wechseln der Kanäle?
Der Code ist teilweise aus dem AVRGCC-Tutorial
Code:
char i=0;
ADMUX = 0x40; // ADC0
ADCSRA |= (1<<ADSC);
/* Test AD-Wandlung durchführen */
while (ADCSRA & (1<<ADSC))
{
; // Auf Abschluss der Konvertierung warten
}
adc_werte[0] += ADCL;
adc_werte[0] += (ADCH<<8);
adc_werte[0] =0;
/* Test-Wert löschen */
for(i=0; i<5; i++) // 5 Wandlungen durchführen
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion "
while (ADCSRA & (1<<ADSC))
{
; // Auf Abschluss der Konvertierung warten
}
adc_werte[0] += ADCL;
adc_werte[0] += (ADCH<<8);
}
adc_werte[0] /= 5; // Summe durch fünf teilen = arithm. Mittelwert
i=0;
ADMUX = 0x41; // ADC1
ADCSRA |= (1<<ADSC);
/* Test AD-Wandlung durchführen */
while (ADCSRA & (1<<ADSC))
{
; // Auf Abschluss der Konvertierung warten
}
adc_werte[1] += ADCL;
adc_werte[1] += (ADCH<<8);
adc_werte[1] =0;
/* Test-Wert löschen */
for(i=0; i<5; i++) // 5 Wandlungen durchführen
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion "
while (ADCSRA & (1<<ADSC))
{
; // Auf Abschluss der Konvertierung warten
}
adc_werte[1] += ADCL;
adc_werte[1] += (ADCH<<8);
}
adc_werte[1] /= 5; // Summe durch fünf teilen = arithm. Mittelwert
i=0;
// usw.