Во многих примерах кода онлайн люди добавляют строку Serial.begin(9600)
в блок установки.
Когда я смотрю, что Serial.begin()
находится в официальной документации, он говорит, что контролирует передачу данных в битах в секунду.
Поэтому очевидный вопрос: почему бы не использовать 28800, самую высокую скорость передачи? Почему люди соглашаются на 9600? Какое здесь ограничение?
Ответы:
Люди соглашаются, потому что это более чем достаточно быстро. Наиболее распространенное использование - просто напечатать некоторые вещи на терминале для отладки. 9600 бод - это 960 символов в секунду или 12 x 80 строк символов в секунду. Как быстро вы можете читать? :)
Если ваша программа использует последовательный порт для массовой передачи данных, вы решили не рассчитывать.
Ограничения на серийные высоки. Непосредственно вы можете использовать 115200 бод в своих программах, и это будет просто работать. Терминал Arduino будет иметь максимум 115200, но другие программы, такие как RealTerm, позволят вам работать выше.
Аппаратный серийник будет работать до 1 Мбод. Если вы прочитаете вокруг, вы увидите, что люди использовали до 1 М, непосредственно управляя UART. Вы можете получить выгоду от высокой скорости передачи данных при использовании, например, при передаче через Bluetooth-чип. Если вы используете аппаратный последовательный интерфейс для обмена данными от микросхемы к микросхеме на небольшом расстоянии, то вполне допустимо 1 Мбод. Подумайте обо всех устройствах SPI и I2C, которые прекрасно работают с тактовой частотой 1 МГц.
На больших расстояниях у вас начнутся проблемы с шумом при использовании сигнализации логического уровня (от 0 до 5 В). Чтобы использовать большие расстояния, вы должны добавить приемопередатчик для обеспечения надежной сигнализации, обычно RS-232 и реже RS-485. С RS-232 вы можете бегать мега-бит на расстоянии 10 футов.
Тактовая частота микропроцессора будет реальным пределом. С аппаратным UART процессор должен загружать один байт в UART каждые 10 бит (для N81). Поэтому, когда вы получаете 1 Мбод, для 16-МГц процессора будет непросто обеспечить UART данными. Новый байт будет отправляться каждые 160 тактов, что составляет очень мало строк кода. Для короткого пакета данных вы можете достичь этой скорости. Это сообщение означает, что процессор разгонится до того, как UART достигнет предела.
Обратите внимание, это все относится к HardwareSerial , серийный номер программного обеспечения сильно отличается.
источник
В дополнение ко всем интересным ответам стоит упомянуть, что установка скорости последовательного интерфейса в XXX бит / с не обязательно подразумевает XXX бит / с на аппаратном обеспечении.
Часы - даже на основе кварца - несовершенны и подвержены дрейфу. Кроме того, поскольку последовательные тактовые импульсы обычно генерируются посредством делителя на две степени и счетчика (целых чисел), все значения не могут быть точно получены с учетом базовой тактовой частоты. С помощью битов пуска / останова асинхронная последовательная связь может быть устойчивой к некоторому смещению тактовой частоты. Но это имеет пределы.
Например, если ваша ATmega328PA работает на частоте 1 МГц, вы можете достичь 9600b / с при 0,2% ошибки. Но при 14400b / с ошибка составляет -3,5% (фактически при скорости 13900b / с). А при скорости 28800b / с ошибка составляет + 8,5% (фактически при скорости передачи данных 31200b / с). Все эти цифры взяты из таблицы ATmega48PA-88PA-168PA-328PA, p200 .
Это не проблема, когда два идентичных устройства обмениваются данными друг с другом (поскольку фактически они обмениваются данными с одинаковой скоростью). Это может быть проблемой при обмене данными между различными устройствами.
Увеличение базовой частоты не обязательно значительно повышает точность. Например, использование той же ATmega328PA, что и выше, на частоте 2 МГц, на самом деле не дает лучших результатов, так как это в основном из-за ошибок округления. Но его частота 1,8432 МГц дает очень точный бит / с от 2400 бит / с до 57,6 кГц.
источник
Я думаю, что это своего рода традиция использовать скорость передачи данных, которая не является самой низкой (300), но также и не может привести к проблемам в некоторых настройках (28800 или даже 115200). Серийный порт ПК (чаще всего USB-адаптер FTDI232) может справиться с более высокими скоростями, но ваше аппаратное обеспечение может не справиться. Таким образом, 9600 бит / с зарекомендовал себя как своего рода стандартная скорость передачи для примеров кода.
источник
В глубине веков «золотой стандарт» для удаленных клавиатур (с использованием телефонного модема и телетайпов, если вы их помните) составлял 9600 бод, первоначально достижимый только по выделенной телефонной линии. Время движется медленно; быстрое развитие технологий; и память движется даже медленнее, чем время (кажется). Мы можем регулярно общаться, по крайней мере, на расстоянии нескольких метров, на пару порядков быстрее, чем 9600 бод. То, что когда-то считалось золотым стандартом, уже не золото, а все еще считается стандартом.
tl; dr: это история, а не технология.
источник
Я думаю, что основная причина, по которой люди чаще всего используют 9600, заключается в том, что в IDE Arduino это скорость передачи по умолчанию. Кроме того, более быстрая скорость передачи данных также может быть ненадежной, если последовательный сигнал должен пройти длинный путь, хотя я не знаю, почему он был выбран в качестве оптимальной скорости.
источник
Время реакции человека
Потому что возможность остановить последовательный монитор, когда ваш Arduino перебивает порт , требуется пользователям в 100% случаев, а максимальная скорость передачи требуется менее чем в 100% случаев.
9600 бод - это компромисс между «легко убить убегающий процесс» и «раздражающе медленным».
источник