Arduino Мега RS485
Я следую инструкциям с этой страницы, чтобы настроить связь RS485 между двумя Arduino.
https://arduino-info.wikispaces.com/SoftwareSerialRS485Example
Моя схема немного отличается от демонстрационной в следующем:
DI (вход данных) — это контакт 18 (в примере — 11) RO (выход приема) — это вывод 19 (в примере — 10) DE (разрешение передачи данных) и RE (разрешение приема) соединены перемычкой и подключены к контакту 5
Когда я использую скрипт, я вижу, как встроенный светодиод гаснет при отправке, но я не получаю обратно эхо, и я не вижу, чтобы светодиод на пульте дистанционного управления мигал при приеме.
Есть ли принципиальная проблема с пинами, которые я использую на MEGA, или у меня возникли трудности со скриптом?
Спасибо!
@Joe Bisson, 👍2
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... в зависимости от вашей ОС) для получения символов обратно из принимающей Ардуино.
Если все это не помогает, возьмите осциллограф и посмотрите на все сигналы вдоль путь.
- Проблема со связью по Modbus между двумя Arduino при записи более 27 регистров.
- Чтение внутренних регистров RS485
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?