void initUltimateTimer()
{
noInterrupts();
TCCR2A = (1 << WGM21); //CTC Mode Activation| setzten vom funktionsmodus -> soll zum Zählen beginnen, vergleichswert soll erreicht werden und das Program unterbrochen
TCCR2B = (1 << CS21); // Prescaler um 8 dividiert | 500nano sekunden für einen Takt = 125mikro sek
OCR2A = 250; // compare match A interrupt is enabled
//reached after 125µs using 2Mhz counter clock
TIMSK2 = (1 << OCIE2A); // 1 << : wird im Register nach links verschoben
interrupts(); // unterbrechungsfreies arbeiten // alle 125µsek vom timer getimet unterbrochen
ISR(TIMER2_COMPA_vect)
{
ADCSRA = (1 << ADSC); //An-AD-Conversion is started
}
}
void initADC()
{
noInterrupts();
ADCSRA = 0; //
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX = 0;
ADMUX |= (1 << REFS0);
ADCSRA |= (1 << ADEN) | (1 << ADIE);
ADCSRA |= (1 << ADSC);
while(!(ADCSRA & ADIF));
interrupts();
}
uint16_t adc_value[6]= {0};
ISR(ADC_vect)
{
static uint8_t adc_sample_table[] = {0, 1, 2, 3, 4, ,5};
static uint8_t adc_index = 0;
adc_value[adc_sample_table[adc_index++]] = ADC;
if(adc_index == 8) adc_index = 0;
ADMUX = (ADMUX & 0xF0) | adc_sample_table[adc_index];
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); //bit pro sekunde übertragen
initADC();
initUltimateTimer();
}
void loop() {
// put your main code here, to run repeatedly:
}