Загрузил(а) файлы в ''
This commit is contained in:
parent
6315234d40
commit
53db135840
91
device_adc.c
91
device_adc.c
@ -1,56 +1,37 @@
|
||||
#define REFS1_BIT (7)
|
||||
#define REFS1_MASK (1<<REFS1_BIT)
|
||||
#define REFS0_BIT (6)
|
||||
#define REFS0_MASK (1<<REFS0_BIT)
|
||||
#define ADLAR_BIT (5)
|
||||
#define ADLAR_MASK (1<<ADLAR_BIT)
|
||||
#define MUX3_BIT (3)
|
||||
#define MUX3_MASK (1<<MUX3_BIT)
|
||||
#define MUX2_BIT (2)
|
||||
#define MUX2_MASK (1<<MUX2_BIT)
|
||||
#define MUX1_BIT (1)
|
||||
#define MUX1_MASK (1<<MUX1_BIT)
|
||||
#define MUX0_BIT (0)
|
||||
#define MUX0_MASK (1<<MUX0_BIT)
|
||||
#define ADEN_BIT (7)
|
||||
#define ADEN_MASK (1<<ADEN_BIT)
|
||||
#define ADPS2_BIT (2)
|
||||
#define ADPS2_MASK (1<<ADPS2_BIT)
|
||||
#define ADPS1_BIT (1)
|
||||
#define ADPS1_MASK (1<<ADPS1_BIT)
|
||||
#define ADPS0_BIT (0)
|
||||
#define ADPS0_MASK (1<<ADPS0_BIT)
|
||||
#define ADSC_BIT (6)
|
||||
#define ADSC_MASK (1<<ADSC_BIT)
|
||||
#define ADIF_BIT (4)
|
||||
#define ADIF_MASK (1<<ADIF_BIT)
|
||||
|
||||
uint16_t value = 0;
|
||||
|
||||
void adc_init(void)
|
||||
{
|
||||
// Источник опорного напряжения (внутренний источник 1.1В)
|
||||
ADMUX |= REFS1_MASK | REFS0_MASK;
|
||||
// Выравнивание результата вправо
|
||||
ADMUX &= ~ADLAR_MASK;
|
||||
// Коммутация выбранного входа с АЦП (ADC0)
|
||||
ADMUX &= ~(MUX3_MASK | MUX2_MASK | MUX1_MASK | MUX0_MASK);
|
||||
// Разерешение работы АЦП
|
||||
ADCSRA |= ADEN_MASK;
|
||||
// Предделитель частоты (128)
|
||||
ADCSRA |= ADPS2_MASK | ADPS1_MASK | ADPS0_MASK;
|
||||
}
|
||||
|
||||
ISR(ADC_vect)
|
||||
{
|
||||
// Запуск работы АЦП
|
||||
ADCSRA |= ADSC_MASK;
|
||||
// Ожидание окончания преобразования
|
||||
while ((ADCSRA & ADIF_MASK) == 0);
|
||||
value = (ADCH << 8) | ADCL;
|
||||
}
|
||||
|
||||
uint16_t get_adc_value(void)
|
||||
{
|
||||
return value;
|
||||
#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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user