Con lo zaino I2C ci sono tre coppie di atterraggi, A0, A1, A2, che determinano i 3 LSB dell'indirizzo del dispositivo, utilizzando il binario invertito.
Rimasto solo , generano parte della parte F o 7 dell'indirizzo. 0x3F è comune, così come 0x27.
Per utilizzare più di un dispositivo è necessario collegarli tutti in modo univoco.
I bit superiori che generano il 0x3 sono cablati. Quindi è il bit più alto del byte più basso. È possibile modificare solo i tre bit di ordine più basso.
Poiché questi bit di indirizzo sono invertiti, ponticellando A0 si sottrarrà 1 dall'indirizzo. 0x3F diventerà 0x3E, 7 diventerà 6.
Hai abbastanza controllo per creare fino a 7 moduli LCD sullo stesso bus I2C.
L'unico avvertimento è che se hai più di un dispositivo che scrive sui vari LCD potresti ottenere collisioni, il che può rovinare il display abbastanza bene.
Ci sono domande sulla prevenzione e il rilevamento delle collisioni I2C su http://RaspberryPi.StackExchange.com se questa è la tua situazione.
Ponticelli uno o più di essi è piuttosto semplice: basta pre-stagnare un po 'di filo e saldarlo rapidamente, quindi tagliare l'eccesso.
Collegare i fili SDA e SCL degli LCD in parallelo e al Pin SDA e SCL su Arduino, solitamente A4 e A5. (Comincio sempre con una breadboard per questo). Assicurati di avere resistori pull-up discreti (10K è comune) su ciascuno, in un solo punto sul bus.
Se hai un modulo RTC DS3231 nel sistema, non è necessario aggiungere pull -up perché li ha internamente.
Se un LCD funziona già, allora sai di avere una corretta tensione di pull-up sul bus. (I segnali vengono commutati allo stato fondamentale per inviare i dati sul bus I2C)
Quindi, per riassumere:
Se hai due LCD nel tuo sistema puoi usare moduli LCD che sono già disponibili con indirizzi diversi, come
LiquidCrystal_I2C lcd1 (0x27, ....);
per il primo, poi
LiquidCrystal_I2C lcd2 (0x3F, .....);
per il secondo.
Nota che i parametri per queste definizioni sono
LiquidCrystal_I2C lcdname (addr, en, rw, rs, d4, d5, d6, d7, bl, blpol);
0x27 e 0x3F sono gli indirizzi di borsa più comuni e i moduli 0x27 stanno diventando più difficili da trovare.
Se hai uno 0x27, allora è molto probabile che se ne acquisti uno più nuovo sarà 0x3f. Problema risolto.
D4 e d5 nella definizione specificano i pin da utilizzare per I2C.
È possibile eseguire il programma i2cscanner per vedere cosa trova, una volta collegati insieme. Se vedi due indirizzi diversi, ad esempio 0x27 e 0x3F, allora sei a posto.
Se viene visualizzato solo 2F, allora puoi considerare di saldare A0 insieme su un modulo, quindi eseguire di nuovo lo scanner per assicurarti che funzioni.
Ecco come lo faccio di solito quando entrambi vieni impostato come 0x3f:
Ne ho uno giallo che è uno 0x3F di serie e uno blu dove ho ponticellato A0 per renderlo 0x3E. Entrambi sono display 20 x 4.
Ecco le mie definizioni: (ricorda, i 4,5 definiscono SDA, pin SCL)
LiquidCrystal lcdblue ( 0x3e, 2,1,0,4,5,6,7,3, POSITIVO); LiquidCrystal lcdyellow (0x3f, 2,1,0,4,5,6,7,3, POSITIVO);
Quindi in setup () uso questo:
lcdblue.begin (20,4); lcdblue.backlight (); delay (250); lcdblue.nobacklight () ; delay (250); lcdblue.backlight (); lcdyellow.begin (20,4); lcdyellow.backlight (); delay (250); lcdyellow.nobacklight (); delay (250); lcdyellow.backlight ();
Ed è perfetto, usare il pin A4 come SDA e A5 come SCL.
Sai che stanno lavorando mentre ti fanno l'occhiolino con la retroilluminazione.
Se uno dei tuoi è 20 x 2, usa lcd2.begin (20,2);
ovviamente.
Se vuoi VERAMENTE usare altri pin per il tuo I2C bus quindi basta cambiare il 4,5 nella definizione di LiquidCrystal_I2C
con i pin che si desidera utilizzare. Non ho mai incontrato nessuno che volesse farlo.
Spero che questo aiuti.