>1мгц на цифровом выходе
- Войдите на сайт для отправки комментариев
Доброе время суток!)
Интересуют возможности ардуино, а именно насколько высокую частоту можно получить на цифровом выходе? Есть потребность в частотах 900кГц-1100кГц. реально ли такое воспроизвести? Иными словами насколько быстро можно чередовать digitalWrite(pin,HIGH)/digitalWrite(pin,LOW). Если не ардуино то может что посоветуете?
И вот такой нюанс. Допустим если писать программу без всяких таймеров и без всяких функций типа tone(), а просто чередовать вызовы DigitalWrite():
DigitalWrite(pin,HIGH); DigitalWrite(pin,LOW); DigitalWrite(pin,HIGH); DigitalWrite(pin,LOW);
Как ведёт себя ардуино в такой ситуации? Частота сигнала на пине будет зависить от тактовой частоты контроллера?
Или если к примеру я буду чередовать как-то так:
DigitalWrite(pin,HIGH); DigitalWrite(pin,HIGH); DigitalWrite(pin,LOW); DigitalWrite(pin,HIGH); DigitalWrite(pin,HIGH); DigitalWrite(pin,LOW);
изменится ли в этом случае модуляция, т.е. 2 ед.времени HIGH и 1 ед.времени LOW?
Спасибо.
период в 16мкс (т.е. 8 мкс HIGH, 8мкс LOW) я точно получал, и на осцилографе всё было красиво. Но это при 20ти строках кода, контроллер считай на холостом ходу... мегагерци только через умножитель добыть удастся, или с помощью внешнего генератора управляемого цифрой или напряжением
При использовании чистого digitalRead()/digitalWrite() удается получить 10000 периодов за 82 мсек, т.е. частоту около 122 кГц.
Переход чуть ближе к железу, а именно непосредственная запись в порт позволяет увеличить скорость примерно в 10 раз и добиться частоты ок 1,25 МГц:
Ну а если использовать ассемблерную вставку, то теоретически можно поднять частоту генерируемого сигнала до 2 МГц.
Все вышенаписанное относится к мк, работающему на частоте 16 МГц.
=== Testing read/write ===
before:33
after:443
50000 cycles per 410 msec
10000 cycles per 82 msec
=== Testing PB5 ===
before:537
after:577
50000 cycles per 40 msec
10000 cycles per 8 msec
благодарю за ответы!;)