Fast ADC (Mega2560 132kHz 8bit)

Нет ответов
Alex_Sk
Offline
Зарегистрирован: 06.01.2015

  В качестве взноса на вступление в клуб делюсь своим кодом максимально быстрого АЦП. На Mega2560 16MHz один цикл считывания аналоговых данных и сохранения их в элементе массива происходит за 7,548 микросекунды. АЦП тактируется частотой 2МГц. При такой частоте точность преобразования порядка 7 бит, что, например, для осциллографа вполне достаточно.

// Fast ADC 132kHz 8bit
// Alex_Sk for Arduino.ru
uint8_t Sample[312];  //8-битный массив для результатов АЦП
ADMUX = B01100000;  //используем вход А0, в качестве опорного напряжения AVcc (напряжение питания аналоговой части), 2-байтный результат 10-битного преобразования выравнивается влево
delayMicroseconds(20);  //ждем пока коммутатор переключит АЦП на нужный вход

for( uint16_t xpos = 0; xpos < 310; xpos ++) { 
  ADCSRA= B11000011;  //запускаем АЦП с тактовой 2МГц
  while (ADCSRA & B01000000);  //ждем окончания преобразования
  Sample[ xpos] = ADCH;  //поскольку используем только 8 бит и результат выровнен влево, читаем только старший байт
}
/* приведенный цикл записи в массив 310 значений АЦП занимает 2340 микросекунд на Mega2560 16MHz

Если нужна максимальная скорость, то код лучше не оформлять в виде функции т.к. на ее вызовы будет тоже тратиться время.