RS422 vs RS485 per pivelli

salve a tutti,

ho un apparecchio con uscita seriale che riesco a leggere con questo adattatore RS422 to TTL (MAX490ESA).
l'apparecchio ha tre fili, due dei quali sono alimentazione 12v ed il terzo il segnale in uscita.
ho collegato il grd dell'apparecchio al A e il cavo segnale al B dell'adattatore

apparecchio------------------------ RS422/TTL ---------- arduino
grd ------------------------------------ A. TX -------------- RX
sgl ------------------------------------ B. RX --------------TX
12V ----- +12v NC X 5V ------------- 5V
NC Y GRD ---------- GRD

con questo sketch:

void setup() {

  Serial.begin(115200);
  delay(1000);

//              speed, mode,      rx, tx
  Serial2.begin(9600, SERIAL_8N1, 26, 32);
  delay(1000);

void loop() {
  recvBytesWithStartEndMarkers();
  showNewData();
}

void recvBytesWithStartEndMarkers() {
  static boolean recvInProgress = false;
  static byte ndx = 0;
  byte startMarker = 0x7C; // "|"
  byte endMarker = 0x0A; // (LF) "/n"

  //  byte startMarker = 0x0A; // "/n"
  //  byte endMarker = 0x0D; // (CR) "/r"


  byte rb;

  while (Serial2.available() > 0 && newData == false) {
    rb = Serial2.read();

    if (recvInProgress == true) {
      if (rb != endMarker) {
        receivedBytes[ndx] = rb;
        ndx++;
        if (ndx >= numBytes) {
          ndx = numBytes - 1;
        }
      }
      else {
        receivedBytes[ndx] = '\0'; // terminate the string
        recvInProgress = false;

        numReceived = ndx;  // save the number for use when printing
        ndx = 0;
        newData = true;
      }
    }

    else if (rb == startMarker) {
      recvInProgress = true;
    }
  }
}

void showNewData() {
  if (newData == true) {

    //    Serial.print(" ... HEX Value.. ");
    for (byte n = 0; n < numReceived; n++) {
      Serial.print(receivedBytes[n], HEX);
      Serial.print(' ');

      if (receivedBytes[numReceived - 3] == 0x36 && receivedBytes[numReceived - 6] == 0x30) {
        unit = 0; // CM ARRI 60
      }

      if (receivedBytes[numReceived - 3] == 0x37 && receivedBytes[numReceived - 6] == 0x30) {
        unit = 1; //FT ARRI 70
      }

      if (unit == 0 && receivedBytes[numReceived - 6] == 0x31) {
        cm = receivedBytes[numReceived - 4] * 100 + receivedBytes[numReceived - 3] * 10 + receivedBytes[numReceived - 2];

      }
      if (unit == 1 && receivedBytes[numReceived - 6] == 0x31) {
        ft = receivedBytes[numReceived - 5] * 10 + receivedBytes[numReceived - 4];
        inc = receivedBytes[numReceived - 3] * 10 + receivedBytes[numReceived - 2];

      }
    }
    Serial.println();
    Serial.print ("cm ");
    Serial.println (cm);
    Serial.print ("ft ");
    Serial.println (ft);
    Serial.print ("inc ");
    Serial.println (inc);

    newData = false;

  }
}

ho un bel output sul monitor seriale dei dati che escono dall'apparecchio!!

il "network" è composto dall'apparecchio e dall'arduino e basta.

la domanda è:

posso sostituire l'adattatore RS422/TTL con un RS485/TTL(SP485EEN-L)?

grazie mille e scusate per la domanda forse banale ... ma su questi due protocolli in rete c'è troppa roba e mi confondo....

nessuno?

Se l'apparato ha un uscita RS422 non puoi usare un adattatore RS485 dovresti interporre da l'uscita RS422 e Arduino un adattatore, ma perché farlo?
Se ti serve portare il segnale molto lontano e hai collegato l'RS422 direttamente alla seriale hardware di Arduino (uno o mini suppongo) puoi creare una seriale software, collegarci un adattatore RS485 e fare in modo che Arduino ripeta ciò che riceve dall'apparato su questa seriale.
Se invece hai già usato una seriale software puoi crearene un altra usando la libreria AltSoftwareSerial oppure passare ad un Arduno con più porte hardware tipo questa o una mega (anche in formati miniaturizzati) che dispongono di seriali hardware aggiuntive che potrebbero essere utili allo scopo.

grazie,
io non so con che seriale esce l'apparato, so solo che con quell'adattatore, collegando solo A e B, riesco a leggerne il contenuto...
mi sembra di capire che tra 422 e 485 l'unica differenza sia full e half duplex...
dato che riesco a leggere l'output collegando solo A e B e lasciando non collegati Y e Z, mi viene da pensare che posso sostituire l'adattatore con uno rs485 che dispone solo di A e B..
io devo solo ascoltare quello che mi dice la macchina non gli devo "dire" nulla
quello che voglio fare è ricevere quello che l'apparato manda, fare dei calcoli e rinviare il risultato via wifi.
sto usando esp32

grazie

Non capisco allora l'esigenza di cambiare adattatore se quello che stai usando funziona e che con l'esp poi ritrasmettere senza problemi.

per questioni di dimensioni!!

questo è l'esp32

questo è modulo fatto apposta che mi trasforma il 12v in 5v e mi da rs485....

questi due insieme sono grandi come l'adattatore rs422 che ho, ed in piu ci devo aggiungere il trasformatore 12v to 5v per alimentare l'esp32..

Da quel che conosco io puoi usare l'adattatore 485 a patto di averlo sempre in ricezione, i livelli delle due specifiche sono uguali. Ma non ho mai fatto usa cosa del genere quindi prima di avventurarti e rischiare di danneggiare qualcosa aspetta qualcuno di più ferrato o, ancora meglio, prova a chiedere a qualche forum di elettronica generale

fabpolli:
Da quel che conosco io puoi usare l'adattatore 485 a patto di averlo sempre in ricezione, i livelli delle due specifiche sono uguali. Ma non ho mai fatto usa cosa del genere quindi prima di avventurarti e rischiare di danneggiare qualcosa aspetta qualcuno di più ferrato o, ancora meglio, prova a chiedere a qualche forum di elettronica generale

hai un forum attivo e per neofiti da consigliarmi?
grazie!!

Puoi provare su Grix.it

C'è anche Electroyou.