//
// Created by User on 018 18.05.20.
//

#include "ADC.h"
#define ADC_PORT_SELECTION_MASK ((1<<REFS0) | (1<<REFS1) | (1<<ADLAR))

void ADCIO::setup() {
    ADCSRA |= (1<<ADEN); //включаем ADC
    ADCSRA |= (1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);//выставляем делитель частоты 128
    ADMUX |= (1<<REFS0); //используем внешнее опорное напряжение
}

uint16_t ADCIO::read(ADCPort port) {
    ADMUX &= ADC_PORT_SELECTION_MASK;
    ADMUX |= port;
    uint16_t result = 0;
    for(uint8_t i=0;i<ADC_READ_COUNT;i++){
        ADCSRA |= (1<<ADSC);//включаем АЦП
        while((ADCSRA & (1<<ADSC))); //ждём готовность
        result+=(uint16_t)ADCW;
    }
    return result/ADC_READ_COUNT;
}