Нужна помощь с RS-485 (не могу понять принцип кодирования NRZ)

zebox
Offline
Зарегистрирован: 08.02.2015

Всем привет!
Народ подскажите пожалуйста, не могу понять реализацию работы RS-485 с кодировкой NRZ.

Есть железка которая управляется через RS-485. Есть спецификация к ее протоколу:

zebox
Offline
Зарегистрирован: 08.02.2015

Прошу прощения.. продолжение... (не нашел кнопку редактировать)

Спека к протоколу:
Bauds Rate 4800 
Data bits 8 
Parity Odd 
Start Bit Logical level 0 
Stop Bit Logical level 1 
Character coding NRZ
 
Мой код:
#define SerialTxControl 7   //RS485 управляющий контакт на arduino pin 7
#define RS485Transmit    HIGH
#define RS485Receive     LOW  
byte rs_msg2[11] = {
    0xBF,0xF2,0xFA,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0xAC};  //отправляемый фрейм

 
char buffer[100];
void setup(void) {
  Serial.begin(4800,SERIAL_8O1);
   pinMode(SerialTxControl, OUTPUT);  
    RSTRRR();
}
 
void loop(void) {
   
  digitalWrite(SerialTxControl, RS485Receive);  // читаем данные с порта
   
 int i=0; if(Serial.available()){delay(100);
 
  RSTRRR();
while( Serial.available() && i< 99) 
{ buffer[i++] = Serial.read();} buffer[i++]='\0';
   delay(1000);
}
  if(i>0)
  {
     Serial.println(buffer); // Выводим что приняли с других устройств
    }


}

void RSTRRR() {
 pinMode(SerialTxControl, OUTPUT);  
   digitalWrite(SerialTxControl, RS485Transmit); 
   for (int i=0;i<11;i++){  
      Serial.write(rs_msg2[i]);  
     delay(100);
    //Serial.println(rs_msg2[i],HEX);
    
   // Send byte to Remote Arduino
  }

  delay(100); 
  digitalWrite(SerialTxControl, RS485Receive);    
}
Соответсвенно проблема в том что ответ от железки прилетает в консоль, но "абракадаброй".
Как я понимаю проблеа в том что нереализован коректно механизм NRZ кодирования?
Помогите разобраться. 
Плата: Arduino Unu+модуль RS-485 на MAX485.
 
Спасибо!
 
 
 
 
nik182
Offline
Зарегистрирован: 04.05.2015

NRZ это всего навсего физическое описание RS 485. Попробуйте поменять АВ провода местами.

zebox
Offline
Зарегистрирован: 08.02.2015

Прошу прощения за не точность...произвел отладку... оказывается железка мне ничего не отвечает, а иерогливы это вывод вот этой строки:

Serial.write(rs_msg2[i]); 

Выводит следующее:

¿òú
kasper007
Offline
Зарегистрирован: 23.05.2016

zebox пишет:

Прошу прощения за не точность...произвел отладку... оказывается железка мне ничего не отвечает, а иерогливы это вывод вот этой строки:

Serial.write(rs_msg2[i]); 

Выводит следующее:

¿òú

А в чем вы пытаетесь увидеть? В стандартном арудиновском мониторе? тогда ничего другого вы не увидите, так как он вам в удобочитаемом виде покажет только "ASCII текст".(http://arduino.ru/Reference/ASCIIchart) Установите любой монитор порта и тогда сможете именно значения byte смотреть, а не соответсвующие этим значениям символы.

 

zebox
Offline
Зарегистрирован: 08.02.2015

Понял! спасибо!