Неправильные значения от AD C Arduino - измеритель частоты - PullRequest
1 голос
/ 21 апреля 2020

Я строю частотомер, используя в качестве входного сигнала синусоидальную волну от 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;
}
...