Ошибка определения частоты входного сигнала
Вот мой код для определения частоты входного прямоугольного сигнала на выводе 8 платы Arduino Uno.
const uint16_t freqPin = PB0;
const uint16_t load = 0;
unsigned long int count=0;
unsigned int value=0;
void setup()
{
Serial.begin(9600);
DDRB = 0x00;
TCCR1A = 0;
TCCR1B = TCCR1B & B11111000 | B00000111;
TCNT1 = load;
TIMSK1 |= (1<<ICIE1);
TIMSK1 |= (1<<TOIE1);
sei();
}
void loop()
{
}
ISR(TIMER1_OVF_vect){
count++;
}
ISR(TIMER1_CAPT_vect){
value = TCNT1;
TCNT1 = load;
Serial.println(count);
Serial.println(value);
}
Выход
0
0
0
0
0
Почему вывод показывает только нули. Почему это происходит? Может кто-нибудь объяснить?
Заранее спасибо.
@Peouse Dutta, 👍-1
Обсуждение1 ответ
▲ 1
Есть несколько способов измерить частоту входящего сигнала. Вот идеи, основанные на предположении, что это все, что вам нужно, а не на использовании определенных контактов Arduino:
- Используйте прерывания таймера и
digitalRead(8);
(или более быстрый(PINB & _BV(0))
) для выборки, когда сигнал высокий или низкий. Перенесите данные с Arduino, например, на ПК, затем выполните преобразование Фурье (Matlab, Mathematica, Excel, что вам нравится). Или же вычислите частоту на плате. Таким образом, можно измерять частоты до нескольких десятков кГц с точностью до нескольких Гц. - Используйте
attachInterrupt()
на цифровых контактах 2 или 3. Подсчитайте количество нарастающих фронтов прямоугольной волны в течение заданного периода времени. Вы можете использовать таймер, если вам нужна точность, но этот метод не будет таким же хорошим, как преобразование Фурье.
,
@MichaelT
Смотрите также:
- Отправка цифрового сигнала с одного Arduino на другой для запуска события
- Отправка информации (например, строки) через цифровые контакты
- Отправка цифрового сигнала с одного arduino на другой
- Цифровой звуковой датчик
- Управление машинкой на радиоуправлении с помощью Arduino
- Функция digitalRead() ардуино не считывает входное значение, отправленное датчиком после обнаружения объекта
- Почему цифровой вывод не читает ON от кнопочных переключателей, подключенных к 5 В и понижающему резистору 10 кОм?
- Последствия динамически изменяющихся конфигураций ввода/вывода цифрового контакта?
Вам следует добавить что-то, чтобы различать *какой* ISR печатает какой "0". Это может дать некоторые подсказки., @Majenko
Я отредактировал ISR OVF, где команда
Serial.print
была написана ошибочно., @Peouse DuttaНасколько я помню,
Serial
не работает внутри ISR. Я ошибаюсь?, @chrislКакой диапазон частот вы надеетесь измерить?, @MichaelT