Stai visualizzando 8 post - dal 1 a 8 (di 10 totali)
  • Autore
    Post
  • #8524
    Amilcare
    Amministratore del forum

    Ho la necessità di gestire più slave I2C con indirizzo in conflitto. Creare una seconda linea I2c con una MCU non è cosa semplice ne dal punto di vista software né da quello hardware.
    Penso di aver risolto il problema mantenendo comune la linea SCL e commutando quella SDL a due linee di utilizzatori distinti. E fino a qui la soluzione è semplice ed elegante. La MCU comanda una sola linea I2C e non ho problemi, due pin abilitando di volta in volta quale delle due linee debba essere connessa alla linea dati della MCU. La linea che non riceve i dati rimane comunque in attesa per via delle resistenze di pull-up e non si accorge di nulla mentre quella abilitata funziona regolarmente.
    Il mio problema è ora trovare un interruttore che mi commuti la linea. Ho pensato al Cd4051 e un solo bit che a seconda del suo livello commuti la linea zero o la uno. Altre idee magari usando transistor o mosfet che possano fare lo stesso lavoro magari anche usando un pin per linea?

    • Questo topic è stato modificato 3 anni, 7 mesi fa da Amilcare.
    • Questo topic è stato modificato 3 anni, 7 mesi fa da Amilcare.
    #8529
    Picmicro675
    Partecipante

    CD4066
    Sono 4, ne usi due per commutare e una per fare l’inversione di logica. Da notare i fogli dati se le capacità parassite ti permettono di trasmettere a 100 kHz, sempre che sia quella la velocità che usi. Per i 400 kHz, mi farei qualche dubbio.

    #8531
    Amilcare
    Amministratore del forum
    ++++ Caricamento immagine FidoCad ++++
    vedi sorgente fidocadJ Zoom fidocad

    In fondo il circuito finale è semplice e non occupa troppe risorse alla MCU cercherò di tenere i collegamenti entro il metro e mezzo per non incappare in grandi problemi e la velocità 100KHz va bene senza sfruttare al limite le linee quando non serve, con un polling di circa mezzo secondo non mi serve una grande velocità.

    #8533
    Just4Fun
    Partecipante
    #8535
    Amilcare
    Amministratore del forum

    Se guardi bene parlano di Mosfet senza diodo parassita altrimenti ti trovi in difficoltà perché il diodo vanifica la interruzione del mosfet. Inoltre questi ultimi hanno elevata capacità di uscita e lavorando alla massima velocità saresti fuori dallo standard minimo. Un transistor non è utilizzabile perché la linea deve essere bidirezionale.
    Il problema non è poi così banale.

    #8572
    Picmicro675
    Partecipante

    Non avevo visto in dettagli l’integrato 4051. in fondo è il fratello maggiore di 4066. Se li hai già a tiro puoi anche usarli.
    Nei 4066, non ci sono i diodi, IIRC.
    Comunque si potrebbe anche fare un I2C separato fatto in software.
    Curioso di capire come mai non si può programmare l’indirizzo dispositivo diverso.

    #8692
    Amilcare
    Amministratore del forum

    Devo usare 15 moduli identici, ogni modulo ha 3 bit di indirizzo modificabili per un totale di 8 dispositivi sulla stessa linea. Gioco forza è ricorrere ad una linea aggiuntiva per utilizzare i restanti moduli.
    Siccome il Clok è comune per tutti i moduli e la comunicazione si ha sulla linea dati sincronizzata sul Clok la soluzione più semplice ed elegante è appunto duplicare questa linea. Poi di volta in volta abilitare una o l’altra con dispendio di un solo pin aggiuntivo. Soluzione che mi permette di non sovraccaricare la MCU che di per sé è una entri level con scarse caratteristiche.

    #8734
    gianmagna
    Partecipante

    Ciao Amilcare
    e se provi ad usare un 74hc4051 che in ON passano oltre 100MHz contro i 20MHz del 4051
    ciao
    Gianfranco

Stai visualizzando 8 post - dal 1 a 8 (di 10 totali)
  • Devi essere connesso per rispondere a questo topic.