Последовательный модуль повторяет «0x00»
У меня возникла проблема с модулем MAXIM Serial (Config A) с простым повторяющимся кодом от COM-порта. При отправке символа (k
:0x6b
) я получаю эхо (0x00
).
Без модуля и простого подключения Arduino через кабели TX/RX у меня нет эха.
Эхо сохраняется независимо от:
- Скорость (от 38 400 до 2 000 000 бит/с),
- Используя или не используя параметры высокой скорости (2,3 МОм для 250 000 бит/с) MAXIM,
- Использование или отсутствие оконечных резисторов 120 Ом
- Оба заземления 0 В, их подключение не имеет никакого эффекта,
- Отсоединение кабелей последовательной шины
A
(красный)B
(зеленый) (???). В этом случае сообщение не отправляется, как и ожидалось (!).
В чем может быть проблема?
Устройства:
- Два Arduino Mega 2560,
- Два MAX3292, по одному на каждую Arduino,
- Кабель AWG24, короче 7 витков в каждом.
Конфигурация A: с модулем (00
echo), полудуплекс (f.19 p.13).
Конфигурация B: без модуля (без эха), только перекрестные кабели
Код:
long rate=38400;
void setup() {
Serial.begin(rate); while (!Serial);
Serial1.begin(rate); while (!Serial1);
pinMode(22,OUTPUT);
pinMode(23,OUTPUT);
}
char s;
void loop() {
if (Serial.available()) {
digitalWrite(22,1);
digitalWrite(23,1);
s=Serial.read();
Serial1.write(s);
Serial1.flush();
digitalWrite(23,0);
digitalWrite(22,0);
}
if (Serial1.available()){
s=Serial1.read();
Serial.write(s);
}
}
Выполнение: отправлено четыре k
, получено 0x00
. После этого четыре k
отправлены с другого arduino, успешно приняты.
Эпилог.
На самом деле проблема заключалась в резисторе на выходе RO, не показанном на схеме ("Проблема в коде, который вы не разместили").
Это был делитель напряжения для преобразования 5V3.3 в корпусе Arduino Due, бесполезный в Arduino Mega, но все еще там.
Теоретически причина в том, что резистор вызывал всплеск на выходе (?), заставляя модуль интерпретировать его как другой байт, пустой (?).
После удаления резисторов все заработало отлично. Теперь я мигрировал это обратно в Arduino Due, но с диодом и подтягивающим резистором в качестве преобразователя 5V3.3.
@Brethlosze, 👍0
Обсуждение1 ответ
Лучший ответ:
Проверьте проводку! Я предполагаю, что это витая пара (подкачка AB).
Я проверил ваш код, он кажется правильным. Обратите внимание, что /RE и DE были разработаны таким образом, что вы можете просто подключить их и управлять только одним контактом.
У меня нет точно такого же железа, у меня под рукой были MAX485 и Arduino Nano. Nano имеет только один аппаратный серийный номер, поэтому вместо него я использовал библиотеку SoftwareSerial. Я подключил их, настроил ваш код под свои настройки, и все заработало. Вот это на случай, если это поможет решить вашу проблему. Я также немного оптимизировал вашу версию (но раньше она работала, так что ошибка где-то в другом месте).
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 4); // RX, TX
const int dir_pin=9;
const int dir_transmit=1;
const int dir_receive=0;
long rate=38400;
void setup() {
Serial.begin(rate); while (!Serial);
mySerial.begin(rate); while (!mySerial);
pinMode(dir_pin,OUTPUT);
}
char s;
void loop() {
if (Serial.available()) {
digitalWrite(dir_pin,dir_transmit);
while(Serial.available())
{
s=Serial.read();
mySerial.write(s);
}
mySerial.flush();
digitalWrite(dir_pin,dir_receive);
}
while (mySerial.available()){
s=mySerial.read();
Serial.write(s);
}
}
Что ж, код и конфигурация были в порядке, но... причиной проблемы был резистивный делитель на выходе RO, не показанный на схеме. После его удаления все заработало нормально. В любом случае спасибо за старания..., @Brethlosze
- Когда дело доходит до связи UART-RS485, в чем разница между модулем "MAX485" и модулем "HW-0519"?
- Управление VFD с помощью ModBus RTU через RS485 и Arduino
- Arduino RS485 shield к датчику температуры и влажности RS485
- Проблема со связью по Modbus между двумя Arduino при записи более 27 регистров.
- Как подсчитать количество байтов, появляющихся в Arduino serial?
- Проблема последовательной связи RS-485 с arduino
- Сборка последовательного адаптера RS485 к USB с помощью digispark
- Serial Enable Maxim RS485 Pin
У вас есть основания Arduinos, соединенные вместе, не так ли?, @Majenko
Все подключены от одного и того же разветвителя USB, но даже подключив их в макетке, эффект сохраняется., @Brethlosze
Хорошо, если посмотреть подробнее - какой код на другом конце? У вас два мега, но показываете только один код. Во-вторых, ваша терминальная программа настроена на другую скорость передачи данных, чем ваша программа., @Majenko
Один и тот же код для обоих. Эффект одинаков для всех скоростей., @Brethlosze
С этим кодом для обоих, почему вы ожидаете, что что-то вернется? 00 - это ошибка, а не отсутствие ответа., @Majenko
Да, «0x00» — это ошибка. Не должно быть получено ни эха, ни ответа. Если я отключу шину AB, эхо останется... Если я уберу сигнал RE'DE, эхо исчезнет (но приема нет, так как он отключен)., @Brethlosze
Точно ли ваша диаграмма fritzing описывает реальность, или ваш правый чип на самом деле подключен не так, как вы его показываете?, @Majenko
Он почти такой же, как на схеме. На той же макетной плате подключите кабели, как указано, к соответствующему Arduino. Кабели named и AB имеют длину около 7 см., @Brethlosze
Значит, у тебя на самом деле неправильно подключен правый чип? Осмотрите провода, идущие между Arduino и правым чипом..., @Majenko
Ах да, это ошибка рисунка (к сожалению?)... Уже исправил., @Brethlosze
Похоже, вы подключили его к MAX3291 вместо MAX3292. Удалите провод PEE, так как это не PEE, это PSET. Подключите резистор и конденсатор к VCC. Прочитайте страницу 11 таблицы данных., @Majenko
У меня они были раньше, и я только что добавил их сейчас, но, к сожалению, все то же эхо, по одному на символ в строке, после отправки строк или отправки отдельных символов..., @Brethlosze