Serial.begin (): Почему бы не всегда использовать 28800?

Во многих примерах онлайн-пользователи добавляют строку Serial.begin (9600) в блок настройки.

Когда я смотрю, что Serial.begin () находится в официальной документации, он говорит, что он контролирует передачу данных в секунду в секунду.

Итак, очевидный вопрос: почему бы не использовать 28800, самую высокую скорость передачи? Почему люди соглашаются на 9600? Какое ограничение здесь?

30 голосов | спросил Enlightened One 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 06 Sep 2014 21:19:55 +0400 2014, 21:19:55

6 ответов


48
  

Почему люди поселяются?

Люди поселяются, потому что это более чем достаточно быстро. Наиболее распространенное использование - это просто напечатать некоторые материалы на терминале для debuggin. 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 , серийный номер программы очень отличается.

ответил jdr5ca 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 07 Sep 2014 00:17:05 +0400 2014, 00:17:05
7

В дополнение ко всем интересным ответам стоит упомянуть, что для установки последовательной скорости на XXX бит /с не требуется вносить на аппаратное обеспечение XXX бит /с.

Часы - даже на основе кварца - несовершенны и подвержены дрейфу. Кроме того, поскольку последовательные тактовые импульсы обычно генерируются с помощью счетчика pre-divisor и (целочисленного) мощности из двух, все значение не может быть точно получено с учетом базовой тактовой частоты. С помощью бит start /stop асинхронная последовательная связь может быть толерантной к некоторому дрейфу синхронизации. Но это имеет пределы.

Например, если ваш ATmega328PA работает на частоте 1 МГц, вы можете достичь 9600b /s при 0,2% ошибки. Но при 14400b /s ошибка составляет -3,5% (фактически общая скорость передачи данных составляет 13900 бит /с). И при 28800b /s ошибка составляет + 8,5% (фактически общая скорость передачи данных составляет 31200 бит /с). Все эти цифры взяты из ATmega48PA-88PA-168PA-328PA, p200 .

Это проблема not , когда два идентичных устройства обмениваются данными (так как на самом деле они взаимодействуют со скоростью ). может быть проблемой при общении между различными устройствами.

Увеличение базовой частоты не требует значительного улучшения точности. Например, запуск одного и того же ATmega328PA, как указано выше, на частоте 2 МГц не дает лучших результатов, поскольку в основном это связано с ошибками округления. Но его работа 1.8432MHz дает очень точные бит с 2400b /s до 57.6kHz.

ответил Sylvain Leroux 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 08 Sep 2014 11:18:48 +0400 2014, 11:18:48
3

Я думаю, что это традиция использовать скорость передачи, которая не самая медленная (300), но также не та, которая может в конечном итоге вызвать проблемы в некоторых настройках (28800 или даже 115200). Последовательный порт ПК (чаще всего USB-адаптер FTDI232) может справиться с более высокими тарифами, но ваше оборудование для DIY не может. Таким образом, 9600 бит /с зарекомендовал себя как некоторая стандартная скорость передачи для примеров кода.

ответил Dirk Grappendorf 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 06 Sep 2014 21:52:39 +0400 2014, 21:52:39
2

В тумане времени «золотой стандарт» для удаленных клавиатур (с использованием телефонного модема и телетайпов, если вы их помните) составлял 9600 бод, изначально достижимый только по выделенной телефонной линии. Время движется медленно; технология быстро развивается; и память движется еще медленнее, чем время (кажется). Мы можем регулярно общаться, по крайней мере, на несколько метров, на пару порядков быстрее, чем 9600 бод. То, что когда-то считалось золотым стандартом, больше не является золотом, но по-прежнему считается стандартным.

tl; dr: Это история, а не технология.

ответил JRobert 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 07 Sep 2014 17:50:27 +0400 2014, 17:50:27
0

Я думаю, что основная причина, по которой люди чаще всего используют 9600, заключается в том, что это скорость передачи по умолчанию в среде Arduino. Кроме того, более быстрая скорость передачи данных также может быть ненадежной, если последовательный сигнал должен пройти долгий путь, хотя я не знаю, почему это было выбрано как оптимальная скорость.

ответил matega 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 06 Sep 2014 21:45:28 +0400 2014, 21:45:28
-2

Время реакции человека

Поскольку возможность остановки последовательного монитора, когда ваш Arduino нажимает на порт , требуется пользователям в 100% случаев, а максимальная скорость передачи требуется меньше 100% времени.

9600 бод - это компромисс между «легко убить беглый процесс» и «досадно медленно».

ответил hoosierEE 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 07 Sep 2014 04:52:26 +0400 2014, 04:52:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132