Проблема с QY3806-485 - Max 485 - arduino mega

ZedRX

✩✩✩✩✩✩✩
26 Мар 2026
4
0
Здравствуйте, пытаюсь работать с абсолютным энкодером QY3806-485, необходимо читать углы на ардуино мега и отправлять на дисплей. Отдельно проверял энкодер через rs485-rs232-usb, через комп давал ему команды hex пачками (01 03 00 00 00 01 84 0A), по modbusRTU, в ответ получал след 01 03 02 01 42 39 E5. Отдельно проверял конвертер MAX 485 (через ардуино нано и конвертеры отправлял текст на ардуино мега и выводил в терминал) все работало. Когда пытаюсь подключить ардуино мега - MAX 485 - QY3806-485, то ничего не работает, в ответ не приходят пачки HEX. Подключался по след схеме1774532595282.png
пробовал разные цифровые пины, отдельно питал энкодер, отдельно питал конвертер от ардуинки, потом пробовал питать все от ардуино, саму ардуинку питал от компа. Не могу понять почему от энкодера не приходит ответ. Со скоростью передачи тоже эксперментировал, пробовал сбрасывать настройки энкодера, пытался общаться через разные адреса slave
 

VictorArx

★★★✩✩✩✩
22 Мар 2021
661
104
Так может сама мега неисправна, если с нано работает.
 

ZedRX

✩✩✩✩✩✩✩
26 Мар 2026
4
0
Оформи код соответствующим тэгом, см. Правила
@EugeneFrol,

#define RE_DE_PIN 7

void setup() {
Serial.begin(115200);
Serial1.begin(9600); // используем Serial1 (пины 19-RX1, 18-TX1)
pinMode(RE_DE_PIN, OUTPUT);
digitalWrite(RE_DE_PIN, LOW);
Serial.println("Raw data monitor");
}

void loop() {
uint8_t query[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A};

// Передача
digitalWrite(RE_DE_PIN, HIGH);
delay(5);
Serial1.write(query, sizeof(query));
Serial1.flush();
delay(50); // задержка для ответа энкодера
digitalWrite(RE_DE_PIN, LOW);

// Приём: выводим каждый байт по мере поступления
bool received = false;
unsigned long start = millis();
while (millis() - start < 300) {
while (Serial1.available()) {
uint8_t b = Serial1.read();
Serial.print(b, HEX);
Serial.print(" ");
received = true;
}
}
if (!received) {
Serial.print("."); // если данных нет, выводим точку
}
Serial.println(); // новая строка после каждого опроса
delay(500);
}
 

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
79
11
50
На рисунке подключение к 8 пину, а в скетче RE_DE_PIN = 7. Так надо?!
Только заметил, что режим приема digitalWrite(RE_DE_PIN, LOW);
включается после delay(), т.е. если ответ по RS485 был, то ушел в никуда.
 
Изменено:

ZedRX

✩✩✩✩✩✩✩
26 Мар 2026
4
0
@bort707,менял, не канает

@EugeneFrol, я если что учитывал пины и если на физ уровне менял провод, то и в скетче тоже менял, хотите сказать, что режим приема поставить до delay()?
 

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
79
11
50
Да. У Вас 50мс модуль остается в режиме передачи - на вход RXD1 ответный сигнал в течении этого времени не пройдет и в буфер UART не запишется.
Однозначно, прием надо включать сразу же за flush().
 
  • Лойс +1
Реакции: bort707