#include "device_adc.h" uint16_t value = 0; char high_adc = 0, low_adc = 0; ISR(ADC_vect) { low_adc = ADCL; high_adc = ADCH; value = (high_adc << 8) | low_adc; } void adc_init(void) { // Опорное напряжение на входе AREF ADMUX &= ~REFS0_MASK; // Выравнивание результата вправо ADMUX &= ~ADLAR_MASK; // Коммутация выбранного входа с АЦП (ADC0) ADMUX &= ~(MUX3_MASK | MUX2_MASK | MUX1_MASK | MUX0_MASK); // Разерешение работы АЦП ADCSRA |= ADEN_MASK; // Запуск работы АЦП ADCSRA |= ADSC_MASK; // Предделитель частоты (128) ADCSRA |= ADPS2_MASK | ADPS1_MASK | ADPS0_MASK; // Разрешение прерывания от АЦП ADCSRA |= ADIE_MASK; // Непрерывный режим работы АЦП ADCSRA |= ADATE_MASK; sei(); } uint16_t get_adc_value(void) { return value; }