37 lines
1003 B
C
37 lines
1003 B
C
#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;
|
||
} |