Grazie a tutti dei suggerimenti! Direi che utilizzare l'RS485 o gli extender philips è la mia ultima possibilità, in quanto mi richiederebbe una modifica abbastanza profonda ai circuiti che ho già realizzato (in particolare l'RS485).
Premetto che il crash dell'i2c non pregiudica il funzionamento dell'arduino, visto che utilizzo una libreria Wire modificata non bloccante, ma solo quella del pannellino di controllo con lcd e tasti.
Ho fatto ulteriori prove e sembra che i colpevoli siano proprio i sensori alle finestre che portano il disturbo all'arduino. Se li scollego non ho nessun problema. In particolare il maggior colpevole sembra la tapparella del salotto, che è più grossa e probabilmente il motore è più potente. Ora provo a schermare i cavi alla perfezione, anche nell'ultimo tratto vicino al sensore che al momento non è schermato.
Mi chiedevo però questo: secondo voi ha senso "disaccoppiare" il segnale dei sensori? intendo, essendo collegati come dei normali interruttori, se mettessi un condensatore elettrolitico tra il gnd e il segnale che va nell'arduino per ogni sensore, non limiterei il danno direttamente a livello del circuito? Nel caso, che capacità mi suggerite?
inggaro:
Grazie a tutti dei suggerimenti! Direi che utilizzare l'RS485 o gli extender philips è la mia ultima possibilità, in quanto mi richiederebbe una modifica abbastanza profonda ai circuiti che ho già realizzato (in particolare l'RS485).
Premetto che il crash dell'i2c non pregiudica il funzionamento dell'arduino, visto che utilizzo una libreria Wire modificata non bloccante, ma solo quella del pannellino di controllo con lcd e tasti.
Ho fatto ulteriori prove e sembra che i colpevoli siano proprio i sensori alle finestre che portano il disturbo all'arduino. Se li scollego non ho nessun problema. In particolare il maggior colpevole sembra la tapparella del salotto, che è più grossa e probabilmente il motore è più potente. Ora provo a schermare i cavi alla perfezione, anche nell'ultimo tratto vicino al sensore che al momento non è schermato.
Mi chiedevo però questo: secondo voi ha senso "disaccoppiare" il segnale dei sensori? intendo, essendo collegati come dei normali interruttori, se mettessi un condensatore elettrolitico tra il gnd e il segnale che va nell'arduino per ogni sensore, non limiterei il danno direttamente a livello del circuito? Nel caso, che capacità mi suggerite?
Ciao e grazie ancora
Ciao,in passato ho avuto anche io vari problemi tentando di usare un collegamento i2c per collegare parti distanti fra loro;in particolare il sistema era composto da : arduino->i2c extended -> i2c extender -> scheda remota con a bordo due pcf8574 per avere ingressi ed uscite su bus...il cavo di collegamento lungo circa 20 metri...tutto funzionava bene,nel 95% dei casi...se la comunicazione cadeva per qualche motivo l'arcuino si imballava(usavo anche io una libreria aire modificata non bloccante,mi pare si chiamasse WSWire)e mi trovavo dei valori tutti sballati in eeprom,mai capito perché ma era così...ho provato tutti gli accorgimenti del caso,cavi,schermature,cavi ancora più performanti,ma il risultato non è cambiato...quando mi sono stufato,ho fatto una scheda remota con un arduino micro,due transceiver RS485,libreria Modbus,e da allora MAI più un problema.....se vuoi il mio consiglio non stare a perdere tempo che tanto non risolverai mai al 100%,passa fin da subito ad un altro tipo di protocollo e dormi sonni felici!!
ibbba:
se vuoi il mio consiglio non stare a perdere tempo che tanto non risolverai mai al 100%,passa fin da subito ad un altro tipo di protocollo e dormi sonni felici!!
A questo punto siamo all'ultima spiaggia... se non funziona l'ultima modifica che ho fatto mi sa che quella è l'unica via!
In ogni caso: dopo schermatura perfetta il problema si è attenuato ma non sparito. Ho aggiunto quindi dei condensatori da 10u tra il GND e il pin di input dell'arduino e... il problema sembra sparito. Probabilmente l'intuizione era giusta, il disturbo che arriva dai sensori viene attenuato dal condensatore (tanto mi interessa solo rilevarne lo stato aperto/chiuso) e non da più fastidio all'i2c.
Vediamo se nel tempo la soluzione si dimostra definitiva... Altrimenti mi sa che passo a soluzione aruino micro remotizzato anche se devo riscrivere metà del codice e rifare i circuiti
ibbba:
se vuoi il mio consiglio non stare a perdere tempo che tanto non risolverai mai al 100%,passa fin da subito ad un altro tipo di protocollo e dormi sonni felici!!
A questo punto siamo all'ultima spiaggia... se non funziona l'ultima modifica che ho fatto mi sa che quella è l'unica via!
In ogni caso: dopo schermatura perfetta il problema si è attenuato ma non sparito. Ho aggiunto quindi dei condensatori da 10u tra il GND e il pin di input dell'arduino e... il problema sembra sparito. Probabilmente l'intuizione era giusta, il disturbo che arriva dai sensori viene attenuato dal condensatore (tanto mi interessa solo rilevarne lo stato aperto/chiuso) e non da più fastidio all'i2c.
Vediamo se nel tempo la soluzione si dimostra definitiva... Altrimenti mi sa che passo a soluzione aruino micro remotizzato anche se devo riscrivere metà del codice e rifare i circuiti
fai un po' di test intensivi,poi vedi che succede...per il codice credimi è molto semplice,le librerie simplemodbusmaster e simplemodbusslave sono molto ben fatte,ricche ti controlli di diagnostica che ti spingono ad aggiungere sempre nodi alla rete...per l'hardware,beh quello è un po' più complesso ma non impossibile....
Nel caso possa essere utile a qualcuno, confermo che dopo alcune settimane di utilizzo intensivo tutto funziona alla grande con i condensatori sull'ingresso dei sensori (e non sull'i2c!). L'i2c funziona benissimo anche se il cavo è lungo circa 15-20mt. Ciao!
Dipende molto dalla costruzione del contatto in gioco, mettere un C antirimbalzo sugli input derivanti da contatti meccanici o pulsanti è buona norma, però da qui a dire che potrebbe essere utile a qualcuno senza nemmeno scrivere un valore o un disegnino .....