Неужели UNO так быстро работает?

Попробовал посмотреть, сколько времени занимает опрос напряжения на аналоговом пине. На мониторе показывается, что 500 (!) циклов измерения напряжения и пересчета в RMS занимает 4 (!) микросекунды.
Или я что-то в скетче напоганил?

//UNO
//Переменные
int n=0; //Количество измерений
long volt_in_code; //Измеренное напряжение на А3, выраженное в 0-1023
long volt_in_summa; //Сумма квадратов измерений
long volt_in_code_rms; //Среднеквадратичное напряжение в 0-1023
long volt_in_rms; //Среднеквадратичное напряжение в вольтах
long prev_micros; //Переменная для счета времени
int vremya; //Время исполнения скетча

void setup()
{
  pinMode(A3, INPUT);//Назначение пина ваттметра на вход
  Serial.begin(115211);// Объявляем скорость порта
}

void loop()
{ 
  volt_in_summa=0;
  prev_micros=micros();
  if (n<501) //Если счетчик измерений меньше 501
  {
    prev_micros=micros();
    //Измеряем и вычисляем rms напряжение на А3
    volt_in_code=analogRead(A3); //Читаем вход А3
    volt_in_code=volt_in_code*volt_in_code; //Возводим в квадрат
    volt_in_summa=volt_in_summa+volt_in_code; // Складываем квадраты измерений
    volt_in_rms=sqrt(volt_in_summa);
    int vremya= micros()-prev_micros;
    n++;
  }
  int vremya= micros()-prev_micros;
  Serial.println (vremya);      
}

Скорее всего оптимизатор выкинул все вычисления, так как результат не используется.
Его или печатать надо или волатилить.

Спасибо, щас проверю и то и то.

Ну, и выводится время одной итерации, а не пятисот.

1 лайк

Со временем совсем беда. Если хочешь посчитать время выполнения расчёта нужно запомнить время, крутануть цикл расчёта сколько надо раз и только потом сравнить текущее с запомненным.
RMS надо считать кратно периоду напряжения. Поэтому желательно зарядить таймер так что бы оцифровка данных расчёта происходила 20 мс .

1 лайк

Спасибо, друзья, разобрался.