Как Arduino может считывать частоту выше 16 МГц?

Я хотел бы понять, как Arduino измеряет частоту. Также как мой вольтметр может измерять частоту. Поскольку я новичок в использовании микроконтроллера, я бы прочитал такую частоту:

void loop()
{
    while(digitalRead(myPin)==HIGH)
    {
       // вывод высокий
    }
    // измеряем время в миллисекундах (это время, когда вывод был высоким)

    while(digitalRead(myPin)==LOW)
    {
       // вывод низкий
    }
    // измеряем время в миллисекундах (это время, когда пин был низким)

} 

С этим кодом мне понятно, как измерять частоту и рабочий цикл. Проблема с этим кодом в том, что он, вероятно, будет очень медленным и, вероятно, будет считывать частоты до 100 Гц и меньше.

Итак, мои вопросы:

  1. Как Arduino может считывать частоты выше 100 Гц? Как это достигается?

  2. Я погуглил частоту Arduino, и оказалось, что она составляет 16 МГц. Это означает, что арудино может считывать частоты до 16 МГц? Кабели Ethernet, в частности CAT5, имеют частоту 100 МГц. Это означает, что он отправляет 100 000 000 сигналов в одну секунду! Как Arduino может отправлять столько сигналов за одну секунду, если я куплю Ethernet-экран, такой как этот ?

, 👍0

Обсуждение

вы можете использовать микросхему цифрового счетчика, чтобы уменьшить частоту до уровня, с которым может справиться Arduino. Подача прямоугольной волны на 8-битный счетчик заставит бит 8 колебаться с точностью до 1/256 частоты прямоугольной волны., @dandavis


2 ответа


Лучший ответ:

3

Как Arduino может считывать частоты выше 100 Гц? Как это достигается?

Прерывания (если вы хотите сделать это в программном обеспечении) или волшебная аппаратная часть, называемая периферийным устройством сравнения ввода, которое встроено в большинство микроконтроллеров.

Я погуглил частоту arduino, и оказалось, что она составляет 16 МГц. Это означает, что Арудино может считывать частоты до 16 МГц?

Нет, это скорость, с которой работает ЦП. Максимальная частота сигнала, которую он может считывать, обычно ниже этой (для SPI это вдвое меньше, например, 8 МГц).

Кабели Ethernet, в частности CAT5, имеют частоту 100 МГц. Это означает, что он отправляет 100 000 000 сигналов в одну секунду! Как Arduino может отправлять столько сигналов за одну секунду, если я куплю Ethernet-щит, такой как этот?

Это не так. Щит делает. Arduino просто сообщает шилду, что делать, а чип на шилде делает это.

,

1

Я бы не стал использовать millis() для измерения периода сигнала, если только программе приходилось иметь дело с крайне низкими частотами. И крайне низким Я имею в виду ниже 1 МГц (один миллигерц). Для частот выше 1 МГц, показанный вами псевдокод будет работать так же или даже лучше. используя micros().

По мере увеличения частоты вы начнете искать более необычные варианты. для его измерения. Например, вы можете подсчитать нарастающие фронты от прерывать и измерять продолжительность многих (а не только одного) периодов с помощью микро(). Это должно работать до нескольких сотен кГц. Для более быстрого частоты вы можете использовать аппаратный таймер, настроенный как счетчик, и измерить время, необходимое для переполнения. Это должно быть хорошо для почти до половины частоты процессора (8 МГц).

Что касается сигналов Ethernet, см. ответ Маженко.

,