Загрузил(а) файлы в ''

This commit is contained in:
Лада Южакова 2023-06-21 13:19:47 +00:00
parent 6315234d40
commit 53db135840

View File

@ -1,56 +1,37 @@
#define REFS1_BIT (7) #include "device_adc.h"
#define REFS1_MASK (1<<REFS1_BIT)
#define REFS0_BIT (6) uint16_t value = 0;
#define REFS0_MASK (1<<REFS0_BIT) char high_adc = 0, low_adc = 0;
#define ADLAR_BIT (5)
#define ADLAR_MASK (1<<ADLAR_BIT) ISR(ADC_vect)
#define MUX3_BIT (3) {
#define MUX3_MASK (1<<MUX3_BIT) low_adc = ADCL;
#define MUX2_BIT (2) high_adc = ADCH;
#define MUX2_MASK (1<<MUX2_BIT) value = (high_adc << 8) | low_adc;
#define MUX1_BIT (1) }
#define MUX1_MASK (1<<MUX1_BIT)
#define MUX0_BIT (0) void adc_init(void)
#define MUX0_MASK (1<<MUX0_BIT) {
#define ADEN_BIT (7) // Опорное напряжение на входе AREF
#define ADEN_MASK (1<<ADEN_BIT) ADMUX &= ~REFS0_MASK;
#define ADPS2_BIT (2) // Выравнивание результата вправо
#define ADPS2_MASK (1<<ADPS2_BIT) ADMUX &= ~ADLAR_MASK;
#define ADPS1_BIT (1) // Коммутация выбранного входа с АЦП (ADC0)
#define ADPS1_MASK (1<<ADPS1_BIT) ADMUX &= ~(MUX3_MASK | MUX2_MASK | MUX1_MASK | MUX0_MASK);
#define ADPS0_BIT (0) // Разерешение работы АЦП
#define ADPS0_MASK (1<<ADPS0_BIT) ADCSRA |= ADEN_MASK;
#define ADSC_BIT (6) // Запуск работы АЦП
#define ADSC_MASK (1<<ADSC_BIT) ADCSRA |= ADSC_MASK;
#define ADIF_BIT (4) // Предделитель частоты (128)
#define ADIF_MASK (1<<ADIF_BIT) ADCSRA |= ADPS2_MASK | ADPS1_MASK | ADPS0_MASK;
// Разрешение прерывания от АЦП
uint16_t value = 0; ADCSRA |= ADIE_MASK;
// Непрерывный режим работы АЦП
void adc_init(void) ADCSRA |= ADATE_MASK;
{ sei();
// Источник опорного напряжения (внутренний источник 1.1В) }
ADMUX |= REFS1_MASK | REFS0_MASK;
// Выравнивание результата вправо uint16_t get_adc_value(void)
ADMUX &= ~ADLAR_MASK; {
// Коммутация выбранного входа с АЦП (ADC0) return value;
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;
} }