/* Test des Free run mode im ADC ATmega328P, aka Arduino Uno/Micro/Nano */ #define F_CPU 16000000UL #include #include #include #define FREERUN // ADC initialisieren void adc_init(void) { ADMUX = (1 << REFS0); // AVcc als Referenz, ADC0 als Eingang ADCSRA = (1 << ADEN) | // ADC einschalten (1 << ADIE) | // Interrupt einschalten #ifdef FREERUN (1 << ADATE) | // Free Running Modus aktivieren #endif (1 << ADSC) | // Start conversion (1 << ADPS2); // Prescaler auf 16 sei(); // globale Interrupts aktivieren } // ISR für den ADC-Interrupt ISR(ADC_vect) { static uint8_t channel; PINB = (1< 7) channel = 0; #ifndef FREERUN ADCSRA |= (1 << ADSC); // Start next conversion manually #endif } int main(void) { DDRB = (1<