Fast ADC (Mega2560 132kHz 8bit)
- Войдите на сайт для отправки комментариев
Втр, 06/01/2015 - 17:37
В качестве взноса на вступление в клуб делюсь своим кодом максимально быстрого АЦП. На 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
Если нужна максимальная скорость, то код лучше не оформлять в виде функции т.к. на ее вызовы будет тоже тратиться время.