Контакт 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)
Что может происходить?
@jstuardo, 👍0
Обсуждение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
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Как остановить серводвигатель в текущем положении при использовании последовательного порта? Я хочу, чтобы он оставался в одном положении при получении «0».
- Метод перебора битов в байте, отправленном по последовательному каналу.
- Arduino Uno по-прежнему загружается и работает, но нет последовательной связи через USB
- Отправка строки с Arduino на ESP8266 работает на UNO, но не на Pro Mini
- Повреждение данных SoftwareSerial - поиск предложений
- Как программировать микрочипы напрямую через USB
- Какой лучший способ объявить Serial при создании библиотеки Arduino?
контакты
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