Bus I2C

Salve a tutti, secondo voi qual'è il modo più semplice per realizzare un bus I2C con periferiche con indirizzo fisso? In pratica vorrei interrogare con un PC munito di scheda PCI I2C dei sensori di pressione ASDX D0 della Honeywell, che funzionano in modalità slave ma hanno tutti lo stesso indirizzo (F0). Pensavo di realizzare delle piccole schede di adattamento per ogni sensore, con un DSP o un microcontrollore che funge da interfaccia verso il bus, filtrando i pacchetti diretti al modulo. Ho bisogno però di un chip con due interfacce I2C e devo poi implementare un opportuno firmware... Non c'è qualcosa di più semplice o già pronto?

Grazie per l'aiuto e buon ferragosto. Fabio.

Reply to
Fabio
Loading thread data ...

ori

ma

e,

due

Fare un multiplexer che devi il dato a ciascuna e solo una delle periferiche. Il pilotaggio del multiplexer deve avvenire tramite comandi inviati ad un micro incaricato della gestione. Tale micro li ricever=E0 sempre in I2C all'indirizzo 1 per non creare conflitti. Il multiplexer puoi realizzrlo con degli switch elettronici (4066 o altro dovrebbero funzionare), comunque bidirezionali. Quindi, in un primo istante comunichi all'indirizzo 1 (micro) con quale periferica vuoi dialogare. Esegui il polling sempre al micro per sapere quando questo ha commutato. All'OK, colloqui con il canale desiderato all'indirizzo 0. Per cambiare indirizzo, fornisci altro comando al micro.

Forse non hai bisogno neanche del micro: esistono chip convertitori I2C -> parallelo. Fai prima ad usare quelli. Credo non sia necessario switchare anche il clock.

Ciao. Piccio.

Reply to
Piccio

Non capisco davvero il motivo di questa scelta. Tra l'altro hanno anche 3 pin non collegati... Non è che il datasheet è solo una bozza e invece sono configurabili? Altrimenti mi sembra davvero una scelta ingenua la loro.

A quel punto, visto che, se ho capito bene, quei sensori hanno anche l'uscita analogica, non ti conviene attaccarti ad un ingresso ADC di un microcontrollore e riimplementare il tutto sul suo I2C? Anzi, a quel punto potresti usare un sensore qualunque! Io mi son trovato bene con i Fujikura...

Ciao

Pasu

Reply to
Pasu

Pasu ha scritto: Altrimenti mi sembra davvero una scelta ingenua la loro.

Ho dato un'occhiata anch'io al datasheet e quoto pienamente!

O multiplexer O sensori I2C configurabili O meglio ancora piccolo micro con I2C e ADC cosi ti svincoli dal tipo di sensore (come giustamente ti consigliavano)

La scelta dipende anche dalla produzione che ne devi fare, dal budget per lo sviluppo... le solite somme insomma :)

Emanuele

--
YOUR ELECTRONICS OPEN SOURCE * http://dev.emcelettronica.com
Reply to
Emanuele

Vi ringrazio per i consigli. Io pensavo di fare così:

- lasciare il sensore I2C per evitare problemi dovuti alla calibrazione del convertitore A/D ed al fatto che bisognerebbe inserire un filtro antialiasing in analogico;

- utilizzare un DSP con ingresso I2C che mediante switch bidirezionali (grazie Piccio, buono il 4066) può comunicare alternativamente con il sensore di pressione o con il bus esterno e che funga da filtro, un pò come i router nel mascheramento degli IP (non so se è chiaro, ma un esempio migliore non lo trovo);

- DIP switch per impostare l'indirizzo virtuale del modulo slave, gestito dal DSP.

Vi piace?

Fabio.

"Fabio" ha scritto nel messaggio news:48a2e245$0$1083$ snipped-for-privacy@reader2.news.tin.it...

Reply to
Fabio

No :-) Di che banda di segnale stiamo parlando? Tieni presente che la velocità di conversione di un qualsiasi uC è alquanto elevata. Al più, male comunque non fa, un condensatore da 10..100nF tra uscita del sensore e 0V.

Perchè ritieni di dover calibrare l'ADC? Se alimenti tutto con la stessa alimentazione o, meglio ancora, se colleghi l'alimentazione del sensore alla Vref dell'ADC non dovresti aver nessun problema.

Se poi vuoi proprio ammazzare la mosca col bazooka, ci sono dei uC con due I2C, ad esempio i PIC della famiglia 18:

formatting link

Ciao

Pasu

Reply to
Pasu

Ho previsto un dsPIC30F2011. Il sensore di pressione I2C mi permette di realizzare una rete partendo dal PC. Ogni sensore ha due connettori collegati in parallelo, ad uno collego il bus in entrata all'altro il bus in uscita. Sicuramente si poteva fare in mille modi diversi, a me piace il fatto che prende spunto dal can bus.

Ciao e grazie! Fabio.

"Pasu" ha scritto nel messaggio news:g81d5b$49p$ snipped-for-privacy@aioe.org...

formatting link

Reply to
Fabio

Ho capito benissimo cosa vuoi fare e mi piace la filosofia. Ho mai consigliato di fare il contrario? Leggi bene quello che ho scritto. Io intendevo:

Sensore----(ADC->uC->I2C)=====bus I2C

oppure (come dicevi anche tu)

Sensore===busI2C(0xF0)====(I2C--uC--I2C)====busI2C(0xnn)

dove ---- è il segnale analogico e ==== il bus I2C

Si però adesso non ti arrabbiare. Tu hai chiesto un'opinione e io ti ho dato la mia. E comunque cosa c'entra il CAN bus? È un bus. Punto.

Ciao

Pasu

Reply to
Pasu

Non mi sono mica arrabbiato...

Ciao.

"Pasu" ha scritto nel messaggio news:g81lej$3q9$ snipped-for-privacy@aioe.org...

Reply to
Fabio

=20

ori

ma

e,

due

La NXP fa degli hub I2C dotati di enable, che permettono di fare quello che chiedi: abiliti un enable alla volta e puoi comunicare solo con il sensore collegato a quella porta, mentre gli altri non si accorgono di niente. Prova a vedere il PCA9516 se bastano 4 sensori, oppure il PCA9518 se te ne servono di pi=F9 (pu=F2 essere collegato ad albero). Comunque, sul sito NXP sotto I2C bus repeaters/hub/extenders trovi molte possibili soluzioni. Sicuramente pi=F9 semplice che usare un micro/dsp per ogni sensore.

Ciao!

--=20 Filippo

Reply to
Filippo

Ciao Filippo, però in questo modo sono costretto a mettere su di una unica scheda tutti i sensori. L'idea è di realizzare una rete di sensori distribuita mediante l'I2C...

La cosa che non mi è chiara è però se l'utilizzo di uno switch come il 4066 è equivalente all'utilizzo del PCA9515 o similari... che ne pensi?

Fabio.

"Filippo" ha scritto nel messaggio news: snipped-for-privacy@gmail.com... Hello Fabio,

Wednesday, August 13, 2008, 3:32:12 PM, you wrote:

La NXP fa degli hub I2C dotati di enable, che permettono di fare quello che chiedi: abiliti un enable alla volta e puoi comunicare solo con il sensore collegato a quella porta, mentre gli altri non si accorgono di niente. Prova a vedere il PCA9516 se bastano 4 sensori, oppure il PCA9518 se te ne servono di più (può essere collegato ad albero). Comunque, sul sito NXP sotto I2C bus repeaters/hub/extenders trovi molte possibili soluzioni. Sicuramente più semplice che usare un micro/dsp per ogni sensore.

Ciao!

--
 Filippo
Reply to
Fabio

Ciao Fabio,

Friday, August 15, 2008, 11:02:58 AM, hai scritto:

ti i

il 4066

Perch=E8 dici che cos=EC sei costretto a mettere tutti i sensori sulla stessa scheda? Io farei una scheda con l'hub I2C (se usi il PCA9518) e poi a questa connetti i sensori che vuoi via cavi, etc. Oppure fai una scheda con un PCA9515 per ogni sensore e usi gli enable per attivare un solo bus alla volta. In entrambi i casi, questi funzionano da buffer, quindi aiutano la comunicazione.

In teoria il 4066 potrebbe dare gli stessi risultati, devi, ovviamente, avere l'accortezza di mettere i pullup da entrambe le parti dell'I2C (cio=E8 un pullup per la sezione prima del 4066 e uno per quella dopo dopo).

--=20 Filippo

Reply to
Filippo

Scusa, con la mia soluzione ottengo

PC ===?======?======?======?=== S1 S2 S3 S4

dove il bus è a 4 fili (VCC,GND,SDA,SCL).

Nel tuo caso il bus avrebbe 4+n fili, dove n è il numero di sensori (i fili in più sono gli enable). Il tipo di comunicazione sarebbe poi punto-punto ed ogni sensore non sarebbe indirizzato sulla rete in modo univoco da un indirizzo sul bus. Quindi il PC dovrebbe avere una scheda I2C + output digitali per abilitare i vari sensori. Con la mia soluzione posso utilizzare solo una scheda I2C ed evito le complicazioni legate alla futura espansione della rete di sensori. Forse non ho capito bene quello che mi volevi dire?

Fabio.

"Filippo" ha scritto nel messaggio news: snipped-for-privacy@gmail.com... Ciao Fabio,

Friday, August 15, 2008, 11:02:58 AM, hai scritto:

Perchè dici che così sei costretto a mettere tutti i sensori sulla stessa scheda? Io farei una scheda con l'hub I2C (se usi il PCA9518) e poi a questa connetti i sensori che vuoi via cavi, etc. Oppure fai una scheda con un PCA9515 per ogni sensore e usi gli enable per attivare un solo bus alla volta. In entrambi i casi, questi funzionano da buffer, quindi aiutano la comunicazione.

In teoria il 4066 potrebbe dare gli stessi risultati, devi, ovviamente, avere l'accortezza di mettere i pullup da entrambe le parti dell'I2C (cioè un pullup per la sezione prima del 4066 e uno per quella dopo dopo).

--
 Filippo
Reply to
Fabio

Ciao Fabio,

Saturday, August 16, 2008, 10:27:15 AM, hai scritto:

=3D=3D

fili

to ed

are

ne

Ok, se vuoi una cosa modulare allora hai ragione. Pensavo avessi un numero fisso di sensori da collegare via I2C.

--=20 Filippo

Reply to
Filippo

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.