Настройка таймера ATMega328p (Arduino)

Я пытаюсь измерить мощность переменного тока с помощью Arduino с Atmega328p. Вкратце, я хочу использовать timer1 для создания прерывания каждые 400us, где я измеряю два канала АЦП (A0 и A1) и помещаю их в массив. Проблема в том, что вместо измерения пяти периодов сети (частота сети = 50 Гц, то есть 20 мс * 5), я получаю вместо этого 13 таких периодов (260 мс). Что я делаю не так?

volatile int sample_incremental = 0;

void setup() {
      Serial.begin(115200);
      pinMode(voltagePin, INPUT);
      pinMode(currentPin, INPUT);
      set_sample_interrupt();
      sei();
    }

void set_sample_interrupt() {
  //Считаем до 400us
  OCR1A = 99;
  //Режим 4, CTC
  TCCR1B |= (1 << WGM12);
  //Включить прерывание
  TIMSK1 |= (1 << OCIE1A);
  //Предделитель 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
}

ISR (TIMER1_COMPA_vect) {
  // действие, которое будет выполняться каждые 400 мкс
  current_sample[sample_incremental] = analogRead(currentPin) - 504;
  voltage_sample[sample_incremental] = analogRead(voltagePin) - 512;
  if (sample_incremental < (SAMPLES * PERIODREADS))
    sample_incremental++;
  else {
    //Отключить прерывание
    TIMSK1 &= ~(1 << OCIE1A);
    sample_incremental = 0;
    finishedReading = true;
  }
}

Где после того, как я сделаю одно чтение, я останавливаю прерывание, и SAMPLES * PERIODREADS = 250.

, 👍1