2009-06-01 15:03:09 +02:00
|
|
|
#include "adc.h"
|
|
|
|
|
|
|
|
|
|
|
|
uint16_t readADC(uint8_t channel) {
|
|
|
|
uint16_t result;
|
2009-06-11 14:48:22 +02:00
|
|
|
uint8_t i;
|
2009-06-01 15:03:09 +02:00
|
|
|
|
|
|
|
//ADC aktiv, Prescaler 16
|
|
|
|
ADCSRA = (1 << ADEN) | (1 << ADPS2);
|
|
|
|
|
|
|
|
//ADC0 kein mutiplexing
|
|
|
|
ADMUX = channel;
|
|
|
|
|
|
|
|
// AVcc als Versorgungspannung
|
|
|
|
ADMUX |= (1 << REFS0);
|
|
|
|
|
|
|
|
//ADC starten mit Dummyreadout
|
|
|
|
ADCSRA |= (1 << ADSC);
|
|
|
|
while(ADCSRA & (1 << ADSC));
|
|
|
|
|
2009-06-11 14:48:22 +02:00
|
|
|
result = 0;
|
2009-06-01 15:03:09 +02:00
|
|
|
|
2009-06-11 14:48:22 +02:00
|
|
|
for(i = 0; i < ADC_READ_CYCELS; i++) {
|
2009-06-01 15:03:09 +02:00
|
|
|
ADCSRA |= (1 << ADSC);
|
|
|
|
while(ADCSRA & (1 << ADSC));
|
2009-06-11 14:48:22 +02:00
|
|
|
result += ADCW / ADC_READ_CYCELS;
|
|
|
|
_delay_us(1);
|
|
|
|
}
|
2009-06-01 15:03:09 +02:00
|
|
|
|
|
|
|
//ADC aus
|
|
|
|
ADCSRA &= ~(1 << ADEN);
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|