LoginSignup
4
0

More than 1 year has passed since last update.

SONY Spresense でRS-485 マルチドロップのテスト

Posted at

Spresens rs-485 Multi Drop test program

3枚の基板を使ってRS-485のテストを行います。
実際は3枚の基板に対してのマスター・スレーブの制御が必要となりますが、今回は単純に3枚の基板から別々のデータを送信しています。
よって送信のタイミングが重なった場合は正常に動きません。

事前準備

SJ1 受信イネーブル制御ピン選択 1: EMMC_DATA3
SJ2 送信イネーブル制御ピン選択 1: EMMC_DATA2
SJ3 ショート RXラインの終端抵抗有効 (両端の2枚)
SJ4 ショート:RS-485
SJ5 ショート:RS-485

3枚の基板の Y Z または A B どうしを接続
IMG-0375.jpg

プログラム

spresense_rs485_unit1.ino

 送信データ "1234567890"

spresense_rs485_unit1.ino
/*
  Spresense RS-422/485 ボード(NS-SPR-0301) テストプログラム
  rS-422/485 test
  Set Jummper
  SJ1 1-2ショート  
  SJ2 1-2ショート  
  SJ3 ショート
  SJ4 ショート
  SJ5 ショート

  Next Step LLC
  https://next-step.asia/
  https://github.com/kaz19610303/SPRESENSE_RS422_485
*/

#define Receive_Enable 21                     // 受信許可ピン Active LOW
#define Transmit_Enable 20                    // 送信許可ピン Active High


void setup() {
  // initialize both serial ports:
  Serial.begin(115200);                         // Monitor terminal
  Serial2.begin(115200);                        // RS-422/485 terminal
  pinMode(21,OUTPUT);
  pinMode(20,OUTPUT);
  digitalWrite(Receive_Enable, LOW);          // Receive Enable
}

void loop() {
  Serial.println("Send unit_1 : 1234567890");
  digitalWrite(Transmit_Enable, HIGH);        // Transmit Enable
  Serial2.println("1234567890");              // Send RS-422/485 
  Serial.flush();
  digitalWrite(Transmit_Enable, LOW);         // Transmit Enable
  while (Serial2.available()) {               // Recive RS-422/485
    Serial.write(Serial2.read());             // Send Monitor terminal 
  }
  delay(1000);
}

spresense_rs485_unit2.ino

 送信データ "9876543210"

spresense_rs485_unit2.ino
/*
  Spresense RS-422/485 ボード(NS-SPR-0301) テストプログラム
  rS-422/485 test
  Set Jummper
  SJ1 1-2ショート  
  SJ2 1-2ショート  
  SJ3 ショート
  SJ4 ショート
  SJ5 ショート

  Next Step LLC
  https://next-step.asia/
  https://github.com/kaz19610303/SPRESENSE_RS422_485
*/

#define Receive_Enable 21                     // 受信許可ピン Active LOW
#define Transmit_Enable 20                    // 送信許可ピン Active High


void setup() {
  // initialize both serial ports:
  Serial.begin(115200);                         // Monitor terminal
  Serial2.begin(115200);                        // RS-422/485 terminal
  pinMode(21,OUTPUT);
  pinMode(20,OUTPUT);
  digitalWrite(Receive_Enable, LOW);          // Receive Enable
}

void loop() {
  Serial.println("Send unit_2 : 9876543210");
  digitalWrite(Transmit_Enable, HIGH);        // Transmit Enable
  Serial2.println("9876543210");              // Send RS-422/485 
  Serial.flush();
  digitalWrite(Transmit_Enable, LOW);         // Transmit Enable
  while (Serial2.available()) {               // Recive RS-422/485
    Serial.write(Serial2.read());             // Send Monitor terminal 
  }
  delay(1000);
}

spresense_rs485_unit3.ino

 送信データ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

spresense_rs485_unit2.ino
/*
  Spresense RS-422/485 ボード(NS-SPR-0301) テストプログラム
  rS-422/485 test
  Set Jummper
  SJ1 1-2ショート  
  SJ2 1-2ショート  
  SJ3 ショート
  SJ4 ショート
  SJ5 ショート

  Next Step LLC
  https://next-step.asia/
  https://github.com/kaz19610303/SPRESENSE_RS422_485
*/

#define Receive_Enable 21                     // 受信許可ピン Active LOW
#define Transmit_Enable 20                    // 送信許可ピン Active High


void setup() {
  // initialize both serial ports:
  Serial.begin(115200);                         // Monitor terminal
  Serial2.begin(115200);                        // RS-422/485 terminal
  pinMode(21,OUTPUT);
  pinMode(20,OUTPUT);
  digitalWrite(Receive_Enable, LOW);          // Receive Enable
}

void loop() {
  Serial.println("Send unit_3 : ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  digitalWrite(Transmit_Enable, HIGH);        // Transmit Enable
  Serial2.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ");              // Send RS-422/485 
  Serial.flush();
  digitalWrite(Transmit_Enable, LOW);         // Transmit Enable
  while (Serial2.available()) {               // Recive RS-422/485
    Serial.write(Serial2.read());             // Se<<<nd Monitor terminal 
  }
  delay(1000);
}

実行結果
rs485_3units_test.png

RS-485 は半二重通信の為、送信と受信の制御が必須となります。
(受信は常時アクティブでも可)
このタイミングを正しく制御しないと正しく通信出来ませんのでご注意ください。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0