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
プログラム
spresense_rs485_unit1.ino
送信データ "1234567890"
/*
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 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 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);
}
RS-485 は半二重通信の為、送信と受信の制御が必須となります。
(受信は常時アクティブでも可)
このタイミングを正しく制御しないと正しく通信出来ませんのでご注意ください。