Скорость передачи данных Arduino в 8 раз выше?

У меня возникла странная проблема: чтобы получить ожидаемый последовательный вывод на моем последовательном мониторе, мне нужно установить скорость передачи данных на моем последовательном мониторе в 8 раз выше, чем скорость, которую я установил в своем последовательном порте. начинать(). Например, Serial.begin(4800) работает со скоростью передачи данных последовательного монитора 38 400 бод.

Установка представляет собой atmega328P и atmega8u2, построенные на макетной плате, аналогичной UNO R1. Я следовал руководству Ника Гаммона и его сценариям, чтобы прошить 328P с помощью загрузчика (http://www.gammon.com .au/forum/?id=11637), и я использовал программатор DFU (в OS X) для прошивки 8u2. Когда я подключаю свой компьютер к разъему USB на макетной плате, устройство правильно отображается как Arduino Uno в списке устройств моего компьютера с помощью lsusb. Я также могу перенести скетчи на 328P, используя руководство по макетированию (https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard ).

Тот факт, что я получаю ожидаемые результаты на своем последовательном мониторе (даже несмотря на неправильную скорость передачи данных), заставляет меня полагать, что мое оборудование настроено правильно. Я думаю, что это может быть бит/байтовая путаница в прошивке, кто-нибудь сталкивался с подобным или есть идеи? В настоящее время я не могу прошить скетчи через USB-разъем, и я полагаю, что это связано с несоответствием скорости передачи данных.

, 👍0

Обсуждение

Похоже, F_CPU не совпадает с фактической частотой чипа. Проверьте конфигурацию вашей платы и настройки предохранителей., @Majenko

Хитрость заключается в том, чтобы определить, какая скорость у 8U2 или 328P неправильная. Для этого вам действительно понадобится осциллограф или логический анализатор. Или другой адаптер USB-UART, который, как вы знаете, может работать с нужной скоростью., @Majenko


1 ответ


Лучший ответ:

1

Существует две скорости передачи данных, которые необходимо диагностировать. Один из них — это скорость передачи данных, с которой работает ATMega8U2, а другой — скорость передачи данных, с которой работает ATMega328P.

Вам нужно выяснить, какой из них рассчитывается неправильно:

  • Скорость передачи данных ATMega8U2 устанавливается USB-соединением при открытии порта.
  • Скорость передачи данных ATMega328P устанавливается по вашему скетчу.

Очевидно, что они должны совпадать. Однако скорость передачи данных задается не просто числом, она рассчитывается как доля тактовой частоты процессора.

Если частота процессора хотя бы на одном из чипов отличается от ожидаемой прошивки или скетча, то расчет скорости передачи данных будет неправильным.

Пример:

Ожидается, что ваш ATMega328P будет работать на частоте 1 МГц, однако в настройках предохранителя он настроен на работу от внутренней тактовой частоты 8 МГц. Это означает, что все на этом чипе будет работать в 8 раз быстрее, чем ожидалось, поэтому вам придется компенсировать это более низкой скоростью передачи данных.

Другой пример:

Ожидается, что ваш ATMega8U2 будет работать на частоте 16 МГц, однако в настройках предохранителя установлено значение 2 МГц. Это означает, что все на этом чипе (кроме USB, который тактируется отдельно) будет работать в 8 раз медленнее, чем ожидалось, поэтому вам придется компенсировать это ATMega328P более низкой скоростью передачи данных.

Поэтому проверьте настройки предохранителей на обоих чипах. Убедитесь, что для них установлены правильные скорости для вашей прошивки и настроек файла boards.txt.

Кроме того, вам следует приобрести дешевый осциллограф или логический анализатор. Это позволит вам точно отслеживать, что происходит при обмене данными между двумя чипами, и определить, действительно ли скорость передачи данных в 8 раз выше ожидаемой (неисправен ATMega8U2) или нормальная скорость, но вы должны указать ее как меньшее число (неисправен ATMega328P).

,