Я строю частотомер, используя в качестве входного сигнала синусоидальную волну от 0,05 до 0,55 В (от пикового детектора) и диапазон частот от 5 до 10 кГц. Я пытался изменить частоту дискретизации (мне нужно, по крайней мере, 20 кГц) до 76 кГц (установка 16 прескалеров из регистра ADCSRA), но полученные данные из AD C - это константа (= 255). Я не нашел ничего, что могло бы вызвать этот постоянный вывод.
Наличие более высокой частоты дискретизации означает, что я мог бы более точно найти максимальные амплитуды, а затем я мог бы измерить период времени между двумя максимальными амплитудами, получая частоту.
Любая помощь или советы были бы очень оценили! Заранее спасибо!
Выход: https://www.dropbox.com/s/jyguxpz8k18zsco/output.png?dl=0
Вход: https://www.dropbox.com/s/94ou221vn89ndj0/sine_wave.jpg?dl=0
const int MAX_RESULTS = 256;
volatile int results [MAX_RESULTS];
volatile int resultNumber;
void setup() {
ADMUX = 0x20; // set A0 analog input
ADCSRA = 0xEC;// set 16 prescaler, enable ADC and interrupts and start ADC measurements
Serial.begin(115200);
}
ISR (ADC_vect)
{
results[resultNumber++] = ADCH;
if(resultNumber == MAX_RESULTS)
{
ADCSRA = 0; // turn off ADC
}
}
void loop () {
while (resultNumber < MAX_RESULTS)
{ }
for (int i = 0; i < MAX_RESULTS; i++)
{
Serial.println (results[i]);
}
//start a new conversion
resultNumber = 0;
ADCSRA = 0xEC;
}