Comunicazione tra 2 Arduino via Eprom

Ciao ragazzi, è da un pò che non postavo qualche cosa, ma altri impegni mi hanno distolto per un po' dall'arduino. :~
Comunque eccomi con una domandina...
Ho la necessità di far parlare un arduino mega con una Yun, perchè sulla yun vorrei fare una web interface di un certo tipo che mi possa permettere di monitorare e fare da data entry dei parametri per un programma complesso che gira sul mega.
Il problema si pone nel far palare le due schede e quindi far transitare una serie di dati da una all' altra.
Ad es. quando modifico una serie di parametri dall' interfaccia della yun e li devo passare al software della mega e viceversa, quando il software della mega mi rileva dei dati e li deve portare nell' interfaccia web della yun per il monitoraggio via web.
Inizialmente avevo pensato che via i2c era la cosa ottima, ma ho notato con delle prove che questa non mi reggeva una quantità simile di dati passati in un solo colpo (si parla di una stringa di un centinaio di byte) e la gestione a livello di codice diventava un po' pesante.
Così ora ho pensato ad un altra soluzione, e da quì la domanda che vi vorrei porre.
Pensavo di far transitare i dati tramite una eprom i2c che metto nel mezzo, in modo che sia una scheda che l' altra possa leggere.
In questo modo deposito i dati da una scheda e li leggo dall' altra. mega-----eprom----yun collegate le 3 via i2c.
Secondo voi si può fare ?

Grazie

Non conosco una implementazione della I2C su Arduino che permetta la coesistenza di 2 master sullo stesso Bus I2C. Inoltre la memorizzazione di dati su una EEPROM é lentissima. da 5 a 10 mS per ogni scrittura. a secondo di modello di EEPROM possono essere memorizzato piú bvte alla volta (PAGE Write).

Ciao Uwe

Grazie Uwe, hai qualche consiglio su come fare questa comunicazione tra le due board ? Se anche con la eprom è problematico..
Via seriale ? Via ISP ?

Potresti usare una SRAM e depositare i dati lì sopra, le SRAM hanno tempi di scrittura enormemente inferiori rispetto alle EEPROM (ns contro ms).
Però dovresti scriverti i programmi lato Mega e lato Yun per gestire l'accesso alternato alla memoria, onde evitare che la Yun ad esempio tenti di leggere mentre la Mega sta ancora scrivendo. Devi cioè creare un piccolo protocollo in cui scambi un segnale di "dati disponibili" che la Mega invia alla Yun per informarla che ha terminato l'accesso alla SRAM e che quindi può accederci lei.

Un'alternativa è scomporre il pacchetto di dati da spedire in blocchi di dimensioni più contenute, esempio 16/32 byte, e spedire i dati a blocchi dalla Mega alla Yun e ricostruire i dati lato Yun, magari lato Linux della Yun, dove avresti maggiori risorse per poter scrivere un programma capace di fare l'operazione, così da usare l'Atmega32U4 solo come "reindizzatore" per passare i dati in arrivo dalla Mega al programma Linux.

Ma via seriale????

La sram mi sembra interessante e potrei usare il sistema del semaforo per gestire la contemporaneità dell' accesso.

Un'alternativa è scomporre il pacchetto di dati da spedire in blocchi di dimensioni più contenute

Ma come mezzo trasmissivo cosa useresti ? I2C ? Perchè dopo tutta una serie di prove, in cui mi ero anche creato un protocollo mio, l' i2c risultava difficoltoso da gestire, anche perchè dopo n byte spedite, iniziava ad avere dei problemi.
Direttamente su Linux come lo intendi ? Perchè a me risulta che se lavoro via seriale o via i2c comunque devo passare dalla parte atmel dell yun. Che tra l' altro tra la parte linux e atmel nella yun la trasmissione è via seriale.

Intanto grazie

Le SRAM seriali o le accedi via SPI o via I2C, con l’Arduino non hai molta scelta.
Puoi anche fare un circuito con le RAM parallele come feci a suo tempo:

ma credo che ti si complichi un pò tutto :stuck_out_tongue_closed_eyes:

PS:
i chip EEPROM esistono anche dual port, non so se anche le SRAM esistono dual port. Se ci sono, hai risolto i problemi di sovrapposizione di accesso

Per questa eerom seriale dual port:

CAT24C208

Se non ti piace cerca in google "dual port serial eerom"

Per le SRAM dual-port ... provate a guardare QUI ... magari qualche cosa utile si trova ... :roll_eyes:

Guglielmo

C'è un solo chip in formato DIP e neanche più in produzione :sweat_smile:

Secondo me la maniera più semplice sarebbe attraverso la porta seriale
dp_1

leo72:
C'è un solo chip in formato DIP e neanche più in produzione :sweat_smile:

Zoccolo adattatore e passa la paura ... :grin:

Guglielmo

@guglielmo:
Poi il gioco non vale la candela, se tutto questo deve servire solo come buffer di scambio per i dati, allora conviene adottare la soluzione della spedizione dei dati in blocchi. :wink:

@dp_1:
considerato che la Mega ha 4 seriali e l'Atmega32U4 della Yun ne ha 2, se l'amico non ne usa alcuna su nessuna delle due schede, forse davvero conviene lo scambio dati via seriale.

Chiaro, la via seriale si potrebbe essere la via.. però questo comporta un onere in più per la creazione di un protocollo.
Invece, per come la penso io e magari è sbagliato, la scrittura e lettura su sram o eeprom potrebbe essere più semplice da un punto di vista logico. Scrivo o leggo il tal dato o parametro in quelle posizioni e sono sicuro che faccio riferimento a quel parametro o dato.
Mentre con un protocollo dovrei gestirmi tutta la parte di lettura e scrittura con dei codici associativi che mi permettano di sapere di che dati o parametri sto leggendo o scrivendo.
Magari adesso cerco di approfondire le dual port, e vediamo, magari nello stesso tempo rifletto ancora sulla seriale.
se qualcuno ha altre idee, ben vengano ! :slight_smile:
Grazie

Scrivere un protocollo mi sembra un po’ esagerato! :smiley:
Secondo me basta usare una notazione xml like…

Per esempio uno dei due arduino potrebbe inviare il seguente stream
LOWHIGH……

l’arduino ricevente deve semplicemente fare un parsing ed estrarre i valori dei pin.

Cosi non devi gestire la concorrenza alla risorsa che secondo me è più gravoso.

Ogni quanto tempo verranno cambiati questi parametri ? Ovvero quante sono le scritture / giorno ?