#include <avr/io.h>
#include <avr/interrupts.h> //file to be included if using interrupts
#include <stdint.h>
static volatile uint8_t adc_value = 0;
void avr_init(void);
ISR(ADC_vect)
{
adc_value = ADCH;
ADCSRA |= _BV(ADSC);
}
int main(void)
{
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);
}