PHP код:
//**********************// Настройки АЦП для работы с прерыванием после преобразования**********************
void setADCFreeRunning()
{
samplePos = 0; // Reset sample counter
// Init ADC free-run mode; f = ( 16MHz/prescaler ) / 13 cycles/conversion
// 00 AREF, 01 AVcc с конденсатором на AREF, 10 Резерв, 11 Внутренний 1.1В источник конденсатором на AREF
ADMUX = ADC_CHANNEL; // Channel sel, right-adj, use AREF pin
ADMUX |= _BV(REFS0); //внутрений источник опрного напряжений 5V // 1.1В (1 << REFS1)|(1 << REFS0)
// Start a conversion. We want to discard the first conversion after
// changing the voltage reference reference.
ADCSRB = 0;
ADCSRA = _BV(ADEN) | // ADC enable
_BV(ADSC); // ADC start
while (ADCSRA & _BV(ADSC)); // ждем завершения преобразования
// Now start auto-triggered conversions with interrupt enabled.
ADCSRA = _BV(ADEN) | // ADC enable
_BV(ADSC) | // ADC start
_BV(ADATE) | // Auto trigger
_BV(ADIE) | // Interrupt enable
_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); // 128:1 / 13 = 9615 Hz
}
void setADCDefault() // Конфигурируем АЦП для стандартной работы ардуино
{
// Init ADC free-run mode; f = ( 16MHz/prescaler ) / 13 cycles/conversion
ADMUX = 0;
ADMUX = _BV(REFS0); //внутрений источник опрного напряжений 5V // 1.1В (1 << REFS1)|(1 << REFS0)
ADCSRA = _BV(ADEN) | // ADC enable
_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); // 128:1 / 13 = 9615 Hz
ADCSRB = 0; // Free run mode, no high MUX bit
analogRead(PARM_POT); // отказаться от первого преобразования
}
ADMUX |= (1 << REFS1)|(1 << REFS0); //внутрений источник опрного напряжений 1.1В
Хотя 1,1В маловато, наверно придется внешний источник AREF подключать, что тоже несет некоторые усложнения
ADMUX |= (0 << REFS0) | (0 << REFS1); // Включаем внешний источник ИОН
Можно попробовать на вход aRef подключить 3,3В, которые есть на борту ардуины.
И на крайний вариант можно подключить делитель из двух резисторов на aRef, в цветомузыке не нужна супер точность АЦП.