Due lcd 16x2 con mcp23017

salve a tutti ragazzi
portandomi avanti con lo studio su arduino e in particolare con l'elaborazione di un mio progettino
ho la necessità di dover collegare al mio arduino tre schermi lcd
iniziando pian piano e cercando su internet come prima cosa ho capito che si può utilizzare l'i2c e un I/O expander
io come expander ho l'mcp23017
cercando e girovagando ho trovato la libreria LiquidTWI2 e sono riuscito a comunicare con lo schermo ma mi rimangono 7 piedini liberi
la domanda è: c'è la possibilità di poter attaccare un altro lcd agli altri piedini?
secondo me si però guardando la libreria non sono riuscito a capire dove intervenire per adattarla alle mie esigenze
c'è già qualcosa a riguardo oppure se qualcuno mi aiuta la dovrei adattare io?? :smiley:
grazie in anticipo

L’ I2C è un bus … tutti i device si debbono collegare in parallelo e ciascuno DEVE avere un SUO indirizzo specifico (univoco) … è poi tramite il protocollo software di colloquio che si indirizza quello con cui parlare e si trasmettono/ricevono informazioni.

Non puoi attaccare devices I2C su pin differenti da quelli definiti dall’HW …

Board 	       I2C / TWI pins
-----          --------------
Uno, Ethernet  A4 (SDA), A5 (SCL)
Mega2560       20 (SDA), 21 (SCL)
Leonardo       2 (SDA), 3 (SCL)
Due	       20 (SDA), 21 (SCL), SDA1, SCL1

Guglielmo

I display LCD I2C o i moduli aggiuntivi I2C di solito hanno la possibilità di selezionare diversi indirizzi saldando opportunamente una serie di contatti di soli nominati A0, A1 e A2.
Come detto da Guglielmo dovrai saldando diversamente i contatti ottenere tre dispaly che abbiano diverso indirizzo e poi inizializzare nel codice ciascun pannello.
Nel codice includerai solo una volta la libreria ma la inizializzi tre volte

#include <LiquidCrystal_I2C.h>     

LiquidCrystal_I2C lcd1(indirizzo lcd 1, 16, 2);
LiquidCrystal_I2C lcd2(indirizzo lcd 2, 16, 2);
LiquidCrystal_I2C lcd3(indirizzo lcd 3, 16, 2);

Nota che il tipo di inizializzazione può cambiare da libreria a libreria.

Grazie per le risposte intanto... :smiley:
tornando all'argomento in queztione... perfetto mi state co fermando quello che ho imparto fin'ora
riguardo quanto scritto da Guglielmo io nn volevo far diventare i2c altri piedini eheh ma cmq mia spiegato bene il funzionamento
proseguendo paolo io ho l'mpc23017 con i a0 a1 a2 al grd e so che cambiando il loro stato cambio indirizzo
ma soffermiamoci su un solo mcp con un 16x2 attaccato l'lcd mi occupa solo 7 piedini me ne rimangono altri 7 potrei teoricamente con adeguata libreria comandarmi un altro lcd?
sai nn sapevo ci fosse la libreria liquidcrystal_i2c

Ps.:scusate se dico castronerie :roll_eyes:

Si potresti sfruttare gli altri 7 piedini ma il problema diventa la gestione: avresti 2 lcd ad esempio 16x2 collegati allo stesso indirizzo.
Potresti trattare come se fosse un 16x4 dividendo poi tramite libreria le informazioni sui due lcd.
Non credo si trovi un cosa del genere in giro. Sei tu in grado di scrivere una libreria che faccia ciò?

Molto meglio prendere diversi MPC e usarne uno per ogni display.

certo gli lcd sarebbero allo stesso indirizzo i2c ma diverso indirizzo nell'mcp nei piedini diversi
secondo me dovrei riuscire a capire come funziona la libreria e vedere come assegna all'mc p gli indirizzi dei piedini dell'lcd
così facendo dovremmo essere in grado di attaccare e controllare due lcd? che ne pensi?

tutto questo non è per essere di coccio ma per sfruttare a pieno le potenzialità dell'mcp che secondo me sarebbe riduttivo utilizzarne uno per schermo e non utilizzare i 7 piedini tanto vale prendere i pcf che li utilizzi a pieno

più tardi proverò cmq a controllare i piedini rimanenti come I/O digitali e vediamo che succede

Considerando che c'è chi usa un ATmega328P per far lampeggiare un led, tu puoi usare un MPC per ogni display. :grin:

ahahah anche questo è vero ma cerco di poter sfruttare al meglio e al massimo delle potenzialità le cose che ho :wink:

allora amici vi aggiorno sull'avanzamento dei lavori riguardo l'oggetto del topic
dato che sulla rete nn ho trovato nulla riguardo poter collegare due lcd all'mcp ho deciso di studiare la libreria che avevo mensionato su la liquidTWI2 e di farne una per l'mcp...
fino ad ora il risultato ottenuto è che riesco a controllare un schermo alla volta da un lato e dall'altro dell'mcp
non capisco perchè in simultanea quello che scrivo sullo schermo uno me lo scrive sullo schermo 2... bhoooooo
dato che si prospettava che avrei dovuto usare un mcp per ogni schermo e invece ora almeno scrivo su un secondo schermo direi che qualche passo avanti sia stato fatto no??? :stuck_out_tongue_closed_eyes:

raga non riesco a venire a capo del problema che ho descritto su
in maniera indipendente riesco a controllare lo schermo sul lato A del mcp e lo schermo sul lato B
contemporaneamente quello che voglio sia scritto sull'lcd1 si impasta con quello dell'lcd2
qualcuno di buona volontà vorrebbe dare un occhiata alla libreria che ho modificato e spiegarmi l'errore?

ragazzi ho concluso…
sono riuscito a far lavorare due lcd su mcp23017
inizialmente avevo provato creando una libreria nella quale si sceglieva l’indirizzo delle IODIR ma non appena inizializzavo il secondo schermo quello che mandavo al primo si sommava a al secondo col risulatato che nel primo lcd nn mi compariva niente mentre nel secondo mi appariva lcd1+ lcd2
allora ho scisso la libreria in 2 parti cioè ho creato due librerie una per le IODIRA e una per le IODIRB
provandola sono riuscito anche a comandare uno o l’altro lato come IO e l’altra lcd
come potrei condividere il tutto con voi?

Si, ci sono vari modi: su GitHub, nel playground, su un tuo sito o direttamente qui.

Complimenti.

il tempo di sistemare le due librerie ed imparare come funzica github e carico e condivido :smiley: