#include "adu.h"

void ADU::init() volatile
{
	// externe Referenz an AREF
	ADMUX = _BV(REFS0);

	// ADC aktiviert, Interruptbetrieb, prescaler = 128
	ADCSRA = _BV(ADEN) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
}

void ADU::handleConversionComplete() volatile
{
	active = false;
}

uint16_t ADU::getValue(uint8_t channel) volatile
{
	while(active);
	active = true;
	
	// lege Kanal fest
	ADMUX = (ADMUX & 0xE0) | channel;

	// starte Konvertierung
	ADCSRA |= _BV(ADSC);
	
	// warte auf Ende der Konvertierung
	while(active);
	
	return ADCW;
}