Collegare 2 MEGA2560 o una MEGA2560 con una MAX32

Salve a tutti,
nel mio progetto utilizzo una MEGA2560 alla quale sono collegati vari dispositivi tra cui giroscopio, sensori di forza, laser LIDAR-lite, servomotori.

Il codice che gestisce il mio robot quindi sta diventando sempre piu' lungo (e quindi sempre piu' lento).

Ultima codice aggiunto è stato quello relativo ad una scansione con laser che riempe un array di 600 misurazioni di distanza.
Praticamente 60 colonne * 10 righe e il mio robot ottiene un'immagine di 600 "pixels" di circa 60°laterali per 55° verticali.
Davvero ottimo risultato nei test! ma purtroppo c'e' appunto il problema che il mio codice diventa sempre piu'pesante nonostante le mie disperate ottimizzazioni.

E qui ecco la mia domanda:
Siccome possiedo anche una Chipkit Max32 (molto compatibile con le caratteristiche della MEGA), potrei collegare in qualche modo quest'ultima alla MEGA? (oppure collegarla ad un'altra MEGA)

A quel punto nella Max32 girerebbe il codice della scansione laser (compresa la gestione e memorizzazione delle 600 misurazioni) mentre nella MEGA tutto il resto del codice.

So che è possibile qualcosa del genere ma mi servirebbe sapere come collegare le due schede e come farle comunicare!

Grazie in anticipo a tutti!

aldoz:
So che è possibile qualcosa del genere ma mi servirebbe sapere come collegare le due schede e come farle comunicare!

Come collegare: ad esempio con le porte seriali (verificare che le tensioni siano compatibili).

Come comunicare: non sono le schede a comunicare, ma i programmi, quindi dovrai implementare un protocollo di comunicazione in base alle tue necessità all'interno dei programmi che gireranno sulle schede.

Claudio_FF:
Come collegare: ad esempio con le porte seriali (verificare che le tensioni siano compatibili).

Come comunicare: non sono le schede a comunicare, ma i programmi, quindi dovrai implementare un protocollo di comunicazione in base alle tue necessità all'interno dei programmi che gireranno sulle schede.

molto bene, grazie! questo è un inizio.
esiste qualche protocollo di comunicazione gia' implementato magari in qualche libreria?

poi, il collegamento avverra' sia in TX che in RX?

aldoz:
molto bene, grazie! questo è un inizio.

Poi va valutata la latenza, cioè quanti dati e ogni quanto tempo si possono scambiare/gestire.

esiste qualche protocollo di comunicazione gia' implementato magari in qualche libreria?

Ne esistono diversi, ma specifici come il modbus che potrebbero essere troppo pesanti o inadatti all'applicazione in questione. Se ti basta scambiare avanti e indietro array di byte non serve andare a cercare librerie (che poi vanno usate esattamente nei limiti previsti da chi le ha scritte, limiti che potrebbero appunto essere incompatibili con quello che ti serve).

poi, il collegamento avverra' sia in TX che in RX?

L'hardware delle seriali è bidirezionale, per cui se il pin TX di una va sul pin RX dell'altra (e viceversa) e il programma prevede sia di ricevere che di trasmettere, allora i programmi si parlano tra loro. Il come è tramite le funzioni della libreria standard.

Grazie Claudio!
E cosa ne pensi della comunicazione l2c al posto di quella seriale TX RX?
E' corretto dire che la comunicazione l2c sia più rapida e meno problematica?

puoi dirmi qualcosa a riguardo?

Si dovrebbe partire dal dialogo, quanti dati, ogni quanto, se va bene che una delle due unità sia solo master e l'altra solo slave, se ci sono vincoli temporali sulle risposte ecc.

Per la velocità tra i2c a 100kb/s e seriale a 115kb/s direi che non cambia nulla.
L' i2c è intrinsecamente master/slave e risolve in hardware la sincronizzazione.
Non ricordo se ci sono differenze nella dimensione dei buffer.
La ricezione nell'i2c slave funziona tramite funzioni callback mentre per la seriale credo si possa usare solo il polling software (attendo smentite) e a seconda di cosa si deve fare, leggi vincoli temporali, è meglio l'una o l'altra soluzione.
La seriale la prolunghi per metri, l'i2c meglio restare sotto pochissime decine di cm.
Alcuni regolatori di giri per motori di droni sono in rete i2c.

Ma il problema iniziale rimane stabilire cosa devono dirsi le unità.

Claudio_FF:
Si dovrebbe partire dal dialogo, quanti dati, ogni quanto, se va bene che una delle due unità sia solo master e l'altra solo slave, se ci sono vincoli temporali sulle risposte ecc.

Per la velocità tra i2c a 100kb/s e seriale a 115kb/s direi che non cambia nulla.
L' i2c è intrinsecamente master/slave e risolve in hardware la sincronizzazione.
Non ricordo se ci sono differenze nella dimensione dei buffer.
La ricezione nell'i2c slave funziona tramite funzioni callback mentre per la seriale credo si possa usare solo il polling software (attendo smentite) e a seconda di cosa si deve fare, leggi vincoli temporali, è meglio l'una o l'altra soluzione.
La seriale la prolunghi per metri, l'i2c meglio restare sotto pochissime decine di cm.
Alcuni regolatori di giri per motori di droni sono in rete i2c.

Ma il problema iniziale rimane stabilire cosa devono dirsi le unità.

Allora, l'arduino numero 2 deve fare la scansione laser e creare 600 celle; fare qualche calcolo e mandare diciamo una ventina di valori alla prima arduino.

l'arduino numero 2 fara' continuamente questi calcoli e diciamo ogni 2/3 secondi mandera' questi 20 valori alla prima arduino.

Attualmente utilizzo Processing come monitor seriale e vorrei poterlo fare anche con le due arduino unite.. questo dovrebbe spingermi all'utilizzo di l2c?

Che dici?

aldoz:
l'arduino numero 2 fara' continuamente questi calcoli e diciamo ogni 2/3 secondi mandera' questi 20 valori alla prima arduino.

Allora è davvero un traffico dati irrisorio. ArduinoMega ha quattro seriali hardware, di cui una usata per l'USB (monitor seriale) e tre libere direttamente collegabili all'altro Mega (potrebbero esserci tre trasmissioni contemporanee). Personalmente non scomoderei l'i2c, ma bisogna anche vedere cosa deve fare nel frattempo il programma dell'Arduino1 e se può permettersi di controllare periodicamente (ad esempio ogni qualche dieci millisecondi) se sono arrivati dati.

Claudio_FF:
Allora è davvero un traffico dati irrisorio. ArduinoMega ha quattro seriali hardware, di cui una usata per l'USB (monitor seriale) e tre libere direttamente collegabili all'altro Mega (potrebbero esserci tre trasmissioni contemporanee). Personalmente non scomoderei l'i2c, ma bisogna anche vedere cosa deve fare nel frattempo il programma dell'Arduino1 e se può permettersi di controllare periodicamente (ad esempio ogni qualche dieci millisecondi) se sono arrivati dati.

Grazie 1000 Claudio! diciamo che ora ho le idee molto piu' chiare.
Ho anche trovato questo tutorial :

molto interessante!
Per ora grazie davvero! domani faro' un primo test!