Pages: [1] 2   Go Down
Author Topic: 1,5mt di I2C?  (Read 2749 times)
0 Members and 1 Guest are viewing this topic.
Italia, Cefalù
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Usiamo la sezione Hardware! smiley-grin

Sto iniziando a piazzare i componenti con l'Eagle per il VespaComputerDuino V2. Sostanzialmente è la stessa cosa del precedente, ma varia un po l'hardware! voglio dividere l'LCD dal Micro ed usare l'interfaccia I2C presa questo inverno!

l'interfaccia in questione, oltre a gestire l'LCD può memorizzare la pressione di 9 tasti a matrice. Quindi l'idea era, lasciare sullo sterzo della moto l'LCD con i 3 (o magari 4) tasti del menù, stendere circa 1,5mt di I2C (magari, non sò....in coassiale per sicurezza) e nel sottosella avere "l'Arduino" con il corollario di accessori. Sonda K, Sensore giri, sensore Temp, Sensore Km/h, e qualche altra stupidaggine simile!

Si avrebbero così solo 2 fili tra i due moduli, l'LCD molto più sottile (senza "panino" LCD-Scheda Madre), e probabilmente una maggiore flessibilità hardware avendo tutto in una scatola nel sottosella!

la domanda dopo tutto ciò è: A parere vostro, ce la faccio ad estendere questi 1,5mt di i2c? forse la soluzione migliore è provare sul banco! Arduino e modulo LCD! uhm.....ma se avete esperienze simili.......!

grazie!
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 328
Posts: 22747
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La miglior cosa sarebbe una seriale espansa con 2 75176 (bus RS485) ma se vuoi provare con l'I2C usa delle resistenze di pull-up da 1,5K per dare abbastanza corrente. Poi prova sul banco.
Logged


0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2309
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,

Quote
ce la faccio ad estendere questi 1,5mt di i2c

utilizzando un IC idoneo:

Quote
If all your devices are on the same PCB, then there is nothing to worry about, however if your I2C bus is longer than around one metre, it is recommended that you use an I2C bus extender IC. These ICs reduce electrical noise over the extended-length bus runs and buffer the I2C signals to reduce signal degradation and chance of errors in the data. An example of such an IC is the NXP P82B715 (data sheet). Using a pair of these ICs, you can have cable runs of 20 to 30 metres, using shielded twisted-pair cable.

(fonte: http://tronixstuff.wordpress.com/2010/10/29/tutorial-arduino-and-the-i2c-bus-part-two/)
Logged

Italia, Cefalù
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

20 o 30 metri? ma sul serio? pazzesco!! nno immaginavo!

in realtà, in questo progetto non mi spaventa la lunghezza, che a parere mio.....funziona! ma eventuali disturbi captati dalla scintilla della candela! quella è davvero micidiale!

dò un'occhiata a questi chip extender!
Logged

Italia, Cefalù
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

niente! ho provato inizialmente con 2 metri di doppino audio semplicissimo. non và! l'ho accorciato a 1,5mt e funziona! ma potrebbe rivelarsi troppo inslabile come sistema!

opterò per gli extender!
Logged

Italia, Cefalù
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

da specifiche del chip, quindi 2 Pair Twisted, ho trovato questo cavo qui! Con ai due capi un connettore USB dovrebbe risultare compatto ed efficacie!

Link
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9451
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

da specifiche del chip, quindi 2 Pair Twisted, ho trovato questo cavo qui! Con ai due capi un connettore USB dovrebbe risultare compatto ed efficacie!

Non cambia nulla, il DMX512 è un bus di tipo RS485, dove è d'obbligo l'uso di un doppino intrecciato, ed è di tipo differenziale, la I2C è un bus con riferimento a GND e basato su porte open collector o open drain a seconda della tecnologia del device.
Per la I2C non esiste un limite alla lunghezza dei cavi, esiste un limite alla capacità massima presente su tutto il bus, ovvero la somma delle capacità dei singoli device collegati e quella complessiva del cavo, questo valore è 400pf e non difficile raggiungerlo se usi cavi più lunghi di qualche decina di centimetri.
Se vuoi collegare due device I2C in sicurezza fino a due-tre metri usa del cavo coassiale RG179/U (circa 2mm di spessore), uno per SDA e uno per SCL, in questo modo oltre a schermarti dai disturbi sei sicuro di introdurre solo 120-200 pf dovuti al cavo (RG179 ~ 63 pf per metro).
Molto importante il valore delle pullup, la I2C per poter funzionare richiede una certa disponibilità di corrente, serve per caricare/scaricare la capacità della linea, il valore consigliato è 3 mA, a 5V per far scorrere 3 mA la R di pullup deve essere da 5/3 = 1.66 kohm, valore commerciale più vicino 1.5k.
Con la connessione più lunga di 20-30 cm è meglio lasciar perdere la velocità a 400kbps, usare esclusivamente quella a 100kbps.

Edit:
Una precisazione consigliatami da Uwe, in fase di carica della capacità di linea la corrente viene fornita esclusivamente dalla resistenza di pullup, in fase di scarica la corrente viene prelevata dalla capacità di linea dalla chiusura verso GND di SDA o SCL della porta open drain interessata, in questo caso la corrente massima è limitata dalla capacità di trasferimento della porta.
Da quanto sopra ne consegue che la fase critica della trasmissione I2C è il ritorno delle linee SDA e SCL al loro stato di idle, uno logico, e se la resistenza di pull up è troppo alta non può avvenire in tempi sufficientemente rapidi.

« Last Edit: August 20, 2012, 05:36:43 am by astrobeed » Logged

Italia, Cefalù
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

pertanto, Astro, mi consigli di provare con i coassiali invece di impiegare i chip consigliatomi? NXP P82B715

potrei prevederle le piazzole, e visto che si tratta di smd e non richiedono componenti aggiuntivi, sono facilmente baypassabili!
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9451
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pertanto, Astro, mi consigli di provare con i coassiali invece di impiegare i chip consigliatomi? NXP P82B715

Quegli IC non sono altro che amplificatori della corrente di linea, invece di 3-4 mA possono erogare decine di mA il che permette di caricare rapidamente la capacità di linea anche se molto alta.
Tenendo conto della corrente massima supportata dai pin del 328 puoi migliorare sensibilmente le cose utilizzando delle pull up con valore idoneo per portare la corrente a 6 mA invece di 3mA, 5V / 6 mA = 830 ohm.
Tieni presente che nel momento in cui SDA o SCL chiude il gate open drain verso GND sul pin scorre la sommatoria delle correnti provenienti dalla capacità di linea e quella della pullup, non è possibile salire ulteriormente con la corrente della pull up perché la porta open drain non è un corto perfetto verso GND ha una sua impedenza di svariate decine di ohm e la d.d.p. sul pin non è 0V, è tanto maggiore quanto minore è il valore della pull up, il che può portare al problema opposto, ovvero non riuscire a scaricare la capacità di linea fino allo 0 logico.
Ti allego due immagini con una serie di misure fatte col DSO sulla linea I2C con vari valori di pull up, la prima a 100 kHz la seconda a 400 kHz, così ti rendi conto come stanno esattamente la cose.





* Progression100kHz.jpg (211.88 KB, 517x702 - viewed 55 times.)

* Progression400kHz.jpg (221.5 KB, 523x702 - viewed 55 times.)
Logged

Italia, Cefalù
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Chiarissimo Astro!

è evidentissimo che per valori superiori a 1.5k l'efficienza del segnale cala in maniera sensibile!

bene, posso iniziare a burrae giù uno schemino semplificato con eagle! spero non salti fuori un pcb troppo complesso! non voglio annodarmi il cervello stavolta!

poi mi servirà pure sapere come mandare il 328 in sleep. ma la domanda la farò dopo!
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9451
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bene, posso iniziare a burrae giù uno schemino semplificato con eagle! spero non salti fuori un pcb troppo complesso! non voglio annodarmi il cervello stavolta!

Visto il tipo di applicazione, e l'uso in ambiente (la Vespa) rumoroso dal punto di vista elettrico, è molto meglio se usi la RS485 al posto della I2C per le comunicazioni, cosa che ti aveva già consigliato Leo e che avvallo al 100%
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 328
Posts: 22747
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Visto il tipo di applicazione, e l'uso in ambiente (la Vespa) rumoroso dal punto di vista elettrico, è molto meglio se usi la RS485 al posto della I2C per le comunicazioni, cosa che ti aveva già consigliato Leo e che avvallo al 100%
smiley-wink
Logged


Italia, Cefalù
Offline Offline
Sr. Member
****
Karma: 0
Posts: 399
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono pienamente d'accordo con te Astro e Leo! rs 485 è insuperabile, sia per portata che contro i disturbi.

l'unica cosa che mi manda un po in confusione al momento è il display!

vi spiego, questa nuova versione del mio progetto la sto facendo per risolvere alcuno problemi gravi che aveva la precedente. come ogni prima versione non ho considerato delle cose.

per prima cosa tutto il circuito si trova nel retro del display, compreso il 328, rendendo il tutto molto voluminoso e scomodo e antiestetico da appioppare sullo sterzo della moto.

poi, i segnali dei sensori si trovano a viaggiare per almeno 1,5mt di cavo di rete, non solo impiegando ben 12 conduttori, ma perdendo roba per strada causa resistenza dei fili, lunghezza e trattandosi di mV!

pertanto l'idea attuale è quella di usare una scheda madre, con il 328, gli ingressi dei sensori a ridosso, molto compatto, da mettere magari nel sottosella o in un vano nascosto. poi, in qualche modo, collegare il solo display allo sterzo con i 3 tasti del menù e basta!

in rete ho trovato il modulo ByVac I2C che oltre a gestire l'LCD e in grado di gestire una tastiera a matrice a cui posso collegare i miei tasti menù.

ora, sopraggiunge il problema che l'I2C potrebbe rivelarsi non adeguato, una cosa che sottovalutavo ma un po temevo!

Come potrei fare secondo voi ad ottenere uan cosa simile con il 485? LCD più tastiera? un secondo micro che ricede i segnali e gestisce tasti e LCD? qualche shift register per il 2WireLCD? e i tasti?

uhm, non ne esco fuori da questa "matassa" smiley-grin
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 328
Posts: 22747
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Io farei proprio come hai detto. Metterei sotto dal display solo un chip che si occupi della gestione della visualizzazione dei dati e della lettura dei pulsantini.  L'RS485 altro non è che una seriale estesa: occupi i soliti 2 pin RX/TX più un terzo pin per commutare il chip in ricezione o trasmissione.
A questo punto metti il 328 master in un punto sotto alla sella, vicino ai sensori, e poi spedisci i dati allo slave su seriale. E da lui ricevi anche le eventuali pressioni dei pulsantini.
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9451
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Concordo con Leo, un micro sotto il display che lo gestisce assieme ai pulsanti, bus RS485 per comunicare col secondo micro che acquisisce i dati dei sensori.
Quale dei due micro è il master lo decidi tu, possono esserlo tutti e due, i transceiver per la 485, SN75176, li trovi sia in formato dip che smd in case SO8 (si saldano senza problemi) e costano poco.
Dal punto di vista software la RS485 è facilissima da gestire, è come la normale seriale con la differenza che devi mandare un pin a uno logico prima di trasmettere per commutare la direzione del transceiver, la I2C è più complessa da gestire della seriale al di la del supporto offerto dalla libreria twi.
Logged

Pages: [1] 2   Go Up
Jump to: