Контакт TX отправляет неправильные данные в Arduino Uno

Я хочу отправить некоторые данные на IP-модем из Arduino Uno. Этот IP-модем имеет входы TX и RX уровней TTL.

Я использовал это соединение между Arduino и IP-модемом:

Схемы подключения

Я питаю Arduino напряжением 12 В, подключенным к корпусу.

Это фото соединений:

Реальное фото

Я подключил ПК к USB-разъему Arduino и загрузил следующий скетч, чтобы отправить «AABB» на модем:

void setup(void) {
  Serial.begin(115200);
}

void loop(void) {
 Serial.print("AABB");

 delay(5000);
}

При отслеживании того, что принимает модем,

0x5F 0x5F 0xAF 0x2F

Если я отправлю только "A", каждые 5 секунд будет получен символ 0x5F.

Разумеется, оба конца настроены на 115 200 бит/с, 8N1.

Чтобы устранить проблему с модемом, я подключил RX, TX и GND в Arduino к гнездовому разъему DB9, а затем к преобразователю RS232-USB и начал мониторинг с моего ПК.

Мое удивление заключалось в том, что полученные данные точно такие же, как полученные модемом при его подключении. Как видно на следующем рисунке:

Последовательный мониторинг с ПК

Как вы видите на картинке, дважды было показано "_" (ASCII 0x5F), {\xaf} и, наконец, "/" (ASCII 0x2F).

Проверка выше подтверждает, что Arduino отправляет неправильные данные.

Есть что отметить. Когда я отслеживаю с помощью USB-кабеля, подключенного к Arduino, и используя серию мониторов в Arduino IDE, я правильно вижу «AABB». Проблема заключается в использовании контактов TX и RX (то же самое произошло, если бы я использовал другой контакт вместе с библиотекой SoftwareSerial)

Что может происходить?

, 👍0

Обсуждение

контакты 0 и 1 используются последовательным портом для ПК ... выберите другие контакты и используйте software serial ... можно найти множество примеров, @jsotola

Извините, но кажется, вы не прочитали весь вопрос. Я подключил контакты 0 и 1 к ПК. Кроме того, я сделал то же самое, используя библиотеку SoftwareSerial, используя другой порт. Возникает та же проблема (о чем говорит финал вопроса), @jstuardo

я дочитал только до первой картинки... она показывает помехи между последовательным портом USB и IP-модемом... дальше читать бессмысленно, @jsotola

@jsotola как учение, не читайте только введение, чтобы получить полное представление о тексте, @jstuardo

я понимаю, что вы говорите ... я просто сделал комментарий о первой проблеме, которую я увидел .... пожалуйста, добавьте свой скетч, который использует software serial, @jsotola

Пожалуйста, посмотрите ответ, @jstuardo

Arduino и (все это оборудование, такое как USB-адаптеры Arduino) отправляют инвертированный (пассив высокий) ПК, и все «старое» оборудование отправляет НЕ инвертированное. Только программное обеспечение. Серийный фургон отправить перевернутым - аппаратный серийный номер не может. То же самое с ESP32 и т. д., @Funkerman

@Funkerman Да .. Я понял об этом. Я инженер-электронщик, поэтому я понимаю электронные концепции, однако я новичок в Arduino, но с такими проблемами, с которыми я сталкиваюсь, я могу лучше понять, как работает Arduino. Когда у меня будет больше свободного времени, я посмотрю схемы Arduino. Кроме того, если я разработаю больше проектов в Arduino, я рассмотрю покупку осциллографа, чтобы увидеть, какие сигналы посылают выводы., @jstuardo


1 ответ


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

1

Поскольку вы уже пробовали SoftwareSerial, попробуйте инвертировать последовательный протокол через SoftwareSerial. Иногда устройство использует инвертированный последовательный протокол, а вы об этом не знаете.

Итак, инициализируйте инвертированное добавление 1 в конец конструктора следующим образом:

SoftwareSerial mySerial(RXPIN, TXPIN,1); // RX, TX, инвертированный
,

ты гений!! после 2 дней борьбы это было решением!, @jstuardo

@jstuardo * Дополнительное примечание для более быстрых результатов исследования в следующий раз: * Запишите биты по мере их отправки и получения. Асинхронная последовательная связь использует здесь сначала LSB. «А» = 0x41 = 0b01000001. Отправлено: 0-1-0-0-0-0-0-1-0-1 Получено: 0-1-1-1-1-1-0-1-0-1. Я думаю, это вполне очевидно. ;-) *Альтернативный способ:* Воспользуйтесь осциллографом и посмотрите TX и RX., @the busybee

@thebusybee, который прозрачен для систем. Отправитель всегда сначала отправляет данные с использованием LSB, а получатель сначала получает данные с LSB. Кстати, если отправляется 0x41 (0b01000001), то фактически отправляется 1-0-0-0-0-0-1-0, а принимается 0-1-1-1-1-1-0-1. Я не знаю, почему вы показали другой битовый рисунок. А пользоваться осциллографом интересно, но пока не особо нужно. Ключевым моментом здесь является то, что на самом деле передаются инвертированные биты., @jstuardo

Да, я знаю об инвертированных битах. Я добавил стартовый и стоповый биты, чтобы показать, что они важны для анализа. -- И поскольку я не знаю вашего (и будущих читателей) опыта, я упомянул сначала "LSB". Не все протоколы последовательной связи используют это., @the busybee