#include <avr/io.h>
#include <avr/interrupts.h>	//file to be included if using interrupts

void avr_init(void);

ISR(ADC_vect)
{
	adc_value = ADCH;
	ADCSRA |= _BV(ADSC);
}

int main(void)
{
	unsigned char adc_value = 0;
	avr_init();
	sei();
	ADCSRA |= _BV(ADSC);
	while(1==1)
	{
		OCR0 = adc_value; //Instead of starting conversion and waiting for it here, it is done in the interrupt routine
	}
}

void avr_init()
{
	DDRB = 0xff; //PORTB output
	PORTB = 0x00;
	OCR0 = 0;
	TCCR0 = _BV(WGM01) | _BV(WGM00) | _BV(COM01) | _BV(CS00); //Fast pwm with 1 prescaler with 16Mhz to get pwm freq 62.5kHz
	ADCSRA = _BV(ADEN)| _BV(ADPS2) | _BV(ADPS1) | _BV(ADIE); //Prescaler 64 with 16Mhz to get sampling freq 19.2kHz
	ADMUX = _BV(ADLAR);
}
