-
AutorePost
-
26 Aprile 2020 alle 14:56 #8524
Amilcare
Amministratore del forumHo 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?26 Aprile 2020 alle 17:27 #8529Picmicro675
PartecipanteCD4066
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.26 Aprile 2020 alle 18:43 #8531Amilcare
Amministratore del forumvedi sorgente fidocadJ Zoom fidocad sorgente FidoCad :
[FIDOCAD]
FJC A 0.8
FJC B 0.8
RV 150 125 110 75 0
TY 120 95 4 3 0 0 0 * CD4051
RV 60 90 25 40 0
TY 35 60 4 3 0 0 0 * MCU
TY 45 45 4 3 0 0 0 * SCL
TY 45 55 4 3 0 0 0 * SDA
TY 119 78 4 3 0 0 0 * 3
MC 45 100 0 0 040
MC 135 70 3 0 010
TY 270 40 4 3 0 0 0 * SCL
LI 115 125 115 135 0
LI 115 135 140 135 0
LI 140 135 140 125 0
LI 120 125 120 135 0
LI 125 125 125 135 0
LI 130 125 130 135 0
TY 114 118 4 3 0 0 0 * 6
TY 119 119 4 3 0 0 0 * 7
TY 124 118 4 3 0 0 0 * 8
TY 129 119 4 3 0 0 0 * 9
TY 139 118 4 3 0 0 0 * 10
SA 120 135 0
SA 125 135 0
SA 130 135 0
MC 130 135 0 0 040
TY 114 88 4 3 0 0 0 * 11
LI 135 70 135 75 0
SA 195 50 0
LI 40 40 40 35 0
TY 139 88 4 3 0 0 0 * 13
TY 45 75 4 3 0 0 0 * 0/1
TY 139 108 4 3 0 0 0 * 14
LI 45 90 45 100 0
TY 134 78 4 3 0 0 0 * 16
TY 260 65 4 3 0 0 0 * SDA_1
MC 40 35 3 0 010
TY 270 85 4 3 0 0 0 * SCL
TY 265 110 4 3 0 0 0 * SDA_2
LI 280 95 195 95 1
LI 195 50 195 95 1
LI 195 50 280 50 1
LI 60 50 195 50 1
LI 150 110 185 110 2
LI 185 110 275 110 2
LI 150 90 185 90 2
LI 60 60 120 60 2
LI 185 65 280 65 2
LI 120 60 120 75 2
LI 185 90 185 65 2
LI 90 80 90 90 3
LI 90 90 110 90 3
LI 60 80 90 80 3In 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à.
26 Aprile 2020 alle 20:58 #8533Just4Fun
PartecipantePenso bastino 2 mosfet come spiegato qui:
https://electronics.stackexchange.com/questions/83762/multiplexing-i2c-devices-with-mosfets
26 Aprile 2020 alle 21:09 #8535Amilcare
Amministratore del forumSe 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.27 Aprile 2020 alle 18:47 #8572Picmicro675
PartecipanteNon 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.1 Maggio 2020 alle 15:17 #8692Amilcare
Amministratore del forumDevo 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.4 Maggio 2020 alle 11:32 #8734gianmagna
PartecipanteCiao Amilcare
e se provi ad usare un 74hc4051 che in ON passano oltre 100MHz contro i 20MHz del 4051
ciao
Gianfranco -
AutorePost
- Devi essere connesso per rispondere a questo topic.