Какова максимально допустимая скорость серийного порта?

что такое самый быстрый серийный считыватель, который может сделать Mega? начать.Serial1(1024000) принимается для компиляции, но чтение неубедительно

есть предложения по более быстрому устройству?

, 👍2

Обсуждение

Делители должны давать вам ровно 1 Мбит / с. Однако на этой плате это должен делать не только Mega2560 - USB-последовательный 8u2/16u2, и его прошивка также должна управлять им. К счастью, у вас есть похожие детали Atmel на обоих концах этой очень короткой ссылки, поэтому настройка должна быть возможной (вы можете проигнорировать запрос хоста и просто установить оба разделителя на 0). Но ваше программное обеспечение тоже должно быть в курсе. Возможно, вам захочется взглянуть на другую архитектуру, в которой сам процессор приложений говорит по USB, в стиле Леонардо., @Chris Stratton

Зачем вам нужна "самая быстрая серийная скорость"? Это для связи с каким именно устройством?, @jfpoilpret

Извините, моя ошибка - похоже, вы используете другой UART, чем тот, который подключен к USB., @Chris Stratton

устройство представляет собой последовательный кодировщик с ЧПУ FANUC...скорость 1024000 байт фиксирована, но нужно только вывести строб запроса, затем записать 77 бит последовательного ввода в буфер, затем игнорировать во время выполнения остальной части программы для расшифровки прочитанного, когда arduino генерирует тактовый импульс для отправки еще 77 битного слова... Я запустил его с помощью прерывания стробоскопа запроса для чтения входных данных, но не понял, как сохранить это в буфер (я вроде как новичок в этом деле) или если это вообще возможно..., @Tim


2 ответа


1

Это зависит в основном от частоты процессора, см. Настройки USART/скорости передачи данных в таблице данных. Например, при частоте 16 МГц она может достигать 2 Мбит / с. Но вам также необходимо учитывать ошибку в скорости, что важно при общении с "сторонним" устройством.

,

Если у вас есть оба микроконтроллера под контролем, вы также можете рассмотреть возможность *USART в режиме SPI* с синхронизацией часов., @TMa


6

Arduino Mega 2560 работает на частоте 16 МГц. Есть онлайн-калькуляторы, облегчающие это, так как расчет не является прямой и простой формулой.

http://wormfood.net/avrbaudcalc.php

что показывает использование 16 МГц

Скорость передачи данных в бодах УБРР(декабрь) УБРР(шестнадцатеричный) % от ошибки
300 3332 0x0D04 0.0
600 1666 0x0682 0.0
1200 832 0x0340 0.0
2400 416 0x01A0 0.0
4800 207 0x00CF 0.2
9600 103 0x0067 0.2
14400 68 0x0044 0.6
19200 51 0x0033 0.2
28800 34 0x0022 0.8
38400 25 0x0019 0.2
57600 16 0x0010 2.1 - Едва в порядке
76800 12 0x000C 0,2 - ХОРОШО
115200 8 0x0008 3.7 - ПЛОХО
230400 3 0x0003 7.8 - ПЛОХО
250000 3 0x0003 0.0

Где заметно, что загрузчик Arduino Mega использует

mega.menu.cpu.atmega2560.upload.speed=115200

что превышает допустимую частоту ошибок в 1%.

Хотя можно поддерживать скорости передачи данных, отличные от указанных выше, это не рекомендуется, так как приведенные выше значения являются стандартными. Промежуточные значения очень нетипичны и, вероятно, не заслуживают доверия на соответствующей другой стороне соединения.

Как я вижу, ваш приведенный выше пример равен 1024000, также стоит отметить, что HardwareSerial.cpp реализует метод преобразования запрошенной скорости передачи в бодах в конфигурацию USART, и я бы не обязательно доверял ему для нестандартных скоростей передачи в бодах, особенно в более старой версии Arduino IDE. Возможно, вы захотите попробовать последнюю версию 1.5.8+ и проверить скорость.

,

Это интересно. Почему загрузчик Arduino по умолчанию использует скорость загрузки с такой высокой частотой ошибок?, @Cerin