Disturbo tapparelle su i2c (sull'orlo dell'esaurimento nervoso)

Ciao a tutti, solitamente risolvo i miei problemi cercando qua e la sui forum, ma questa volta sto diventando pazzo.

Sto realizzando un progetto che fa uso di alcuni componenti su linea i2c. Ho dovuto usare un cavo molto lungo (più di quanto teoricamente previsto per i2c) ma essendo di buona qualità funziona tutto.

Il problema è questo: quando apro o chiudo le tapparelle elettriche, ogni tanto, i componenti i2c impazziscono. Ho provato di tutto: condensatori sulle linee di alimentazione, abbassamento dei pullup su SDA e SDC, schermatura del cavo (questo ha risolto il problema per qualche giorno ma oggi è inspiegabilmente riapparso). Utilizzando una versione modificata della libreria Wire impedisco il blocco di arduino, però poi devo comunque resettarlo affinchè ricominci a funzionare: quando si impalla infatti, la linea i2c non si "riprende" più nemmeno quando il disturbo è finito.

Ho pensato che il problema potesse essere sulla linea elettrica, ma anche alimentando arduino a batteria, il problema persiste. Immagino quindi si tratti proprio di un disturbo elettromagnetico sulla linea i2c.

Visto che sono costretto a usare un filo lungo e che a quanto pare il fenomeno si verifica SOLO occasionalmente con le tapparelle, avete qualche consiglio?

Grazie a chi vorrà aiutarmi (evitandomi l'internamento).

Ciao

Garo

Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0

@ inggaro :Il bus I2C è progettato per lavorare su distanze massime di 10-20 cm ... tu sei totalmente fuori specifiche è ti meravigli che funziona male ??? :astonished: :astonished: :astonished:

Se vuoi andare a distanze maggiori, non basta "... una cavo di buona qualità", ma occorrono appositi chip per l'estensione del bus I2C come il P82B715.

Fai un po' di ricerche e vedrai che se ne è già parlato anche sul forum ...

Guglielmo

evitandomi l'internamento

Ormai i manicomi non esistono più, ti ritroveremo a girare per le strade a urlare cose insensate come gli altri :smiley: :smiley: :smiley:

nid69ita:
Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Scusate procedo alla presentazione! non sapevo...

Ciao e grazie innanzitutto,
non mi meraviglio che funzioni male :slight_smile: So anche che esistono i chip appositi e probabilmente ne comprerò uno (anzi due, immagino che ne serva uno ad ogni capo giusto?).

In ogni caso temo che anche con il chip non funzionerà. Mi spiego: in condizioni normali funziona benissimo, il problema si presenta solamente con le tapparelle, che a quanto ho letto in giro su internet danno MOLTI problemi di natura elettrica con le interferenze.

La cosa ancora più strana è che dopo aver schermato a massa il cavo che porta l'i2c ha funzionato perfettamente per giorni: ieri ho rimesso a posto i cavi nella loro posizione definitiva e da quel momento è ricominciato il problema.

Cosa potrei fare per ridurre il disturbo ulteriormente? Credo basti poco, visto che il problema si presenta solo occasionalmente...

Ciao e grazie

gpb01:
@ inggaro :Il bus I2C è progettato per lavorare su distanze massime di 10-20 cm ... tu sei totalmente fuori specifiche è ti meravigli che funziona male ??? :astonished: :astonished: :astonished:

Se vuoi andare a distanze maggiori, non basta "... una cavo di buona qualità", ma occorrono appositi chip per l'estensione del bus I2C come il P82B715.

Fai un po' di ricerche e vedrai che se ne è già parlato anche sul forum ...

Guglielmo

[quote author=gpb01
Fai un po' di ricerche e vedrai che se ne è già parlato anche sul forum ...
[/quote]

Dimenticavo, ho già letto decine di post sul tema, e l'unica cosa che mi ha aiutato per un periodo è stato un suggerimento di schermatura (piuttosto ovvio, ma non ci avevo pensato). Ho anche abbassato la velocità dell'i2c ma niente da fare...

inggaro:
Cosa potrei fare per ridurre il disturbo ulteriormente? Credo basti poco, visto che il problema si presenta solo occasionalmente...

Semplicemente NON usare il bus I2C che non è nato per queste cose, ma, dovendo portare dati a notevoli distanze, usare l'RS485 che è notevolmente immune da disturbi.

Poi ...
... ognuno si fa del male come crede ]:smiley:

Guglielmo

P.S. : e non venirmi a dire che lo fai per ragioni di velocità perché ... stiamo parlando di comandare "tapparelle"

gpb01:
Semplicemente NON usare il bus I2C che non è nato per queste cose, ma, dovendo portare dati a notevoli distanze, usare l'RS485 che è notevolmente immune da disturbi.

No, non è per comandare le tapparelle: è una sorta di antifurto, e purtroppo devo tenere per ragioni di spazio il pannellino di controllo (con LCD, lettore di NFC e breakout per tasti capacitivi, tutti su i2c) molto distante da dove c'è l'arduino. Le tapparelle interferiscono quando le uso, in modo indipendente dall'arduino.

Se si può usare un altro metodo di trasmissione va bene, però devo comunque poi ricondurlo all'i2c per pilotare i tre componenti di cui sopra! Come potrei fare?

inggaro:
Se si può usare un altro metodo di trasmissione va bene, però devo comunque poi ricondurlo all'i2c per pilotare i tre componenti di cui sopra! Come potrei fare?

Remotizzare :smiley:

Basta un Arduino Micro messo dentro al pannellino che parla con il master in RS485 (ti ricordo che la RS485 è un bus utilizzabile in multi-point) e poi comanda LCD, lettore di NFC e breakout per tasti capacitivi in I2C localmente.

Guglielmo

Secondo me si perde solo tempo quando l'utente non specifica i cablaggi. non sappiamo dove ha messo i master gli slave, quanti conduttori ci sono, un cavo solo che attraversa tutti i cassonetti, un cavo per ciascuna tapparella che parte dal master, le distanze che ha usato, come ha strutturato l'impianto. Come si fa a suggerire un utilzzo diverso dei conduttori?
Non ci capisce lui e ci dobbiamo capire noi

Fai un maledetto disegno e specifica i conduttori da dove partono a dove arrivano, quante tapparelle hai, dove sono locati i dispositivi e quali dispositivi, i comandi elettrici 220 e quelli a relè....ecc ecc

ciao

pablos:
Come si fa a suggerire un utilzzo diverso dei conduttori?

Pablos, io parlo delle specifiche dei bus e di quali sono le possibili soluzioni ... non mi interessa il caso particolare !
E' un problema dell'utente sapere poi quello che ci vuole fare ... ]:smiley:

Guglielmo

Si ma se lui ha portato dei cavi schermati per ciascuna tapparella con 4 conduttori può mantenere i2c e lasciare le distanze, ma questo non lo sappiamo

pablos:
Si ma se lui ha portato dei cavi schermati per ciascuna tapparella con 4 conduttori può mantenere i2c e lasciare le distanze, ma questo non lo sappiamo

Basta chiedere e spiego...:slight_smile:

Comunque, ribadisco che l'impianto NON controlla le tapparelle. Le tapparelle creano il disturbo quando le aziono in modo indiretto.

L'arduino è semplicemente una sorta di antifurto. All'arduino (MEGA) arrivano 5 sensori (sono normali contatti magnetici da antifurto) che vanno alle finestre e alla porta di ingresso, rilevandone l'apertura/chiusura; l'arduino poi controlla un allarme sonoro e una interfaccia ethernet. Dall'arduino parte quindi il cavo i2c che va al pannello con lcd/nfc/controllore capacitivo touch (sono solo questi 3 i componenti i2c). Ribadisco, nessuna interazione diretta con le tapparelle. Se l'impianto non è chiaro posso certamente fare un disegno, ma credo sia talmente semplice che si capisce anche a parole!

Nel frattempo forse ho capito qualcosa in più: ieri ho sistemato i sensori magnetici alle finestre, ancorandoli bene (filo compreso) al telaio in alluminio, prima - quando funzionava tutto - erano un po' staccati dal telaio. I sensori sono semplici interruttori aperto/chiuso. Tuttavia, temo che possano essere loro che portano l'interferenza all'arduino, vista la loro vicinanza ai motori; ho provato a scollegarli ed in effetti l'i2c in questo modo sembra reggere (dico sembra perchè gli errori sono random). Quindi ho provato a schermarli e la situazione è migliorata, ma dopo vari tentativi di disturbo il display ha fatto qualche scherzo, tuttavia senza bloccarsi. Non voglio cantare vittoria ma forse la strada è quella. Vicino ai sensori c'è un pezzo di filo non schermato, ora provo a schermarlo tutto.

Secondo voi è possibile che sia questa la causa?

Mi raccomando la schermatura del cavo va collegata alla massa da un solo lato e possibilmente su una massa metallica di discreta grandezza collegata a gnd e non direttamente sul gnd del tuo circuito
Edit
Puoi sfruttare la terra del 220v

Questo si che è spiegare e fare chiarezza, quindi le tapparelle motorizzate non centrano con arduino fin qui è chiaro XD
Però come ti è stato detto l' I2C non è concepito per lavorare a lunghe distanze poichè nel tuo caso si parla di 5v in altri 3v che si perdono lungo il cavo, per di più bastano pochi mV di disturbo elettromagnetico ambientale dato che i cavi fanno da antenna per ottenere valori di comunicazione errati.
Il bus extender suggerito, non farebbe altro che convertire i segnali da 5v a 12v per poi riportali a segnali riconoscibili dal micro 12v a 5v, un conto è alterare 3-5v con disturbi, un altro è alterare un segnale con 12v, il principio di base è questo come il 485, sono solo protocolli diversi.
Dovresti solo modificare i circuiti ai capi dei cavi ma il resto rimane come è ... anche se risolvi con un aumento della schermatura, sei tranquillo a inserire l'allarme e andare via una settimana?
Per quanto riguarda la mia exp personale, basta un posto di blocco dei carabinieri per mettere fuori uso telecomandi dei cancelli elettrici e telecomandi delle automobili con i loro ricetrasmettitori per alcune ore.

ciao

Per i testardi esistono dei convertitori I2C/RS485! :grin:

Intanto studiati questo:

http://pidome.files.wordpress.com/2013/10/phillips-talking-about-long-i2c-busses.pdf

Puoi farlo con un semplice SN7433, + un traslatore di linea RS485 (uno per dati ed uno per il clock), oppure con un integrato I2C to RS485 converter, dedicato.

Puoi isolare galvanicamente le masse in questo modo:

Oppure usare un extender Philips come ti hanno consigliato!

lucaleo:
Puoi sfruttare la terra del 220v

A me hanno sempre detto di lasciare perdere il cavo di terra dell'impianto elettrico perché può essere pieno di "schifezze" e disturbare il funzionamento dei circuiti ad esso collegati.

Quote from: lucaleo on May 18, 2014, 02:36:49 pm
Puoi sfruttare la terra del 220v

A me hanno sempre detto di lasciare perdere il cavo di terra dell'impianto elettrico perché può essere pieno di "schifezze" e disturbare il funzionamento dei circuiti ad esso collegati.

:astonished: :astonished: :astonished:
ricordo che la terra è fatta apposta per scaricare a terra qualsiasi tensione tocchi le carcasse metalliche ad essa collegate... e si parla di bassa tensione, sufficienti a friggere un Arduino (che funziona a bassissima tensione). Il differenziale interviene quando la corrente dissipata supera la sua soglia di intervento, che di solito è di 30mA, ma spesso sulla terra si trovano tensioni pericolose per i componenti elettronici (e non solo!). Vi posso assicurare che da installatore ho preso delle virgole sul giallo verde che non ve le raccomando! XD
In ogni caso se colleghi la massa del tuo circuito alla terra e si rompe un flessibile della lavatrice che manda la scheda in corto con la carcassa non credo che l'arduino ne gioisca! :wink:

Evidentemente l'impianto di terra non porta bene a terra :smiley:
se la corrente preferisce passare su di te per andare a terra vuol dire che di suo non ci va bene, oppure eri tu a essere carico
Per le possibili tensioni li sopra funziona come per un fulmine, se ci arriva una qualche scarica il riferimento gnd si alza e di conseguenza ttto il resto del circuito fa la stessa cosa
N ogni caso lui può collegare solo lo schermo dei cavi alla terra e non il gnd del circuito e così taglia la testa al toro

edit
anche a me queste cose sono state spiegate e potrei sbagliarmi, ma non credo però

Edit2
Ho chiesto info più precise
La messa a terra del gnd è una cosa complessa e dipende molto da come è realizzato l'impianto quindi meglio evitare senza jnfo precise
A messa a terra degli schermi invece va bene
Scusate per le jnfo imprecise