This what I use in a project for setting up the ADC in timer triggered mode for a few AVR types, but using timer1. Maybe you can adapt it for your purpose.
. . .
ISR(ADC_vect) {
// handle register ADC here
}
. . .
// initialisation
cli() ;
// Initialise Timer1
TCCR1A = 0;
TCCR1B = _BV(CS10) | // Bit 2:0 – CS12:0: Clock Select = no prescaler
_BV(WGM13) | // WGM 12 = CTC ICR1 Immediate MAX
_BV(WGM12); // WGM 12 ditto
ICR1 = (((F_CPU + FREQUENCY_CORRECTION)) / 19200) - 1; // was 9600
#if defined(_xATTINY84)
{
ADMUX = 0x00 ; // input ADC0 (PA0) Vref=Vcc
DIDR0 |= _BV(0); // DIDR0 Digital Input Disable Register 0
ADCSRB = _BV(ADTS2) | // Bit 2:0 – ADTS[2:0]: ADC Auto Trigger Source
_BV(ADTS1) | // Timer/Counter1 Capture Event
_BV(ADTS0) | //
_BV(ADLAR) ; // Left adjust
}
#elif defined(_xATTINY841)
{
ADMUXA = 0x00 ; // input ADC0 (PA0)
ADMUXB = 0x00 ; // Vref = Vcc, gain = 1
DIDR0 |= _BV(0); // DIDR0 Digital Input Disable Register 0
ADCSRB = _BV(ADTS2) | // Bit 2:0 – ADTS[2:0]: ADC Auto Trigger Source
_BV(ADTS1) | // Timer/Counter1 Capture Event
_BV(ADTS0) | //
_BV(ADLAR) ; // Left adjust
}
#elif defined(_xATMEGA328)
{
// Analog Port PC0 (pin A0 )
// V0_02 ADLAR and prepare also for reading A1
ADMUX = _BV(REFS0) | _BV(ADLAR) ; // Fixed AVcc reference voltage for ATMega328P !!
DIDR0 |= _BV(ADC0D); // DIDR0 Digital Input Disable Register 0
DIDR0 |= _BV(ADC1D); // DIDR0 Digital Input Disable Register 1
ADCSRB = _BV(ADTS2) | // Bit 2:0 ADTS[2:0]: ADC Auto Trigger Source
_BV(ADTS1) | // Timer/Counter1 Capture Event
_BV(ADTS0); //
}
#else
# error unknown processor type
#endif
ADCSRA = _BV(ADEN) | // Bit 7 ADEN: ADC Enable
_BV(ADSC) | // Bit 6 ADSC: ADC Start Conversion
_BV(ADATE) | // Bit 5 ADATE: ADC Auto Trigger Enable
_BV(ADIE) | //
_BV(ADPS1); // Bits 2:0 ADPS[2:0]: ADC Prescaler Select Bits (div 4 ) // V0_02 div2 NOK, div4 OK, div16 OK
sei() ;