LCD connesso su i2c: Arduino va in crash

Buongiorno a tutti.

Sono nel panico. :~ Dispongo di un Arduino Uno e di un display LCD con chip per comunicazione i2c (http://www.robot-italy.com/en/display-lcd-16-x-2-blu-i2c.html)

Quando ho connesso l'LCD (tramite A4 e A5 per la comunicazione i2c), utilizzando la libreria Liquid_Crystal_i2c (http://www.dfrobot.com/wiki/index.php?title=I2C/TWI_LCD1602_Module_(SKU:_DFR0063) ) non mi ha dato problemi.

O meglio. Se sui cavi di connessione ci passavo le dita per sbaglio, Arduino andava in crash. Il programma si bloccava e dovevo spegnere e riaccendere l'alimentazione (la usb del pc).

Accortomi della cosa, ho fatto i cablaggi per bene (guaina termorestringente, etc...) e non ho più riscontrato problemi.

Adesso ho inserito il progetto in un involucro metallico (acciaio inox) e fra Arduino e LCD c'è un cavo (schermato con schermo connesso a ground dell'alimentazione, tranne gli ultimi 10 cm perchè mi è impossibile altrimenti collegarmi all'LCD) di una lunghezza di circa 60-70cm. Intorno ci sono possibili fonti di "rumore": ad esempio vicino all'LCD c'è un pulsante di emergenza a 24Vac. Su consiglio di qualche forum sulla rete, ho inserito due resistenze di pull-up fra +5V e A4 e A5.

Adesso Arduino si blocca apparentemente senza che io faccia nulla, qualche volta si e qualche volta no, qualche volta in conseguenza alla pressione del pulsante di emergenza, altre volte no. Temo sia un problema di interferenza del segnale.

C'è qualcuno più esperto di me in materia che può consigliarmi? Scusate se non sono stato chiaro e nel qual caso domandate tutti i dettagli che volete.

PS il codice prevede le operazioni standard di inclusione libreria, inizializzazione, e uso di setCursor e print, niente di più.

Ringrazio in anticipo gli amici del forum. Ciao.

nfloppy: ... Su consiglio di qualche forum sulla rete, ho inserito due resistenze di pull-up fra +5V e A4 e A5.

Più che "su consiglio di qualche forum sulla rete", le resistenze dovevi inserirle perché fanno parte delle specifiche del bus I2C. Inoltre occhio alle distanze ... il bus I2C è fatto per brevi collegamenti e la capacità del bus è bene che sia inferiore ai 400 pF.

Che valori di resistenze hai inserito ???

Guglielmo

P.S. : I2C-bus specification and user manual ... sezione 7.1

5.6 kohm ciascuna.

In realtà non le avevo messe perchè nella descrizione della scheda dell'LCD non lo richiedeva, dicendo che è sufficiente la connessione a +5V/Ground e A4 e A5 di Arduino (la scheda oltre all'LCD ha l'integrato PCF8574 che ha un suo circuito ausiliario, quindi avevo dedotto che fossero state incluse).

Comunque o con, o senza, non è cambiato nulla.

Adesso faccio un pò di prove per cercare di determinare almeno che effettivamente il crash è causato dall'LCD.

Se il problema si dovesse confermare, che tipo di connessione LCD (prendendone un altro naturalmente) consigliate (tenendo presente l'ambiente "rumoroso", i 60 cm di distanza, etc...? Con che protocollo? (che non sia affamato di pin, ma che me ne occupi 2 o 3...).

Mah … prova ad abbassarle … prova a scendere anche a 2.2K e vedi che succede …

Altrimenti è un bel problema … ti tocca fare il collegamento classico che … usa un bel po’ di pin … :~

Guglielmo

Intanto grazie Guglielmo per l'assistenza.

Ho scollegato l'LCD, lasciando il resto della roba connessa nella zona distante (qualche pulsante che va su pin digit e analog e un paio di sensori che vanno sull'analogica) e l'LCD l'ho collegato con un cavetto da 10 cm direttamente sull'Arduino.

Manco a dirlo, non va più in crash. Quindi credo proprio che il problema sia la linea troppo lunga che mi diventa un'antenna ricevente le porcherie che ho tutt'attorno.

Ritieni che anche una comunicazione seriale possa essere affetta dagli stessi disturbi? Altrimenti potrei sostituire l'LCD con uno di questo tipo: http://www.robot-italy.com/it/lcd05-16x2-b-serial-i2c-display-16x2-blue-background.html: dice che sia su seriale che su i2c necessita, oltre che dell'alimentazione, di 2 cavi.

Purtroppo sono ancora decisamente inesperto di comunicazioni e protocolli...

Mmm ... prima di mandare tutto all'aria, potresti fare una prova ... usare una coppia di I2C Bus Externder ... sono integrati economici che ti permettono di avere collegamenti I2C fuori dalle lunghezze standard ... QUESTI ;)

Credo che se fai qualche ricerca qui sul forum .. se ne è già parlato ... :roll_eyes:

Guglielmo

Guardo un pò.

Intanto davvero grazie per la disponibilità.