Странное последовательное поведение Arduino
Сегодня у меня необычный вопрос.
У меня есть Arduino MEGA 2560 с очень простой настройкой. Он подключен к моему компьютеру через USB, и к его встроенной группе портов TX/RX2 подключено одно устройство. Всякий раз, когда я открываю COM-порт на своем компьютере, я вижу короткий всплеск напряжения на выводе TX2. Аналогичное поведение происходит даже на самых простых скетчах, поэтому я не думаю, что это библиотека, которую я использую для общения с этим устройством.
В приведенном ниже скетче вместо короткого всплеска напряжения линия TX2 остается на высоком уровне, и когда COM-порт компьютера открыт, эта линия TX2 падает до 0 В примерно на полсекунды.
Не очень релевантная информация об устройстве
It's a Noritake GU140X32F-7000 display. The mfg website doesn't list it's model directly but the
info on the 'B' variant, and it's supplied AVR code, work just fine.
MFG Website for this model>> https://noritake-vfd.com/gu140x32f-7000b.aspx
Code Library>> https://www.noritake-elec.com/codeLibrary.php#gu7000
Соответствующий минимальный код, чтобы увидеть этот эффект на подключенном осциллографе ГРД <-> AVR Ground, POS <-> Pin16(TX2)
void setup() {
Serial.begin(115200); // Подключение к компьютеру
Serial2.begin(38400); // Подключение к TX2 контакту 16
Serial2.write('akjlahsdkjahsdkjlhasdkjhaskldjhaksjhd');
}
uint8_t serialByte = 0;
void loop() {
if (Serial.available() > 0) {
serialByte = Serial.read();
}
}
Что происходит, чего я не хочу, так это то, что после того, как я отрисовываю Arduino на экране Noritake, и я открываю или снова открываю COM-порт с моего компьютера на Arduino, экран сам гаснет. Не имеет значения, использую ли я PUTTY, последовательную библиотеку Python с
ser = serial.Serial('COM4', 115200, R timeout=0,parity=serial.PARITY_NONE, rtscts=1)
или пробную версию Serial Port Monitor с https://www.com-port-monitoring.com/ через диалог отправки - это происходит в любом случае.
Особенно странно то, что я не вижу данных, проходящих через этот COM-порт в программном обеспечении Serial Monitor, когда COM-порт открыт, и все же мой осциллограф (довольно дрянной DSO138) улавливает всплеск напряжения, происходящий в момент открытия этой последовательной линии. с моего ПК. Когда я использую библиотеку Noritake, линия TX обычно имеет низкий уровень, когда нет данных, тогда как встроенная в Arduino линия Serial2 обычно имеет высокий уровень, пока есть данные. Затем, когда я подключаюсь, он становится низким примерно на полсекунды. Код, который Noritake использует для обмена данными по этой последовательной линии, немного странный: на самом деле он не использует встроенные классы Serial или Stream, а вместо этого предпочитает записывать данные в этот порт вручную и включает только эти две внешние библиотеки.
#include <avr/pgmspace.h>
#include <util/delay_basic.h>
Что приводит к тому, что Serial2 становится низким, когда мой компьютер открывает COM-порт для Serial на моем Arduino? Что я могу сделать, чтобы предотвратить запись в Serial2?
@Interrobang, 👍1
Обсуждение1 ответ
Лучший ответ:
Что касается того, почему это происходит: подключение к Arduino через встроенный USB-порт приведет к очистке дисплея, поскольку Arduino перезагрузит и повторно инициирует процедуру инициализации дисплея. Всплеск тока на самом деле был сигналом инициализации. В минимальном скетче сигнал становится высоким, низким, а затем снова высоким из-за сброса Arduino.
Решение, которое я собираюсь использовать, заключается в том, чтобы просто изменить способ подключения к моему Arduino с помощью python, добавив dsrdtr = 1
в мое объявление серийного номера. Я проверил это, и мой Arduino больше не сбрасывается, и загрузка скетчей не влияет.
# Python 3.7.5
import serial
ser = serial.Serial('COM4', 115200, timeout=0, parity=serial.PARITY_NONE,
rtscts=1, dsrdtr = 1)
Убрал часть со ссылками на в основном устаревшую и неактуальную информацию об автосбросе. Леонардо сильно отличается в этом, и современные платы Uno/Mega имеют контактные площадки, которые можно разрезать, чтобы отключить автосброс, и в конечном итоге снова соединить их с помощью пайки. решение для Python хорошее. проголосовать за это, @Juraj
- Максимальная последовательная скорость CH340
- Можно ли загрузить скетч Arduino через последовательный порт (RX) вместо USB?
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Внешнее питание 5 В и последовательный порт USB
- Можно ли использовать Serial.print(сообщение), когда USB-кабель не подключен к хост-компьютеру?
- Как установить последовательные драйверы FTDI на Mac?
- SerialUSB на Arduino Due
- Mac не обнаруживает последовательный порт для Леонардо
Вы, вероятно, чрезмерно исследуете вещи и находите проблему, которая не является проблемой. Самая простая причина: когда вы открываете последовательный порт, Arduino перезагружается, и ваш скетч снова запускается с самого начала., @Majenko
Хорошо, это ответил на мой вопрос. Спасибо! Вы хотите получить кредит за это или я должен сам ответить на эту тему?, @Interrobang
Зачем нам удалять этот вопрос? Я предлагаю @Majenko опубликовать свой комментарий в качестве ответа, и ответ будет выбран. Не удаляйте ценную отладочную информацию. вот так из интернета., @Gabriel Staples
Interrobang, вы также можете ответить на свой вопрос, а затем выбрать его как правильный ответ через 2 дня. Предлагаю сохранить вопрос и ответить на него самостоятельно, цитируя Маженко., @Gabriel Staples
Я собираюсь подождать два дня, спасибо, Габриэль!, @Interrobang