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?
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.
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...
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
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...
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:
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...
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 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.
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).
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).
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.