#1 Re: Програмування Arduino » работа с RS485 » 2016-09-07 14:55:24

Проблема не в сырцах а в построении самой шины, по вашему совету более внимательно изучил http://datasheets.maximintegrated.com/e … MAX491.pdf

#4 Re: Програмування Arduino » работа с RS485 » 2016-08-26 07:43:06

попробовал залить скетч тот же что и в примере https://arduino-info.wikispaces.com/Sof … 485Example

ситуация та же самая. ПК - это мастер ,с него в COM порт летят команды 1 или 2 и соответственно при 1 зажигается blue_led, при 2 - yellow_led

#include <SoftwareSerial.h>

#define SSerialRX        10  //Serial Receive pin
#define SSerialTX        11  //Serial Transmit pin

#define SSerialTxControl 4   //RS485 Direction control
#define RS485Transmit    HIGH
#define RS485Receive     LOW

#define Pin13LED         2


SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX

int byteReceived;
int byteSend;

void setup()
{
  // Start the built-in serial port, probably to Serial Monitor
  Serial.begin(9600);
  Serial.println("SerialRemote");  // Can be ignored
  
  pinMode(Pin13LED, OUTPUT);   
  pinMode(SSerialTxControl, OUTPUT);  
  
  digitalWrite(SSerialTxControl, RS485Receive);  // Init Transceiver
  
  // Start the software serial port, to another device
  RS485Serial.begin(9600);   // set the data rate 
}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
 // while (RS485Serial.available() == 0); 
  int val = RS485Serial.read() - '0';
//if (val == 1)
 if (val == 2)
  {      
    
    digitalWrite(Pin13LED, HIGH);  // Show activity
    delay(1000);              
    digitalWrite(Pin13LED, LOW);
      
    
    digitalWrite(SSerialTxControl, RS485Transmit);  // Enable RS485 Transmit    
    //RS485Serial.write(byteSend); // Send the byte back
    Serial.println("Yellow_on");
    //Serial.println("Blue_on");
    delay(10);   
    digitalWrite(SSerialTxControl, RS485Receive);  // Disable RS485 Transmit      
  }
 
}

обе ардуины+конвертеры подключены так: R0=D10, DI=D11, DE/RE=D4

при отправке 1 в serial - зажигается blue_led на первой ардуине, при отправке 2 в serial - на второй ардуине ничего не происходит. Далее, если на второй ардуине отключить DE от D4 то при отправке 1 в serial - зажигается blue_led на первой ардуине, при отправке 2 в serial - зажигается yellow_led на второй ардуине, и это как бы круто, оно работает, но вторая ардуина обратно в serial не отвечает...т.е суть проблемы в том, что нужно получить обратные ответы при выполнении команды, иначе не понятно, получила одна из ардуин что-то или не получила

#5 Re: Програмування Arduino » работа с RS485 » 2016-08-25 11:15:25

код в первом посту поправил, собсна если ардуина в serial видит 1 то включает лед, на второй ардуине такой же код но изменена строка на  if (val == 1) на  if (val == 2) т.е если видит 2 то включает лед и т.д
На счет отправки в сериал при старте да, точно, попробую убрать, посмотрю что изменится

хотя как раз многие  !RE + DE что б аппаратно избавится  от эха
читали? )) http://datasheets.maximintegrated.com/e … MAX491.pdf

буду пробовать

#6 Re: Програмування Arduino » работа с RS485 » 2016-08-25 09:17:05

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

#7 Програмування Arduino » работа с RS485 » 2016-08-25 07:43:26

megahertz
відповідей: 9

Доброго дня
Есть схема  http://adatum.ru/wp-content/uploads/2014/08/test789.jpg по которой две ардуины подключены к писюку
и есть программа залитая в обе ардуины

#define SerialTxControl 5
#define RS485Transmit    HIGH
#define RS485Receive     LOW  
int ledPin = 2;
char buffer[100];

void setup(void) {
  Serial.begin(9600);
   pinMode(SerialTxControl, OUTPUT);  
   digitalWrite(SerialTxControl, RS485Transmit); 
   Serial.println("TEST666");  
   pinMode(ledPin, OUTPUT);
  delay(100); 
  digitalWrite(SerialTxControl, RS485Receive); 
}
 
void loop(void) {
digitalWrite(SerialTxControl, RS485Receive);
   
while (Serial.available() == 0);
  int val = Serial.read() - '0';

  if (val == 1)
  {
    digitalWrite(ledPin, HIGH);
    Serial.println("led_on");
  }
}

Собственно при подключении такой схемы, пины DE/RE на TTL конвертере замыкаются между собой перемычкой и подключаются к управляющему контакту D10 ардуины, так же происходит и на второй ардуине, далее при включении всего этого безобразия я могу работать только с одной ардуиной, т.е что-то отправлять или принимать от нее по RS485, а вот вторая висит с постоянно горящим TX и соответственно ничего передать или принять от нее я не могу...Если разомкнуть RE от DE на проблемной ардуине и подключить только DE на D10, то я могу на нее отправлять какие то команды через RS485 и она их обрабатывает, но работает это в одностороннем порядке т.е ответы ардуина обратно не отправляет.
Собсна вопрос знатокам, где и что мог упустить?

Підвал форуму