Использую ATMega16, 8MHz от кварца.
АЦП работает в режиме одиночных прерываний с 10-bit разрешением, делителем 8, т.к. частота его такта 1MHz.
Работает без прерываний, через функцию, сгенерированную CvAVR-ом:
Код
// Read the AD conversion result
word read_adc(byte adc_input)
{
ADMUX=adc_input;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion (ADSC)
ADCSRA|=0x40;
// Wait for the AD conversion to complete (ADIF)
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
// Гасим ошибку мл. бита
return ADCW&0xFFFE;
} // read_adc
Замеры АЦП выполняются исключительно в обработчике таймера, с частотой 50 кГц - 20 мкс. По 2 замера на каждое прерывание.
Судя по результатам, работает нормально

.
Но всё же хочется знать, сколько времени длится одно преобразование, т.е. сколько работает цикл
// Wait for the AD conversion to complete (ADIF)
while ((ADCSRA & 0x10)==0);
В доке видел только мутнячок типа
- 13 - 260 μs Conversion Time
- Up to 15 kSPS at Maximum Resolution
Какой-либо детализации не нашёл. Может плохо искал ....
Прикинул в меру своего разумения:
15KSPS = 66.67 мкс одно преобразование. Но на какой это тактовой? При каких битах ADPSxx в ADCSRA?
И как у них связана частота, задаваемая ADPSxx с этими KSPS?
Я делаю 2 замера за 20mks - вроде работает. Может врёт как собака?
В итоге - ни хрена не понимаю.....
Или лучше поставить какой-то внешний АЦП типа MCP3202?
У него хоть внятно написано
fSAMPLE = 100 ksps and fCLK = 18*fSAMPLE
tSAMPLE = 1.5 clock cycles
По характеристикам меня и внутренний устраивает.
Спасибо.
Сообщение отредактировал hd44780 - Apr 28 2011, 09:07
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда