unsigned int readADC_10BIT(unsigned char channel) { unsigned char m; unsigned int result; ADCSRA = 0x86; // Frequenzvorteiler // setzen auf 64 (1) und ADC aktivieren (1) ADMUX = channel; // Kanal waehlen /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */ ADCSRA |= 0x40; // eine ADC-Wandlung while(!(ADCSRA & 0x10)); // auf Abschluss der Konvertierung warten (ADIF-bit) result = 0; /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */ for(m=0;m<4;m++) { ADCSRA |= 0x60; // eine Wandlung "single conversion" while(!(ADCSRA & 0x10)); // auf Abschluss der Konvertierung warten (ADIF-bit) result += ADCL; // Wandlungsergebnisse aufaddieren } ADCSRA &= ~0x80; // ADC deaktivieren (2) result >>= 2; // Summe durch vier teilen = arithm. Mittelwert return result; }