
Zitat von
robocat
als referenzspannung der wandlung wird die spannung an Aref genommen, als eingang C0. deshalb muss man ADMUX hier nicht setzen.
Hi, möchte hier gern näher drauf eingehn:
Habe -zugegeben- die fertige Funktion aus dem Forum kopiert, möchte allerdings 5V als Referenzspannung verwenden. Hab also den Code etwas verändert und bei ADMUX |= (1<<REFS1) | (1<<REFS0); das 1<<REFS1) rausgenommen. Schaut dann so aus:
Code:
uint16_t ReadChannel(uint8_t channel)
{
uint8_t i;
uint16_t result = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADFR); // enable converter | prescaler bit2 | prescaler bit1 | kontinuierliche wandlungen
ADMUX = channel; // Kanal des Multiplexers waehlen
ADMUX |= (1<<REFS0); // Referenzspannung 5 V
ADCSRA |= (1<<ADSC); // Dummyreadout
while(ADCSRA & (1<<ADSC));
result = ADCW;
result = 0;
for(i=0; i<3; i++) // 3x auslesen
{
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
result += ADCW;
}
ADCSRA &= ~(1<<ADEN); // ADC wieder deaktivieren
result /= 3; // Durchschnittswert ausrechnen.
return result;
}
Ist das denn so weit richtig??
Zweite Frage:
Im Funktionsaufruf habe ich als Parameter lediglich eine 0 übergeben. Reicht das aus um den AD Pin PC0 dafür auszuwählen?
danke schon mal im Voraus,
Franz
Lesezeichen