MCP23017

Ciao, avrei bisogno di un aiutino... Come faccio a collegare l'integrato MCP23017 con arduino?
Ho il datasheet di questo integrato ma alcuni piedini non saprei dove collegarli.
Ho cercato ma purtroppo non ho trovato nessuno schema da seguire... Aiutino?

TomFox:
Ho cercato ma purtroppo non ho trovato nessuno schema da seguire... Aiutino?

:o :o :o ... devi aver cercato piuttosto male ... basta andare su Google e scrivere "mcp23017 arduino" per far venire fuori 37.600 risultati ed infiniti schemi su "Google Images" ...

Cerca meglio e vedrai che trovi sia gli schemi che esempi già pronti. Cosa ci devi collegare al MCP ?

Guglielmo

ciao, adafruit ha una libreria per questi. quali pin non sai collegare?

forse A1/2/3?

servono per impostare l'indirizzo del dispositivo, a seconda del loro stato logico cambia l'indirizzo, quindi ne puoi mettere fino ad otto sullo stesso bus. mettili a massa o a vcc, poi lancia uno scanner i2c per sapere l'indirizzo dell integrato

I pin che DEVI collegare sono solo SDA (A4 o pin dedicato)/SCL (A5 o pin dedicato) e l'alimentazione Vdd (+5v)/Vss (GND).

Se ti va bene l'indirizzo di default (che dovrebbe essere 0x20), A0/A1/A2 puoi collegarli direttamente a GND. Forse puoi anche lasciarli scollegati ma nel dubbio collegali.

Tutto il resto sono i tuoi 16 I/O aggiuntivi, a parte i pin di INT che, se non sai a cosa servono, lasciali stare.

SukkoPera:
Se ti va bene l'indirizzo di default, A0/A1/A2 puoi collegarli direttamente a GND. Forse puoi anche lasciarli scollegati ma nel dubbio collegali.

No, se non si usano vanno messi a GND ... proprio l'altro giorno c'è stato un utente, con non ricordo quale chip che, lasciando "floating" A0, A1 e A2 aveva continui problemi ... messi a GND tutto è andato a posto.

Lasciandoli "floating" si rischia il cambio di indirizzo I2C non voluto ...

Guglielmo

Sì, ho appena verificato il datasheet e stavo per aggiungere questa precisazione. Altri chip i2c con indirizzo configurabile hanno i pin di indirizzo con pull-up/down integrati, ma non è il caso del 23017.

Avevo dubbi principalmente per RESET e INTA o INTB ma penso di essermi schiarito le idee...
Ora ho un dubbio sulla programmazione pero':
sto cercando di fare un programma semplice semplice con, appunto, questo integrato: voglio fare lampeggiare un LED.

#include <Wire.h>
#include <Adafruit_MCP23017.h>



Adafruit_MCP23017 mcp;
  
void setup() {  
  mcp.begin();     


  mcp.pinMode(2, OUTPUT);  
}



void loop() {
  digitalWrite(2, HIGH);
  delay(1000);
  digitalWrite(2,LOW);
  delay(1000);
}

Cosa c'e' di sbagliato?

Niente, ma con digitalWrite() controlli il pin di Arduino, non quello del 23017. Per quello devi usare mcp.digitalWrite().

PS: Il pin Reset puoi lasciarlo scollegato.

Ho modificato il programma come mi hai consigliato, ho collegato il piedino 9 a VCC di arduino, il piedino 10 su GND di arduino, il piedino 12 ad A5 di arduino, il piedino 13 ad A4 di arduino ed infine i piedini 25,26 e 27 a GND... Pero' il LED, collegato con il piedino piu' piccolo a GND ed il piedino piu lungo al piedino 1 dell'integrato, non si accende.
C'e' qualche oprocedimento fondamentale che sbaglio? Per esempio dichiarare la variabile prima del Setup? Se si, mi potreste dire come fare visto che sono abituato senza l'integrato?
Devo scrivere "int 'pippo'=1" oppure devo metterci qualche 'mcp.' in mezzo?

Non è che collegandolo senza resistenza (che è obbligatoria!) hai bruciato il led?

E comunque credo che il pin numerato 2 sia GPA2.

Grazie per la svista. Il LED era senza resistenza, ho provveduto immediatamente a fornirgliene una controllando prima che il LED non fosse bruciato. Ma non era quello il problema... Ho provato a controllare con un tester puntando con il puntale nero su GND e il puntale rosso sul piedino "2" ma niente... Mi dava 0.21 V.
Cosi ho provato a modificare l'OUTPUT inserendo "4" al posto di "2" ma ancora nulla.... Puo' essere l'integrato pacco? Ho controllato se era caldo ma no e' freddo. E' alimentato perche' i 5 V gli arrivano avendo controllato con il tester.

Quell'integrato usa il bus I2C (tutorial sul bus) ... hai messo le resistenze di pull-up sul bus ?

Guglielmo

PS: Il pin Reset puoi lasciarlo scollegato.

Non mi pare che il pin RESET abbia una PullUp interna,

Puo' essere quello visto che non ho messo resistenze di pull up... Non appena le ho metto le due resistemze da 1k8 ohm su entrambi i piedini dell'integrato e vi faro' sapere!

Le pull-up mettile da 4.7KΩ ... è un valore intermedio che va bene nella maggioranza dei casi e ... quasi sicuramente è quello visto che sul bus I2C sono obbligatorie !!!

Guglielmo

Brunello:
Non mi pare che il pin RESET abbia una PullUp interna,

Sai che hai ragione? Ho appena testato e RESET va collegato a +5V.

A parte questo, il tuo programma funziona, se usi il pin 2 l'I/O corrispondente è GPA2.

In questo thread non ne ho azzeccata una :-[.

Ciao a tutti, ritorno per lo stesso problema. Mi sono procurato le resistenze e le ho inserite in questo circuito. Sono da 4.7 kohm. Eppure ancora non funziona. Adesso alle uscite GPB1 a GPB7 mi da 1.5 V e non piu' zero.
Di seguito vi posto il circuito che ho seguito su internet e il programma (uguale allo screen precedente)

#include <Wire.h>
#include <Adafruit_MCP23017.h>

Adafruit_MCP23017 mcp;
 
void setup() {  
  mcp.begin();      
  Serial.begin(9600);

  mcp.pinMode(4, OUTPUT); 
}



void loop() {
  mcp.digitalWrite(4, HIGH);
  delay(1000);
  mcp.digitalWrite(4,LOW);
  delay(1000);
}

mcp20317_schemss.jpg

Ora stai usando il pin 4, che corrispondente a GPA4, hai messo il led su quello?

Hai collegato il reset a +5V come detto sopra?

Nel datasheet di question integration c'è scritto che è GPB4...
Inoltre si. Ho seguito esattamente l'immagine che ho postato, mettendo 15,16,17 a gnd e 18(RESET) a 5V... Aggiunto le resistenze di pull up da 4.7 kohm...

Quello è il pin 4 fisico (che poi è GPB3). La libreria numera i pin diversamente:

0 ... 7 = GPA0 ... 7
8 ... 15 = GPB0 ... 7