Может ли Arduino поддерживать таймер на 500 mu?

Мне нужно вывести последовательное сообщение с интервалом 500 микросекунд (10 байт), может быть немного медленнее, но не более 1 миллисекунды между сообщениями.

Можно ли это сделать с помощью Arduino? Я знаю, что есть delayMicro(), но не уверен, что у него есть разрешение.

, 👍1

Обсуждение

Предполагая последовательную передачу данных на ПК, требуется ~700 микросекунд для отправки 10 байтов (т.е. 80 бит) со скоростью 115200 бод. Проверьте свои номера! Если вам нужна более быстрая передача данных, попробуйте SPI или Ethernet., @MichaelT


1 ответ


1

Это связано не с delayMicro, а с максимальной скоростью драйвера Serial/UART, которая не задокументирована, но, по некоторым данным, может достигать 500 кбит/с.

Однако 10 байтов, каждые 500 мкс (2000 Гц), означают 10 * 11 (включая стоповый/стартовый бит) * 2000 = 220 000 бит, так что у вас еще есть запас. Возможно, есть также некоторые накладные расходы времени.

В любом случае, вероятно, единственный выход — использовать прерывание, и ожидать, что Uno не сможет сделать ничего другого.

Лучшим вариантом может быть отправка меньшего объема или более разумного (т.е. не 10 байтов, а, возможно, какой-либо сжатой/двоичной формы, если об этом еще не думали).

,

«но, по некоторым данным, она может достигать 500 кбит/с». Вы можете сделать лучше, чем это. Согласно техническому описанию, может быть достигнута скорость 2 мегабита в секунду. Таблица 24-7. Примеры настроек UBRRn для часто используемых частот генератора показывают 2 Мбит/с как максимальную скорость, достижимую при тактовой частоте 16 МГц. IDE достигает только 115 200, поэтому вам нужно будет использовать другую последовательную программу, чтобы увидеть эти данные. Самое быстрое, с чем я тестировал, это Serial.begin(250000);, @CrossRoads