Buongiorno a tutti,
sto realizzando un progetto che mi richiede di inviare dei dati dal pc ad arduino (Arduino Uno) e far muovere 3 step motor (cioè 9 fili).
Collegandoli tutti mi rimane poco spazio per fare altro. Vorrei sapere se è possibile collegare uno o più arduino in modo da :
ricevere i dati tramite USB sul primo Atmega
da questo inviare dati ad un secondo Atmega che mi controlla i motori
Inviare dati al pc
Cercando in rete ho trovato diversi modi per collegare piu' arduino e farli comunicare tra di loro ma non una guida per connetterli anche al pc.
Spero che qualcuno saprà indicarmi una soluzione.
Grazie in anticipo per il vostro aiuto.
Se vuoi usarne due, la cosa più semplice è collegarli tramite I2C. O megio... non è proprio la più semplice, ma imparare ad usare il sistema I2C ti consentirà di usare una ampia categoria di componenti che fanno uso di questo protocollo.
Funziona bene solo se le due schede non sono distanti fra loro, altrimenti occorrono expander ed altre cose che fanno parte dello step "uso avanzato di i2c"
Ciao Grazie per le risposte.
Per paulus1969 avevo pensato ad altre soluzioni come un sistema di mux o shift register ma la souzione di usare due arduino mi interessa di piu' perchè potrei far fare delle operazioni avanzate ai due Atmega e poi scambiare semplicemente il risultato tramite seriale.
Hai qualche consiglio su come imparare ad usare l' I2C con arduino?
Per PaoloP si gli stepmotor hanno 4 fili ma devo comandarli tramite un driver che ha bisogno di 3 dati : Enable, Direction, Step (Piu la massa). Quindi non considerando la massa come un pin utile di arduino mi servono solo 9 pin (+1GND).
Grazie!
Ho visto la libreria Wire e mi sembra molto semplice da capire l'unica cosa che non capisco è questa :
Wire.beginTransmission(4); // transmit to device #4
Analizzando le specifiche della funzione beginTransmission(address) è specificato che :
Parameters
address: the 7-bit address of the device to transmit to
ma come faccio a sapere che l'indirizzo dell'arduino Slave sia proprio 4 ?
E se invece volessi far comunicare 3 arduino?Li metto tutti sullo stesso Bus e cambio gli indirizzi?
Rebel_88:
...
ma come faccio a sapere che l'indirizzo dell'arduino Slave sia proprio 4 ?
E se invece volessi far comunicare 3 arduino?Li metto tutti sullo stesso Bus e cambio gli indirizzi?
Nella parte slave è scritto :
Wire.begin(4); // join i2c bus with address #4
.... chiaro no ??? ... a ciascuno assegni un indirizzo univoco
Grazie mille gpb01 ! E' che avevo letto su un articolo che utilizzava dei digital pot che l'indirizzo era scritto al loro interno o comunque si poteva scegliere tra alcuni disponibili e pensavo che anche in questo caso fosse la stessa cosa.
Grazie a tutti per aver risolto il mio dubbio siete stati formidabili.
Spesso l'indirizzo delle periferiche I2C è scritto in hardware e non è possibile modificarlo. In altri invece è possibile selezionare un indirizzo a scelta tra alcuni preimpostati saldando determinati pin, in altri ancora è possibile registrare su una memoria interna al device il suo indirizzo I2C.
Su un micro che funge da slave puoi scegliere di assegnarli un qualunque indirizzo del range scrivendolo nel suo firmware (sketch, nel caso di Arduino).
Su wiki inglese parla di qualche metro.
Il problema principale è che la capacitanza totale del bus non deve superare i 400pF. (periferiche + fili)
Sto guardando il datasheet con le specifiche per capirne un po' di più. (http://www.nxp.com/documents/user_manual/UM10204.pdf)
Qui (http://www.nxp.com/documents/application_note/AN10216.pdf) alla slide 68 parla di capacitanza dei fili di 80pF/m.
Quindi per un limite di 400pF si ha un massimo di 5 metri teorici, perchè va sottratta anche la capacitanza dovuta ai device collegati.