Странное последовательное поведение 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?

, 👍1

Обсуждение

Вы, вероятно, чрезмерно исследуете вещи и находите проблему, которая не является проблемой. Самая простая причина: когда вы открываете последовательный порт, Arduino перезагружается, и ваш скетч снова запускается с самого начала., @Majenko

Хорошо, это ответил на мой вопрос. Спасибо! Вы хотите получить кредит за это или я должен сам ответить на эту тему?, @Interrobang

Зачем нам удалять этот вопрос? Я предлагаю @Majenko опубликовать свой комментарий в качестве ответа, и ответ будет выбран. Не удаляйте ценную отладочную информацию. вот так из интернета., @Gabriel Staples

Interrobang, вы также можете ответить на свой вопрос, а затем выбрать его как правильный ответ через 2 дня. Предлагаю сохранить вопрос и ответить на него самостоятельно, цитируя Маженко., @Gabriel Staples

Я собираюсь подождать два дня, спасибо, Габриэль!, @Interrobang


1 ответ


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

2

Что касается того, почему это происходит: подключение к 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