Questo semplice tutorial è pensato per quei progetti che richiedono l'uso di un numero di porte maggiore di quelle che il vostro Arduino Uno può offrirvi.
Infatti, grazie all'uso di un I/O expander (in questo caso il Microchip MCP23017) è possibile moltiplicare le porte a nostra disposizione.
Uno di questi ci permette di aumentare il numero delle porte fino a 16, che possono essere impostate sia come ingressi che come uscite.
Un dispositivo che senza dubbio richiede molti pin è il display LCD, ed è per questo che ho messo un esempio di collegamento proprio per questo dispositivo.
Infatti dalle 7 porte normalmente necessarie al collegamento, ridurremo questo numero a 2 soltanto, cosa che ci tornerà sicuramente utile nella realizzazione di grossi progetti.
Vediamo un video che ne dimostra il funzionamento:
Questo è lo schema da realizzare, ho cercato di farlo il più chiaro possibile, ma se avete dei dubbi non esitate a chiedere!
Fatto questo potete procedere al caricamento dello sketch, ma prima dovete scaricare questa libreria e copiare il file estratto nella cartella "libraries" di Arduino.
- #include <Wire.h>
- #include <LiquidTWI2.h>
- // Connessione via i2c, indirizzo di default (0)
- LiquidTWI2 lcd(0);
- void setup() {
- // imposta il tipo di integrato usato
- // (togli le virgolette da quello usato)
- //lcd.setMCPType(LTI_TYPE_MCP23008);
- lcd.setMCPType(LTI_TYPE_MCP23017);
- // imposta il tipo di lcd (colonne, righe)
- lcd.begin(16, 2);
- // scrivi un messaggio sull'lcd.
- lcd.print("danielealberti");
- lcd.setCursor(13, 1);
- lcd.print(".it");
- }
- void loop() {
- // preparati a scrivere nella colonna 0, riga 1
- // (nota: la riga 1 è la seconda, il conteggio inizia da 0)
- lcd.setCursor(0, 1);
- // scrivi il numero dei secondi (nella posizione impostata prima)
- lcd.print(millis()/1000);
- }
Salve! Ora sto provando di seguire questa indicazione per fare funzionare la mia lcd 16x2, lo seguito verramento tutto ma non funziona proprio...lo verificato di collegare direttamente sul mio arduino il Lcd ma funziona. secondo lei quale sarà il fatto che la mia non funzione proprio...?
RispondiEliminaLei mi potrebbe aiutare perché sto facendo un lavoro su rilevatore della sistema ambientale e mi serva di seguire tutti i valore come il sensore della temperatura, sensore di luminosità e il valore della sensore di prossimità sulla mia Lcd 16x2...mi serva tanti pin mentre uso arduino uno che lo sapiamo che ha pochi pin...cosa devo fare per il collegamento di questo mcp23017 con lcd 16x2 e arduino uno...? quale libreria lo posso usare...perché non ho capito come mai che non funziona la mia lcd
RispondiEliminaCiao!
Eliminache problemi ti da?
Forse c'era un problema con la libreria, l'ho spostata su Google Drive, prova a riscaricarla dal link nel post. Fammi sapere!! Ciao!
EliminaBuongiorno Daniele.
RispondiEliminaHo appena terminato di assemblere il Suo progetto con Lcd ed Mcp23017, il quale funziona alla perfezione.
Le chiedevo se tale progetto riesce a gestire, cambiando i parametri righe e colonne, i display 16x4.
La ringrazio e complimenti per il suo sito.
Usvardi Guido
Si certo, dovrebbe essere necessario solo cambiare la riga 13 facendola diventare:
Eliminalcd.begin(16, 4);
Grazie. Ho provato con un Lcd 20x4 modificando l'istruzione e funziona perfettamente.
EliminaLe chiedo se fosse possibile usare i pin rimasti liberi del 23017 come I/O aggiuntivi.
Saluti e buon Ferragosto !!!
Ciao, che io sappia si ma non ho mai provato, anzi se ci riesci e vuoi condividere il tuo lavoro possiamo fare un post qui sul blog!
EliminaHa funzionato per 21 secondi poi...morto !
RispondiEliminaHo un 20 x 4 anche io, ed ora ho le due righe 0 e 2 completamente bianche, e le altre due la 1 e la 3 completamente nere. Che puo' essere ?!!??!
Prova a ricollegare il display in modo tradizionale per verificare che non si sia danneggiato
EliminaSalve, le chiedo come si fa a trovare una libreria per far funzionare arduino con un lcd 16x2 con i2c e un rtc sempre con i2c.
RispondiEliminaComplimenti per il sito
Saluti
Unberto
Ciao, grazie per i complimenti!
Eliminala libreria per il display è quella che trovi in questo post,
per il modulo RTC puoi trovarla qui:
http://www.danielealberti.it/2014/03/visualizza-data-e-ora-su-un-display-con.html
Ciao Daniele, grazie per la tua risposta rapida, ma non riesco a far funzionare arduino uno anche perchè e la prima volta che provo a programmare.
RispondiEliminaGrazie per tutto quello che fai.
Umberto
Ciao, devi realizzare 3 circuiti MCP/display (oppure usare 3 display i2c) e collegarli al bus i2c (pin A4 A5), infine dichiarare nello sketch gli altri 2 display con diversi indirizzi.
RispondiEliminaDaniele, bel progetto! ma è possibile collegare insieme un lcd e una keypad sul mcp23017? grazie
RispondiEliminaciao..perche' non si resetta la scritta su display...visto che ho messo delay 1000...ma il conteggio continua ad andare ?
RispondiEliminaHELLO, it is not working properly, this is the error they are showing: Arduino: 1.8.1 (Windows 8), Board: "Arduino/Genuino Uno"
RispondiEliminaLCD:1: error: stray '#' in program
1. #include
^
LCD:2: error: stray '#' in program
2. #include
^
LCD:1: error: expected unqualified-id before numeric constant
1. #include
^
LCD:6: error: expected unqualified-id before numeric constant
6.
^
LCD:7: error: expected unqualified-id before numeric constant
7. void setup () {
^
LCD:19: error: expected unqualified-id before numeric constant
19.
^
exit status 1
stray '#' in program
Invalid library found in C:\Program Files\Arduino\libraries\examples: C:\Program Files\Arduino\libraries\examples
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Hi, have you copied the code properly? Do you have installed the library for the display as explained in the tutorial?
EliminaLet me know if you solve.
Ciao Daniele
RispondiEliminaio sto tentando di far funzionare con scarsi risultati un monitor lcd
12864 128X64 5V blue screen display ST7920
dove ho montato un modulo I2C. Driver MCP23017
ottengo il suo indirizzo ( 0x20 )
ho provato con questo tuo , ma non ottengo nessun risultato ( schermo immobile ,nessun movimento )
le uniche modifiche nel tuo sono state appunto, l indirizzo di memoria 0x20
cambiare le colonne del lcd , ma qui non so se sto scrivendo giusto , non ho mai avuto uno schermo del genere.
// imposta il tipo di lcd (colonne, righe)
lcd.begin(128, 64);
non trovo nulla in rete , puoi aiutarmi ? grazie
ciao da ulteriori ricerche sembra che MCP23017 & ST7920 , non comunichino . in più, farlo sembrerebbe sbagliato/sconsigliato per motivi tecnici riportati su alcuni forum compreso l'ufficiale di Arduino . no trovo nulla che dimostri che i due possano funzionare , confermi ? please ,cosi ci metto una pietra sopra :)
RispondiEliminaCiao, purtroppo non ho esperienza con il display che stai usando, quindi non posso né smentire ne confermare quello che hai trovato.
EliminaDaniele
Grazie lo stesso , ci speravo che almeno tu mi sapessi indicare qualcosa..
Elimina