Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Arduino mega e comunicazione RS485, ma non comunica.....

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[11] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto UtenteJocman » 15 mar 2023, 11:32

Inizio con un po' di risposte.

@MarcoD
Nel Nano, se non erro, i pin I/O vengono individuati come D2-D13 e A0-A7, giusto?
Nello schema avevo indicato solo ad esempio cosa vorrei collegare (uno switch - D2 -, un led - D3 - , un potenziometro - A7 - e così via

Ho una Mega che mi funge da Master. Gli Slave hanno tutti un proprio indirizzo distinto.
La verifica con oscilloscopio proprio no (non rientra nella mia "strumentazione"), però potrei ingegnare qcs con i l led e la resistenza (dovrei metterlo in parallelo / serie con DE?)

@WALTERmwp
Come detto poc'anzi, ho una mega che mi fa da master, e che ritengo faccia quello che mi aspetto, perché se collego un solo slave tutto funziona come mi aspetto. Del resto l'interfaccia RS485 usata è dello stesso tipo.
Ai connettori RJ45 collego degli spezzoni di cavi di rete cablati da me (e verificati con il tester apposito), con tutti e 8 i cavi connessi.
Resistenze di terminazione: so che ci vanno messe, ma se non ho letto male usando i MAX487, oltre a non avere il problema della distanza (non che io lo debba avere, il tutto non andrebbe olter una distanza di 5-6 mt) non c'era più bisogno delle resistenze di terminazione
Come detto sopra, ogni slave ha un suo indirizzo univoco.
Il sistema non sarà a stella, ma lineare, le due prese RJ45 sulla stessa interfaccia mi dovrebbero servire proprio a quello: il cavo entra da una presa ed esce dall'altra verso l'interfaccia seguente.
In mezzo vorrei metterci dei nodi, ma se al momento gia la seconda slave in linea non va, al nodo neanche ci arriverei....
FIli della 485 twistati: ecco questo magari potrebbe essere una cosa che non ho considerato e che devo verificare


@ThEnGi
No, non sto usando quei modulini. Ne avevo comprato un certo quantitaivo inizialmente, poi per la questione distanza/resistenze di terminazione li avevo accantonati (mai neanche usati) per vedere di fare una interfaccia apposita. Fuori specifica? andrebbero modificati?

WALTERmwp ha scritto:comunque considera le critiche con un approccio costruttivo.


Da parte mia mi auguro sempre che le critiche siano costruttive.
Io personalmente quelle volte che mi permetto di rispondere su qualche forum le evito a priori: non conosci chi c'è dall'altra parte, non sai come ragiona e come si pone davanti ad una...critica (per quanto costruttiva possa essere).
Permettemi una considerazione però (e non voglio essere assolutamente critico né offensivo, anzi ho sempre e solo da ringraziare per il tempo che "perdete" con me).
Personalmente, non sono (in questo caso specifico) né un ingegnere elettronico né un elettrotecnico. Provengo da studi classici e (pare) una laurea in campo chimico.
Come molti, potrei limitarmi a "vivere" (ad es c'è un mio carissimo amico - per cui darei pure il c.... - che nonostante 2 lauree e un master non è capace - e non scherzo - di cambiare una lampadina)
Tuttavia prima di "disturbare" qualcuno su un forum cerco di uscirne da me (internet è una grande cosa); se proprio non ci riesco l'unica soluzione che ho è chiedere a chi ne sa.
Poi, se non possiedo la terminologia tecnica, se uso il termine "protocollo" (che tra l'altro ho visto utilizzare nei forum esteri) invece che "interfaccia", ma riesco a far capire cosa intendo, credo che si possa transigere un po'.... Non so quali informazioni dare a chi è "del mestiere"; so cosa serve nel mio campo e mi limito a chiederle (senza farlo pesare) a chi deve interfacciarsi con me nel mio lavoro.
Avrei tanto da scrivere per esternare il mio punto di vista, ma già sono troppo OT, né voglio annoiare nessuno, né rischiare di essere frainteso.

Detto questo, vorrei cercare di risolvere questo problema, semmai (mi) fosse possibile
Avatar utente
Foto UtenteJocman
25 3
New entry
New entry
 
Messaggi: 89
Iscritto il: 17 lug 2019, 16:55
Località: Parma

0
voti

[12] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto UtenteWALTERmwp » 15 mar 2023, 12:47

Jocman ha scritto:(...) Detto questo, vorrei cercare di risolvere questo problema, semmai (mi) fosse possibile
non c'è nessun problema nel chiedere e non è assolutamente rilevante il livello di preparazione di chi si rivolge sul forum, se non per stabilire il modo con il quale relazionarsi; chi ti risponde prova a darti una mano, i limiti, a parte i tuoi e che tutti abbiamo, stanno nelle informazioni che fornisci.

Manca un codice da analizzare(ma stimiamolo pure funzionante) e con pochi elementi incompleti è difficile risolvere la questione se non è possibile indirizzare una diagnostica e una indagine.

Non ci aiutano ad aiutarti le tue descrizioni perché tutto resta aleatorio; visto che lo hai fatto, completa almeno lo schema di prima con un Master e uno Slave e relativi device(i 487) di interfaccia, specificando i pin e le connessioni sugli RJ45 perché al momento si vede solo un Nano, cioè uno slave.

Tu riscrivi che con un Master e uno Slave funziona, ma quale sia effettivamente il comportamento non lo sappiamo; affermi che aggiungendo uno Slave(dunque un Master con due Slave) continua a funzionarne uno solo.

Allora, proviamo a fissare in modo inequivocabile dei riferimenti:
i) Il Master quanti Slave interroga, qual è il range degli indirizzi?
ii) Tramite il Master, sei in grado di capire quale è l'indirizzo dello Slave che risponde?
iii) Altrimenti(oppure), nella condizione di funzionamento lo Slave quale indirizzo ha?
iv) Lo Slave che provi ad aggiungere successivamente, quale indirizzo ha?
v) Quando aggiungi uno Slave, qual è quello che risponde al Master?
vi) Sei certo sia sempre lo stesso che risponde?
vii) Quando hai due Slave e inverti le loro posizioni sulla linea 485, funziona quello che prima non rispondeva e viceversa?
viii) Quando inverti le posizioni, sposti anche gli integrati di interfaccia o solo i moduli Arduino?

Saluti

p.s.
non so se lo hai già considerato ma le eventuali variazioni al sistema andrebbero introdotte prima una alla volta e a partire dalla medesima situazione, compatibilmente con la prova che andresti a fare.
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8989
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[13] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto UtenteMarcoD » 15 mar 2023, 15:10

Il LED lo inserirei come da schema.
Potresti non vederlo acceso, se si accende per poco troppo poco tempo < 10 ms;
dipende da cosa risponde lo slave.
Potresti abbassare la velocità a 1200 baud, non so quanto è adesso.
Non mi è chiaro a cosa serve la R 10kohm, secondo me è inutile se D2 del nano è una uscita.

Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[14] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto UtenteMarcoD » 15 mar 2023, 15:36

Per capire come funziona il bus RS485, non serve arduino, ma, per ogni nodo, un circuito come segue:

Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[15] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto Utenteluxinterior » 15 mar 2023, 16:20

Non mi è chiaro a cosa serve la R 10kohm, secondo me è inutile se D2 del nano è una uscita.

Io non la toglierei, quando il nano si trova nel "mondo di mezzo" (accensione reset ecc..) fissa il segnale che poi diventa di competenza del nanetto

Jocman di consigli e di idee ne hanno già date parecchie aspettiamo l'esito delle tue prove
Avatar utente
Foto Utenteluxinterior
4.311 3 4 9
Master EY
Master EY
 
Messaggi: 2690
Iscritto il: 6 gen 2016, 17:48

0
voti

[16] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto UtenteJocman » 16 mar 2023, 12:00

WALTERmwp ha scritto:Allora, proviamo a fissare in modo inequivocabile dei riferimenti:


i) Al momento ho allestito solo 3 slave: 1 è il mega che dava problemi (e che per ora ho accantonato), e 2 nano. Il range di indirizzi va da 1 a 126, ma, almeno fino ad ora, ho previsto 20 slave (o almeno tanti sono gli sketch arduino che ho abbozzato) con indirizzi da 1 a 20

ii) Purtroppo no; al momento materialmente ho solo 2 nano approntati nei pannelli e collegati agli switch, quindi se vedo che lo switch collegato a quel determinato nano risponde, ne deduco che quell'indirizzo che gli ho dato sta rispondendo. Tra l'altro ho notato fortuitamente che l'interfaccia software (quella indicata come SOCAT nel diagramma) se usata singolarmente (cioè senza il sim caricato) ad ogni azione (switch attivato, etc) mi riporta la relativa istruzione software che viene richiamata, quindi è molto più immediato come controllo

iii e iv) gli ho dato 2 indirizzi molto lontani (per prova) cioè 19 e 86

v) fino a 2 giorni fa (ultimo test materiale che ho fatto) indipendentemente dall'indirizzo, mi rispondeva quello fisicamente collegato direttamente alla master

vi) si, li avevo invertiti di posizione più volte (poiché sono fissi sul pannello, fisicamente staccavo i cavi dalle RJ45 e li ricollocavo)

vii) si

viii) ogni nano è montato direttamente sull'interfaccia, quindi ognuno rimane accoppiato al suo chip MAX487

Comunque, a parte questi 2 giorni che sto incasinato tra lavoro e mugliera, nel we penso che smantellerò fisicamente i pannelli e testo le interfacce a banco come avevo fatto all'inizio (le ho testate singolarmente e poi montate sui pannelli per provarle in cascata)

Ho aggiornato lo schema come mi era stato richiesto (spero). Sul Master, anche se ho indicato 3 chip MAX487, fisicamente ne ho installato, per ora, solo 1.

Vi aggiornerò

Ho verificato anche dove connetto i segnali A e B dell'RS485 nelle prese RJ45, e non corrispondono ad un cavo twistato (ad esempio uno fa capo al 'Arancio, l'altro al Verde). Come indicato in schema

E grazie comunque per il vostro tempo

Avatar utente
Foto UtenteJocman
25 3
New entry
New entry
 
Messaggi: 89
Iscritto il: 17 lug 2019, 16:55
Località: Parma

0
voti

[17] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto UtenteJocman » 20 mar 2023, 12:55

Visti i presupposti dei giorni scorsi, nel we ho deciso per una soluzione più radicale.
Non potendo verificare, cambiandoli, se i chip MAX487 fossero difettosi (sono saldati direttamente su doppia faccia - all'epoca non avevo lo zoccolo) e con il dubbio che magari i nano (a furia di prove, collegamenti/scollegamenti, leva e metti dall'interfaccia, etc) ne avessero in qualche modo risentito, ho disassemblato completamente i 2 pannelli con gli switch; ho preso altri 2 PCB di interfaccia e le ho rifatte da zero; poi ho preso due nano nuovi e ricaricato i relativi sketch.
Alla fine ho riassemblato tutto a banco e provato collegando alla master solo la prima interfaccia (con il suo nano montato sopra) e verificato che comunicasse con la master; poi ho collegato alla master solo la seconda interfaccia (con il suo nano montato sopra) e verificato che comunicasse anche lei; poi alla fine le ho messe in cascata, ed entrambe questa volta comunicavano correttamente. Ho provato a costruire una terza interfaccia con un terzo nano e uno sketch al volo con due soli switch e un paio di led da gestire (un test di accensione all'avvio), messa in cascata alle altre 2 e ha comunicato correttamente.
Quindi a questo punto devo dedurre che tutto il problema era a livello hardware delle sole slave, perché a livello software non ho cambiato nulla, neanche a livello della master (hdwr e sftwr).

E' probabile che essendo le uniche due interfacce che avevo realizzato fino ad ora, e che avevano subito diversi maneggi (tra collegamenti, scollegamenti, test software etc) anche se sempre solo in singolo (cioè collegavo una sola interfaccia per volta alla master per testare vari componenti - switch, display, led, etc) in qualche modo le abbia danneggiate (interfacce e/o i nano)?

Comunque, visto che rifatte ex novo sembrano comunicare correttamente, ho provato a collegare in cascata anche la slave basata su mega (cioè il motivo per il quale avevo iniziato il post). Maneggi non ne mai subiti, in quanto fin dall'inizio l'ho programmata e collegata unicamente al pannello cui è destinata (sono 25 pulsanti e 15 led - più un display che al momento non esiste ancora).
Eppure non funzionava.
Lo sketch della mega prevede all'avvio un test dei led, niente di che, li accende in sequenza un paio di volte. Eppure i led non si accendono né i pulsanti rispondono.
Non so perché mi sia venuto in mente di farlo, ma ho provato (con le interfacce collegate a catena e alimentate - e quelle basate su nano comunicanti correttamente) a staccare i cavetti collegati a TX1/RX1 della mega e ricollegarle a TX0/RX0: i led si sono accesi per il loro test e la scheda ha iniziato a comunicare.
Ho tolto l'alimentazione a tutto il sistema e riacceso: la slave nano con i led ha fatto regolarmente il test dei led, e le 3 interfacce con i nano comunicavano regolarmente. La mega niente (nessun test dei led nessuna comunicazione); come prima (sempre con il sistema alimentato) ho staccato i cavetti da TX0/RX0 e li ho ricollegati a TX1/RX1 e la scheda è partita (test led e comunicazione regolare). Ho rifatto questa cosa per un paio di volte (passando da un TX/RX all'altro) ed il comportamente della mega è rimasto sempre lo stesso: quando alimento il sistema, non da segni di vita, se scollego e ricollego TX/RX (anche gli stessi pin, non è necessario cambiarli) parte e funziona regolarmente.
Ora, se volessi bypassare il problema, collegherei uno switch a due vie ai due cavetti TX/RX e una volta avviato il sistema lo attiverei, ma mi sembra poco ortodosso fare una cosa simile......
Avatar utente
Foto UtenteJocman
25 3
New entry
New entry
 
Messaggi: 89
Iscritto il: 17 lug 2019, 16:55
Località: Parma

0
voti

[18] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto UtenteThEnGi » 20 mar 2023, 13:01

1)Passi da un problema al altro, io fatico a seguirti
2)Estremamente prolisso con poche informazioni
3)Quando vedremo un codice ?
4)Un solo Arduino Mega collegato a 3 interfacce RS485 ? Che senso ha ?

Cosa significa:
"se scollego e ricollego TX/RX parte e funziona regolarmente"

Cambi interfaccia seriale ?

O_/
Avatar utente
Foto UtenteThEnGi
2.230 3 6 9
Expert EY
Expert EY
 
Messaggi: 2228
Iscritto il: 6 ott 2022, 18:43

0
voti

[19] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto UtenteJocman » 20 mar 2023, 17:28

Premetto (perdonatemi) che la mia risposta non vuole essere né sarcastica né stizzita. Non ne ho motivo, tutt'altro... Ma quando si scrive non si vede l'espressione del viso ed è facile fraintendersi

1) Scusami ma non capisco io adesso. Non passo da un problema ad un altro. Il problema fin dall'inizio è sempre lo stesso: degli arduino che non comunicano a cascata (o in serie come dir si deve) via RS485

2)Prolissità... Ho descritto cosa ho fatto nel trattare il problema, tutti i vari passi che ho fatto, cercando di non omettere nulla. Forse avrei dovuto scrivere più telegraficamente: "ho smantellato tutto, buttato interfacce e arduini vecchi, ricostruito e collegato tutto. Funziona."

3)Codice....Continuo a pensare che non sia un problema software (tant'è che con gli stessi sketch caricati il tutto sembra funzionare), ma visto che, eccoli qui:

MASTER
Codice: Seleziona tutto
/*
  Tell DCS-BIOS this is a RS-485 Master.
  You will need to flash this to a Mega 2560.
*/
#define DCSBIOS_RS485_MASTER

/*
  Define where the TX_ENABLE signals are connected.
  You can connect up to three half-duplex RS-485 transceivers.
 
  Arduino Pin             RS-485 Transceiver Pin
  TXn ------------------- DI (driver input)
  RXn ------------------- RO (Receiver Output)
  UARTn_TXENABLE_PIN ---- /RE, DE (active low receiver enable, driver enable)
 
  If you have less than three transceivers connected, comment out the corresponding
  #define UARTn_TEXENABLE_PIN lines for receivers that are not present.
*/
#define UART1_TXENABLE_PIN 2
//#define UART2_TXENABLE_PIN 3
//#define UART3_TXENABLE_PIN 4

#include "DcsBios.h"

void setup() {
  DcsBios::setup();
}

void loop() {
  DcsBios::loop();
}


SLAVE (basta un solo skecth a titolo di esempio o servono tutti? (Al momento sono circa 23) - questo è uno dei due che sta funzionando

Codice: Seleziona tutto
/*
  The following #define tells DCS-BIOS that this is a RS-485 slave device.
  It also sets the address of this slave device. The slave address should be
  between 1 and 126 and must be unique among all devices on the same bus.
*/
#define DCSBIOS_RS485_SLAVE 19   

/*
  The Arduino pin that is connected to the
  /RE and DE pins on the RS-485 transceiver.
*/
#define TXENABLE_PIN 2   

#include "DcsBios.h"

//=================================================================================================================
//PANN 24 - PVI800 MODE PWR PANEL
//=================================================================================================================
//Multiswitch
const byte pviModesPins[7] = {3, 4, 5, 6, 7, 8, 9};
DcsBios::SwitchMultiPos pviModes("PVI_MODES", pviModesPins, 7);

//INU UPDATE
DcsBios::Switch2Pos pviInuFix("PVI_INU_FIX", 10);

//DATALINK ON OFF
DcsBios::Switch2Pos pviPower("PVI_POWER", 11);

//BRIGHTNESS
DcsBios::Potentiometer pviBrightness("PVI_BRIGHTNESS", A7);    //ANALOGICO


void setup() {

  DcsBios::setup();
}

void loop() {
  DcsBios::loop();
}


Non ho modo di interloquire a riguardo perché non è farina del mio sacco (non ne sarei neanche capace.....)


4) In che senso "Che senso ha?" Ho una mega che mi funge da master ed è collegata al PC. A questa vanno collegate in serie tutte le altre schede, che fino ad ora sono (per come pianificato) 3 Mega e 23 Nano, ognuna con la sua interfaccia, che devono comunicare con il PC. Non capisco la tua perplessità... Che ce ne sia collegata solo 1 (cosa che veramente non avrebbe senso, la collegherei direttamente via USB) o 126 (cioè a quanto ho capito il massimo gestibile) quale è la cosa insensata?
Mi viene da pensare che non ho capito nulla di come sia composta una linea di comunicazione RS485 e di come si realizzi; che ci può anche stare, non sono uno scienziato....

ThEnGi ha scritto:Cosa significa:
"se scollego e ricollego TX/RX parte e funziona regolarmente"

Cambi interfaccia seriale ?

O_/


Beh, considerando che un Mega ha 4 coppie di pin TX/RX (da 0 a 3) ho provato sia a passare dalla coppia 0 alla coppia 1 e viceversa, sia a rimanare sulla stessa scollegando e collegando i cavetti (a rischio di essere prolisso: i due cavetti con connettore dupont infilati in TX0/RX0: li tolgo e ce li rimetto)
Avatar utente
Foto UtenteJocman
25 3
New entry
New entry
 
Messaggi: 89
Iscritto il: 17 lug 2019, 16:55
Località: Parma

0
voti

[20] Re: Arduino mega e comunicazione RS485, ma non comunica.....

Messaggioda Foto Utenteluxinterior » 20 mar 2023, 19:46

Giuro ho letto tutto
collegherei uno switch a due vie ai due cavetti TX/RX e una volta avviato il sistema lo attiverei, ma mi sembra poco ortodosso fare una cosa simile

Non è poco ortodosso è blasfemia pura.

Riassumendo: rifatto il circuito funziona. Le cose non si aggiustano da sole (ahimè) Sospetto che cablaggi e montaggio in genere non sia fatto a regola d'arte. ( Non voglio fare il sermone vedessi cosa faccio io nelle mie stanze...) Forse il problema principale sei tu, lavora con calma cura i dettagli prendi una configurazione e se non funziona cerca di analizzare il problema e scoprire la causa del malfunzionamento. Cambaire ogni 3x2 allung ai tempi non li riduce. (Vedi cosa ha detto WALTERmwp più in alto)

Sulla 485 le tue schede hanno tutte le resistenze pullup/pulldn?
Riguardo l'ultimo problema a me viene un dubbio: quando colleghi la 485, attraverso le resistenze una tensione (stupida) inizia a vagare sulla linea di alimentazione della tua scheda arduino mega. Tu accendi il mega ma lui è già "andato a rane". Stacchi e attacchi la 485 e il tutto si riprende. Vai a controllare il pin di reset del tuo arduino mega vedi che tensioni trovi. Quando non parte attiva manualmente il reset e vedi se funziona

Solo una cortesia quando intervieni non mettere insieeme tutto quello che hai fatto descrivi il problema in modo chiaro e parliamo di quello poi si passa oltre. Estrapolare le cose dai tuoi interventi non è sempre facile
Avatar utente
Foto Utenteluxinterior
4.311 3 4 9
Master EY
Master EY
 
Messaggi: 2690
Iscritto il: 6 gen 2016, 17:48

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti