АЦП На контроллерах ATmega

Аналого-цифровой преобразователь  ( ADC ) — устройство, преобразующее входной аналоговый сигнал в дискретный код (цифровой сигнал). Обратное преобразование осуществляется при помощи ЦАП (цифро-аналогового преобразователя, DAC).

818519252

В контроллерах Atmega есть встроенный преобразователь при том зачастую он способен обрабатывать сигналы с 8 разных каналов, но последовательно.

Как и во всех модулях можно обрабатывать по прерыванию, можно напрямую, можно со внешнего рперывания, в общем как хотите. Рассмотрим пример в лоб.

unsigned short ADCGet(unsigned char adc_input)
{
 ADMUX=adc_input | (ADMUX & 0xF0);
 _delay_us(10);
 ADCSRA |= (1<<ADSC);
 while((ADCSRA & 0x10)==0); 
 ADCSRA|=0x10;
 return ADCW;
}
void ADCInit(){
 ADMUX = (1<<REFS0)|(0<<MUX3)|(0<<MUX2)|(1<<MUX1)|(0<<MUX0);
 ADCSRA = (1<<ADEN)|(1<<ADIE);
}

Первая функция вызывает преобразование:

  1. задаем канал с которого будем считывать
  2. ждем пока пройдет переходный процесс на ногах
  3. начинаем преобразование
  4. ждем окончания
  5. ставим, навсякий, флаг об окончании
  6. возвращаем считанное значение.

Далее Функция инициализации:

  1. REFS0..1 – это выбор опорного напряжения ( напряжение соответствующее максимальному значению ацп, у нас 10 разрядный ацп -> MAX=1023 следовательно при опорном напряжении, например напряжение питания, если напряжение между землей и считываемой ногой достигнет значения половины питания то ацп выдаст нам 512)
    1. 00 – напр на ноге AREF
    2. 01 – напр питания
    3. 10 – нет
    4. 11 – внутренний источник опорного напряжения
  2. MUX3..0 – номер канала

 

Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

     

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>