[AIUTO] Collegamento di due arduino

ciao a tutti..sto realizzando un robottino per un progetto di scuola ( devo consegnarlo tra una settimana) per vari motivi devo utilizzare due schede arduino (un arduino DUE e un arduino UNO REV 3)

devo collegare un uscita impostata OUTPUT dell'arduino DUE come ingresso dell'arduino UNO. quando arduino 2 la setta in HIGH, arduino UNO la deve riconoscere...eseguendo cos'ì quando scritto nel programma....

il problema è questo: ho provato a collegarli direttamente ma non funziona.....ho provato con il classico pull up che si utilizza per gli ingressi ma niente.....come si può collegare????

grazie in anticipo :P

Da Arduino DUE verso la UNO si può collegare direttamente, e i 3,3V della DUE dovrebbero essere riconosciuti correttamente come positivo, HIGH.

Hai dichiarato correttamente i piedini? Quando è LOW cosa deve fare?

praticamente arduino due gestisce un sensore ad ultrasuoni con relativo cicalino (come il sensore di parcheggio delle macchine) superata una distanza limite, mi dovrebbe settare una uscita HIGH che, collegata all'arduino UNO che gestisce la macchinina vera e propia, smette di andare in retro

Prova a lavorare di logica negativa, ovvero l'aggeggio funziona con un LOW. La logica negativa è quasi sempre da preferirsi.

Arduino DUE spara fuori un LOW, e la UNO legge il LOW e fa quello che deve fare. Potrebbe essere che la UNO rimane sempre a HIGH e non vede mai un cambio di stato per casini cjhe hai fatto con Pullup ed eventuali varie.

Spero tu abbia capito.

Da Arduino DUE verso la UNO si può collegare direttamente, e i 3,3V della DUE dovrebbero essere riconosciuti correttamente come positivo, HIGH.

E quando i pin di I/O sia nella DUE che nelle UNO sono alti (+5 e +3.3V), non c'è il pericolo che transiti una corrente nel pin della DUE?

konfa96: .... il problema è questo: ho provato a collegarli direttamente ma non funziona.....

Hai messo la massa in comune?

cyberhs:

Da Arduino DUE verso la UNO si può collegare direttamente, e i 3,3V della DUE dovrebbero essere riconosciuti correttamente come positivo, HIGH.

E quando i pin di I/O sia nella DUE che nelle UNO sono alti (+5 e +3.3V), non c'è il pericolo che transiti una corrente nel pin della DUE?

Dici attraverso le resistenze di pull-up della UNO? Ci sarebbe di mezzo cmq una resistenza da circa 10k, e non i 5v diretti.

Cmq è una cosa di uso comune il non mettere adattatori di livello tra una USCITA a 3,3V e un INGRESSO a 5V, quindi non vedo problemi.

Scusa Babbuino, ma non credo che sia così.

In allegato lo schema equivalente di un pin I/O di Arduino (ATmega328).

Il resistore di pullup Rpu (20k) viene inserito da software, mentre è la logica che fornisce i livelli di tensione High e Low.

E non potrebbe essere diversamente: come potrebbe fornire la corrente max di 40mA attraverso un resistore da 20k?

Quindi con il pin di UNO High (output) e un pin di DUE (input) cosa succede?

Pin.jpg

Eh, mi sa che non ci siamo capiti.

Dalla DUE versus la UNO: si può fare

Dalla UNO versus la DUE: NON si può fare

Cioè, se dichiari un Pin sulla DUE come OUTPUT, lo puoi collegare ad un INPUT della UNO. I 3,3V di uscita della DUE verranno cmq visti come un HIGH dalla UNO.

Il contrario non si può fare perchè, ovviamente, i 5V in uscita dalla UNO danneggerebbero l'ingresso (5V NOT tollerant) della DUE. ;)

Richiamo questa discussione perché avrei in mente di fare una cosa simile. Vorrei far colloquiare 2 arduino UNO o MEGA tra di loro utilizzando solo i pin digitali configurati come IN e OUT. Come nella richiesta di chi ha aperto il topic l'Arduino A ha il pin 3 OUT, l'arduino B ha il pin 5 IN collegato al pin 3 dell'arduino A. Quando il pin 3 di Arduino A va in high allora arduino B esegue un programma. Insomma, è possibile collegare direttamente i pin tra 2 arduino?

Spiego in particolare cosa vorrei fare: una sorta di multiplexing: 3 pin di arduino A (OUT) sono collegati a tre pin di arduino B (IN), a seconda delle combinazioni che invio (000, 001, 010,011...) arduino B eseguirà uno specifico programma. Non posso far colloquiare i due arduino in altro modo (seriale ecc.).

E' solo una mia curiosità che poi potrei implementare in un progetto (risparmierei di tirare un bel po di cavi)...

Come già detto:

Se usi la DUE VERSO la UNO, si può fare perchè i 3,3V della DUE vengono correttamente interpretati dalla UNO come HIGH.

Se usi la UNO verso la DUE NON SI PUO' FARE perchè l'HIGH della UNO è a 5V e danneggerebbero l'iongresso della DUE che non è 5V tollerant (in realtà funziona, ma è un rischio che adesso va e tra 5 minuti no, e danneggi l'ingresso).

In questo secondo caso, se la velocità di comunicazione è lenta, puoi usare un partitore resistivo, oppure lavorare di logica negativa e dei diodi. Se la comunicazione è veloce (Es. I2C a 400 KHz) servono degli adattatori di livello appositi. (IC dedicati).

Logica negativa con diodi: l'HIGH è dato dalla resistenza di pull-up, il LOW arriva dalla DUE:

Adattatore di livello semplice, con MOS:

Chiedevo di utilizzare Arduino Uno e Mega, i segnali sono quindi 5v. grazie!

Sia la UNO che la MEGA sono a 5V quindi non hai problemi di eventuali sovratensioni. L'unico accorgimento è di mettere in comune i GND.

Grazie Paolo, era effettivamente quel che pensavo, volevo solo avere conferma. D'accordissimo per gnd in comune.

Ancora grazie e buon anno a tutti!

PaoloP: Sia la UNO che la MEGA sono a 5V quindi non hai problemi di eventuali sovratensioni. L'unico accorgimento è di mettere in comune i GND.

Si, però mettere sempre una resistenza da 100 ohm in serie sul collegamento tra i pin di due schede diverse, si chiama disaccoppiamento ed evita di far scorrere correnti eccessive in caso di significative differenze sulla Vdd.