distanza e velocità dell'I2c

Ciao a tutti ho un paio di domande sull'I2c gestito dalla wire.library.

1 Una cavo di 5-6 metri sarebbe problematico in termini di lunghezza?

2 Il traffico dati garantito da questa connessione, è più o meno lento della seriale a 9600 baud?

Grazie

secondsky: 1 Una cavo di 5-6 metri sarebbe problematico in termini di lunghezza?

Assolutamente si, al 99.999% con un cavo simile la I2C non funziona. In realtà non c'è un limite di distanza, la I2C prevede solo un limite alla capacità massima della linea, ovvero la somma delle capacità dei device e quella del cavo, che deve essere minore di 400pf.

2 Il traffico dati garantito da questa connessione, è più o meno lento della seriale a 9600 baud?

La I2C ha due livelli di velocità, fino a 100kbp e fino a 400kbps, la seconda modalità è molto più critica della prima e richiede particolari accorgimenti per poter essere utilizzata. Anche tenendo conto del protocollo I2C, che introduce un pesante overhead rispetto alla normale comunicazione UART, una connessione I2C a 100 kbps offre prestazioni pari ad una connessione UART a 56 kbps se è half duplex e una a 38kbps se è full duplex, la I2C è esclusivamente half duplex.

Ti ringrazio della risposta dettagliata, tuttavia quanto mi dici per il primo punto mette fuori discussione un mio approfondimento del secondo. :-( Il fatto è che sto trovando molti problemi a far dialogare via seriale una Leonardo e una Micro tra loro, con differenze rispetto a come si comporta la Uno.

secondsky: Il fatto è che sto trovando molti problemi a far dialogare via seriale una Leonardo e una Micro tra loro, con differenze rispetto a come si comporta la Uno.

Con quella distanza puoi usare la normale UART con una velocità di 19.2-38.4 kbps, di più può portare a frequenti errori.

Il problema é che la capacitá del cavo fa alzare la tensione lentamente perché la corente che possono dare le resistenza pullup é limitata.

Ci sono integrati come il P82B715, PCA9507 che allungano il Bus dando piú potenza. Serve uno al inizio del cavo e uno alla fine.

Ciao Uwe

Alla fine penso tornerò sull’idea della seriale, in effetti il mio problema era il mettere in comunicazione una leonardo e una micro, e non avevo considerato il dovermi riferire alla Serial1, per usare i loro pin 0 e 1.
Comunque gli integrati consigliati da Uwe mi sembrano molto interessanti e potrebbero tornarmi utili in futuro, ne esistono anche per migliorare la comunicazione seriale oltre che i2c o su una distanza di 5-6 metri a 9600 baud sarebbero superflui?

La seriale TTL con 9600 Baud non ha questi problemi perché i driver hanno uscite totem pole (c'é un transistore che le mette a +5V e un altro le mette a massa). Per distanze lunghe (piú di qualche centinaio di metri) usi una RS485.

Ciao Uwe

uwefed: Per distanze lunghe (piú di qualche centinaio di metri) usi una RS485.

La RS232, quindi segnali che variano almeno tra +/- 5V con correnti di almeno 10 mA, non va oltre i 20-30 metri anche se sei a solo 9600 bps, con la UART, che lavora tra 0 e 5V fai più o meno la stessa distanza, oltre cominciano ad esserci molti errori sulla linea