Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3
Я вижу восемь таинственных импульсов на линии RX, когда я подключаюсь к последовательному порту, используя несколько клиентских библиотек (Python, JavaScript, а также встроенный Serial Monitor в IDE). Около 78-79 долл. США за штуку, отбор проб со скоростью 1 мс / с на Logic Pro 16.
Эти восемь импульсов при интерпретации со скоростью 57600 бодов заклинивают прошивку Firmata. И они случаются при каждом соединении.
Для этого используется новая установка среды разработки Arduino 1.6.8 и несколько эскизов (обычный эскиз «Blink» также воспроизведет это).
Репро шаги на моей машине:
- Установить любой эскиз
- Запустите логический анализатор, если вы хотите его поймать
- Перейти к последовательному монитору. Мой настроен на 57600 бод, конец строки Newline, но это не имеет значения
- Если хотите, закройте и повторите шаг 3
- Примечание импульсы каждый раз, когда вы подключаетесь к последовательному порту
Любые предложения для диагностики этого? Похоже, это серийный уровень драйвера в некотором роде.
arduino-due
uart
osx
Блейк Рамсделл
источник
источник
Ответы:
Короткий:
Глядя на прошивку ATMEGA16U2 ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) я обнаружил, что при настройке / изменении настроек Эмулируемый USB последовательный порт, USART сбрасывается. Это происходит даже тогда, когда вы открываете Arduino Serial Monitor (он должен настроить скорость последовательного порта и т. Д.). Это вызывает ваш всплеск.
Длинная:
Посмотрите на функцию:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
Там вы увидите, что через несколько строк он сбрасывает USART, обнуляя свои регистры:
На странице 168 текущей таблицы данных ATMEGA16U2 вы обнаружите, что, устанавливая бит 3 UCSR1B (TXEN1), вы включаете передатчик, переопределяя нормальную работу порта (т. Е. Он становится выходным). Цитирование таблицы данных:
Таким образом, записывая,
UCSR1B = 0;
вы больше не отменяете вывод TXD1, который будет действовать как ввод.ATMEGA16U2 TXD подключен к линии RX ATSAM3X8E. При нормальной работе с включенным UART эта линия остается высокой, если данные не передаются. Если вы отключите UART, эта конкретная линия больше не будет драйвером 1. Поскольку код инициализации не устанавливает подтягивание на этом выводе (и при этом он не настроен как выход), вывод становится плавающим входом, и любая утечка к GND или даже входной импеданс вашего датчика (который находится между вашим выводом и GND), медленно снизит логический уровень до 0.
Чтобы устранить эту проблему, вам необходимо: 1) изменить прошивку ATMEGA16U2, установив этот PIN-код как OUTPUT со значением 1. 2) изменить прошивку ATMEGA16U2, включив подтягивание на этом выводе. 3) (рекомендуется) Включите подтягивание на линии RX на ATSAM3X8E.
источник