Частота дискретизации
- Войдите на сайт для отправки комментариев
Чт, 10/05/2018 - 18:33
Здравствуйте! Возникла проблема с установлением частоты дискретизации. Нашёл один из способов установления в регистрах нужного делителя частоты, но,похоже, что он не совсем корректный и не работает, либо я неправильно использую этот код. Буду очень благодарен, если кто-то объяснит мне, как правильно задать частоту дискретизации и как это проверить
#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);
}
В регистрах нельзя задать частоту дискридитации. Можно задать частоту работы блока АЦП. Эта частота конечно опосредованно связана с частотой выдачи данных в случае непрерывной оцифровки, но в вашем случае частота выдачи связана с временем выдачи данных Serial.println, которое существенно больше analogRead при любых сочетаниях региста ADCSRA. При таком построении программы разницы практически не заметно. Объявите массив на 500 ячеек, заполните их в цикле, а затем выдайте данные массива. Вот тогда всё будет работать корректно.
В данном случае частота дискретизации задается даже не работой с портом, а функцуией delay(1000) и равняется примерно 1 Герцу.
О! delay то я и не приметил :-(