Частота дискретизации

Oleg1996
Offline
Зарегистрирован: 08.05.2018

Здравствуйте! Возникла проблема с установлением частоты дискретизации. Нашёл один из способов установления в регистрах нужного делителя частоты, но,похоже, что он не совсем корректный и не работает, либо я неправильно использую этот код. Буду очень благодарен, если кто-то объяснит мне, как правильно задать частоту дискретизации и как это проверить 

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
 
int pinIn    = A0; // Пин аналогового входа
 
 
void setup() {
  pinMode(pinIn, INPUT);
  sbi(ADCSRA, ADPS2);    //Биту ADPS2 присваиваем единицу
  cbi(ADCSRA, ADPS1);    //Битам ADPS1 и ADPS0 присваиваем нули
  cbi(ADCSRA, ADPS0); 
  Serial.begin(9600);
}
 
void loop() {
  Serial.println(analogRead(pinIn));
  delay(1000); 
}
 
nik182
Offline
Зарегистрирован: 04.05.2015

В регистрах нельзя задать частоту дискридитации. Можно задать частоту работы блока АЦП. Эта частота конечно опосредованно связана с частотой выдачи данных в случае непрерывной оцифровки, но в вашем случае частота выдачи связана с временем выдачи данных Serial.println, которое существенно больше analogRead при любых сочетаниях региста ADCSRA. При таком построении программы разницы практически не заметно. Объявите массив на 500 ячеек, заполните их в цикле, а затем выдайте данные массива. Вот тогда всё будет работать корректно.  

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В данном случае частота дискретизации задается даже не работой с портом, а функцуией delay(1000) и равняется примерно 1 Герцу.

nik182
Offline
Зарегистрирован: 04.05.2015

О! delay то я и не приметил :-(