Arduino Мега RS485

Я следую инструкциям с этой страницы, чтобы настроить связь RS485 между двумя Arduino.

https://arduino-info.wikispaces.com/SoftwareSerialRS485Example

Моя схема немного отличается от демонстрационной в следующем:

DI (вход данных) — это контакт 18 (в примере — 11) RO (выход приема) — это вывод 19 (в примере — 10) DE (разрешение передачи данных) и RE (разрешение приема) соединены перемычкой и подключены к контакту 5

Когда я использую скрипт, я вижу, как встроенный светодиод гаснет при отправке, но я не получаю обратно эхо, и я не вижу, чтобы светодиод на пульте дистанционного управления мигал при приеме.

Есть ли принципиальная проблема с пинами, которые я использую на MEGA, или у меня возникли трудности со скриптом?

Спасибо!

, 👍2


1 ответ


1

Я не знаю, что не так с вашей настройкой, но предлагаю вам начать с тестирование с помощью более простой программы.

Ниже представлена программа, которая просто копирует байты с USB-соединения (байты поступающий с последовательного монитора Arduino) на шину RS-485 или наоборот в зависимости от #define. Оба Arduino должны быть подключено следующим образом:

Arduino     transceiver
--------------------------------
GND         GND
5V          VCC
TX1 (18)    DI (driver input)
RX1 (19)    RO (receiver output)

Дополнительно подключите:

  • на отправляющей стороне:
    • USB-подключение к компьютеру
    • DE трансивера (включение выхода драйвера) и RE (выход приемника) включить) к Arduino 5V
  • на принимающей стороне:
    • DE и RE трансивера к GND Arduino

Убедитесь, что оба Arduino подключены к питанию и имеют общее заземление. При желании вы можете подключить принимающую плату Arduino к компьютеру, если вы можете отличить USB-соединения друг от друга.

Затем загрузите программу ниже в оба. Убедитесь, что вы закомментировали строку #define SENDER перед программированием приемника.

// «Отправитель» копирует байты из USB-соединения (последовательного) в RS-485
// шина (Serial1). Приемник копирует их наоборот.
// Закомментируйте эту строку для получателя.
#define SENDER

#ifdef SENDER
HardwareSerial &inputStream  = Serial;
HardwareSerial &outputStream = Serial1;
#else
HardwareSerial &inputStream  = Serial1;
HardwareSerial &outputStream = Serial;
#endif

void setup()
{
    inputStream.begin(9600);
    outputStream.begin(9600);
    pinMode(LED_BUILTIN, OUTPUT);  // используется для отображения активности
}

void loop()
{
    // Копируем входной поток в выходной поток.
    if (inputStream.available()) {
        digitalWrite(LED_BUILTIN, HIGH);
        outputStream.write(inputStream.read());
        outputStream.flush();
        digitalWrite(LED_BUILTIN, LOW);
    }
}

Теперь вы можете протестировать отправку строк через последовательный монитор и увидеть, мигают ли оба светодиода. Если вы подключите оба Arduino к вашему компьютер, вы можете использовать эмулятор терминала (screen, putty, minicom... в зависимости от вашей ОС) для получения символов обратно из принимающей Ардуино.

Если все это не помогает, возьмите осциллограф и посмотрите на все сигналы вдоль путь.

,