Domanda:
Come si utilizzano due LCD I2C con 4 pin?
Konstantinos
2015-05-28 03:57:56 UTC
view on stackexchange narkive permalink

Ho due schermi LCD I2C:

  • uno con 2 linee
  • uno con 4 linee.

Entrambi ne hanno 4 pin ciascuno: GND , VCC , SDA , SDL . Collego SDA e SDL rispettivamente a A4 e A5 e visualizzo il testo su ciascuno di essi con:

  #include <Wire.h> # include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd (0x27,16,4);  

Ma come posso usarli entrambi stessa ora?

Ho collegato il secondo SDA e SDL a A2 e A3 , ma a quanto pare devo fornire loro l'indirizzo giusto (come 0x27 ), giusto?

Tuttavia, mentre entrambi sono connessi, l'utilizzo di I2C_Scanner mostra solo un dispositivo:

  Scansione ... Dispositivo I2C trovato all'indirizzo 0x27! 

Cosa mi manca?

Tre risposte:
SDsolar
2016-12-12 10:23:27 UTC
view on stackexchange narkive permalink

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.

Ignacio Vazquez-Abrams
2015-05-28 04:19:31 UTC
view on stackexchange narkive permalink

Non puoi collegare dispositivi I 2 C a pin arbitrari; devono essere collegati a SDA e SCL e forniti di indirizzi diversi oppure è necessario utilizzare il software I 2 C. Scopri come assegnare al secondo dispositivo un indirizzo diverso, quindi creare un'istanza di un altro LiquidCrystal_I2C con il nuovo indirizzo per poterlo utilizzare.

Ho scoperto che posso connettermi a `A4`,` A5` fino a 121 dispositivi I2C. Non ci sono altre porte per "SDA", "SCL". Dev'esserci un modo per modificare l'indirizzo, ma non riesco a trovarlo. Alcuni altri display LCD hanno pin "A0", "A1", "A2": ponticellandoli si cambia il loro indirizzo. Tuttavia, entrambi i miei display non li hanno. (informazioni su http://forum.arduino.cc/index.php?topic=158312.0) Continuerò a cercare ...
Hai un collegamento a una pagina del prodotto?
Sì, è questo: http://www.ebay.co.uk/itm/181722213160?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT L'altro proviene da un kit Sunfounder e non riesco a trovare un collegamento specifico, solo che è un "I2C LCD 1602".
Non sprecare il tuo tempo, però, troverò qualcosa e te lo farò sapere. :)
Riesci a vedere ponticelli o resistori sul lato inferiore della scheda?
Vuoi dire come C1, C2 a destra o C3-4, R6-8 in basso a sinistra? http://s4.postimg.org/6h8ajc21p/lcd.jpg
Sulla scheda adattatore, non sul display stesso.
Per scheda adattatore intendi l'altro lato della piccola scheda rossa? Beh, non posso rimuoverlo per dare un'occhiata più da vicino, ma sembra che non ci sia niente sotto.
I pin 1, 2 e 3 selezionano l'indirizzo I2C del dispositivo. Se ne sollevi uno dalla scheda e saldi un filo a terra, puoi cambiare l'indirizzo.
Ok, prendo un saldatore e lo farò. Quindi scollegherò uno di loro e lo collegherò a terra. Quindi utilizzare I2C Scanner per trovare il nuovo indirizzo. A proposito, come lo sapevi?
Una pagina sul web ha detto che la maggior parte di questi moduli utilizza un PCF8574 (che la tua foto ha confermato), e da lì è solo questione di leggere la scheda tecnica.
Nella definizione LiquidCrystal è possibile specificare i pin da utilizzare per SDA e SCL. Dai un'occhiata alla mia risposta sulla modifica degli indirizzi sullo zaino I2C. A0, A1, A2 possono essere cortocircuitati insieme per modificare i bit meno significativi dell'indirizzo I2C
Specificare i pin come qualcosa di diverso da `SDA` e` SCL` ha senso solo se hai effettivamente I2C in esecuzione su quegli altri pin. Pochissimi Arduino hanno hardware I2C su più di una coppia di pin.
AMADANON Inc.
2015-05-28 08:31:37 UTC
view on stackexchange narkive permalink

Potresti essere in grado di collegarli in parallelo, se riesci a tenere alto l'orologio (SCL) (uno alla volta).

Inserisci un diodo per impedire che anche l'altro vada in alto.

Scegli un pin di riserva sul tuo arduino (userò il pin digitale 7 per il dispositivo A, 8 per il dispositivo B, ma non importa quale). Quando vuoi parlare con il dispositivo A, assicurati che il pin 7 sia in modalità ad alta impedenza e che 8 sia alto. Parla con il dispositivo A. Smetti di parlare con il dispositivo A. Metti il ​​pin 8 in modalità alta impedenza e il pin 7 su alto. Parla con il dispositivo B. Lavare, risciacquare, ripetere. Finché un dispositivo vede il suo orologio al massimo, non ascolterà né parlerà.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...