#1 Re: Програмування Arduino » Задержка связи по RS485 » 2024-12-10 01:15:35

У деяких прикладах при роботі з analogRead(A0) використовували delay(10) перед зчитуванням.
Використання  serial.println() потрібно було для контролю, у готовому приладі використовуватись не буде.
Тип float - під час випробувань приєдннував 1602, простіше(без перетворювання типів змінних) у використанні.

#2 Re: Програмування Arduino » Задержка связи по RS485 » 2024-12-09 23:14:17

Знайшов причину затримки. У кінці коду приймача є команда затримки  delay(200). Після заміни на delay(10) затримка зникла. Якщо замінити на delay(100), тоді затримка становить 10 секунд. Таку затримку використовув коли для налагодження роботи підключав тимчасово дисплей 1602.

#3 Re: Програмування Arduino » Задержка связи по RS485 » 2024-12-09 20:58:11

Мені здається що затримка у приймачі. Як я описував, поведінка приймача така, що при зміні показів із затримкою в 5-10 секунд я фізично роз"єдную дроти, але приймач із затримкою потім показує принятий вірний результат.

#4 Re: Програмування Arduino » Задержка связи по RS485 » 2024-12-09 20:46:55

Я  це розумію, тому і питаю, можливо хтось мав досвід? Код дуже простий.
Приймач:

#include <SoftwareSerial.h>
SoftwareSerial RS485(6,7);
#define DE_RE 10 // управление модулем RS485 прием-передача

float R2;

void setup()
{
  Serial.begin(9600);
  RS485.begin(4800);
  pinMode(DE_RE,OUTPUT);
  digitalWrite(DE_RE,LOW); //приемник
}

void loop()
{
  R2=RS485.read();
  Serial.print("Zadanie = ");
  Serial.println(R2,0);
  delay(200);
 
}

Передавач:
#include <SoftwareSerial.h>
SoftwareSerial RS485(6,7);
#define DE_RE 10
float R;
float R1;

void setup()
{
  Serial.begin(9600);
  RS485.begin(4800);
  pinMode(DE_RE,OUTPUT);
  digitalWrite(DE_RE,HIGH); //передатчик
}

void loop()
{
  R1 = analogRead(A0);
  R =(R1+1)/4;
  Serial.print("ZADANIE = ");
  Serial.println(R,0);
  RS485.write(R);
  delay(10); 
}

#5 Програмування Arduino » Задержка связи по RS485 » 2024-12-09 12:57:31

tss69
відповідей: 10

Соединил две ардуины через модули TTL-RS485 по стандартной схеме. Одна ардуина измеряет напряжение на переменном резисторе и передаёт на вторую. Передача только в одну сторону. Связь работает, но при изменении напряжения приёмник  принимает данные с задержкой 20 секунд. Приём и передачу контролирую в мониторе. Скорость связи менял 4800, 9600, 19200 - результат - задержка не изменилась. При изменении данных на передатчике через 10 секунд разрывал линию - на приёмнике с задержкой показания менялись! То-есть, приёмник принимает данные сразу, но "отдаёт" с задержкой 20 секунд. В приёмнике реализовано только приём данных и просмотр(контроль) в мониторе. Линия связи - витая пара, 40 м.

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