Аналого-цифровой преобразователь

Библиотека аналого-цифрового преобразователя (АЦП) создана для облегчения использования модуля АЦП AVR. Функции преобразования библиотеки блокирующие, т.е. при их вызове процессор ждёт окончания преобразования. Время преобразования зависит от делителя такта АЦП.

Типы данных

  • adc_reference
    Выбор типа напряжения сравнения АЦП. Варианты значений и обозначения:
    • ADC_REF_AREF - Напряжение сравнения получается из вывода AREF.
    • ADC_REF_AVCC - Напряжение сравнения получается из вывода AVCC.
    • ADC_REF_2V56 - Напряжение сравнения внутреннее 2,56 V.
  • adc_prescale
    Выбор типа делителя такта аналого-цифрового преобразователя. Варианты значений:
    • ADC_PRESCALE_2 - Коэффициент деления 2.
    • ADC_PRESCALE_4 - Коэффициент деления 4.
    • ADC_PRESCALE_8 - Коэффициент деления 8.
    • ADC_PRESCALE_16 - Коэффициент деления 16.
    • ADC_PRESCALE_32 - Коэффициент деления 32.
    • ADC_PRESCALE_64 - Коэффициент деления 64.
    • ADC_PRESCALE_128 - Коэффициент деления 128.

Функции

  • void adc_init(adc_reference reference, adc_prescale prescale)
    Подготовка АЦП к работе. Параметры:
    • reference - Выбор напряжения сравнения.
    • prescale - Выбор делителя такта. Чем больше коэффициент деления, тем больше времени занимает преобразование, но тем больше он помехоустойчив.
  • unsigned short adc_get_value(unsigned char channel)
    Преобразование значения желаемого входящего канала АЦП. Функция блокирующая. Параметры:
    • channel - Номер канала АЦП (от 0 до 7).
    • Возвращает 10-битное значение.
  • unsigned short adc_get_average_value(unsigned char channel, unsigned char num_samples)
    Многоразовое преобразование значения желаемого входного канала АЦП и получение среднего значения. Функция блокирующая. Параметры:
    • channel - Номер канала АЦП (от 0 до 7).
    • num_samples - Число усреднений. Разрешённое число от 1 до 64.
    • Возвращает 10-битное усреднённое значение.

 

Пример

В примере АЦП настраивается в рабочее положение и считывается напряжение с двух входных каналов. Значение преобразования напряжения канала 0 считывается в переменную x и значение канала 1 считывается результатом десятикратного округления в переменную y.

#include <homelab/adc.h>
 
int main(void)
{
	unsigned short x, y;
 
	// Настройка аналого-цифрового преобразователю
	// Напряжение сравнения приходит из вывода AVCC. Рабочий такт
	// преобразователя в 8 раз ниже такта контроллера.
	adc_init(ADC_REF_AVCC, ADC_PRESCALE_8);
 
	// Считывание преобразованного значения канала 0 в переменную x
	x = adc_get_value(0);
 
	// Считывание преобразованного и усреднённого значения
        // канала 1 в переменную y   
	y = adc_get_average_value(1, 10);
}
ru/software/homelab/library/adc.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0