Arduino Uno + LCD I2C blocca codice

Chiedo vostro aiuto..come da titolo ho un Atmega328p su basetta personalizzata. Fotoaccoppiatori per isolare ingressi e uscite, che tramite un uln2003 mi attivano dei relè. Un stadio di alimentazione mi alimenta un display LCD gestito in I2C con un cavo di 30cm, il bus è isolato dal chip ADUM1251. In questo test a banco, le uscite dei relè (con snubber e varistore), mi attivano dei teleruttori a 24Vac senza carichi collegati. Se avvicino il display ai teleruttori, il codice si blocca e ovviamente il display mi genera caratteri causali. Solo un reset fa ripartire il codice.

Ora, avendo isolato il bus e la sua alimentazione (ma con gnd comune), una reazione del genere non me l'aspetterei che blocchi il codice, ma eventualmente solo la visualizzazione. Facendo ricerche ho visto c'è stata una modifica anni fa nell'introdurre alla libreria wire un twi_timeout_guard per evitare problemi di loop infiniti...quindi non ci dovrebbe essere più questa casistica.

Ora, sicuramente il problema nasce da impulsi elettromagnetici che il display capta dal campo generato dalle bobine a 24Vacdei teleruttori. Però non saprei cosa fare per non far bloccare il codice ad arduino. Senza teleruttori collegati alle uscite dei relè, tutto funziona alla perfezione. Che il disturbo entri dal GND? è l'unico punto in comune con tutti i circuiti in gioco..qualche idea?

Scrivendo questo mi è venuto in mente questo test che farò in serata: scollego il bus dati lato atmega, tengo attiva solo l'alimentazione del display e verifico se il blocco si ripete. Se si ripete il problema, probabilmente risiede nel lato alimentazione, e probabilmente dal GND visto che dai 12V forniti dall'alimentatore alimento un 7805 per la linea lcd e attraverso un diodo alimento il secondo 7805 per il solo arduino..Vi tengo aggiornati!

Buongiorno,

... so che sei un vecchio utente della sezione Italiana del forum :slight_smile: , ma ... purtroppo non riesco a trovare il tuo post di presentazione :confused:, per cui, cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, che negli anni è piuttosto cambiato (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

Ciao Guglielmo..nessun problema, presenta zione rifatta!
Grazie

1 Like

E' un problema noto e noi qui sempre suggeriamo di utilizzare DUE alimentazioni separate senza nulla in comune (nemmeno GND) con l'ausilio di opto-accoppiatori.

Ad esempio, esistono già fatte schedine relè con tale logica che si collegano in questo modo:

Guglielmo

Capisco..non sono riuscito a fare la prova menzionata nel precedente post..però una cosa che ho dimenticato ma importante, da aggiungere, è che il problema si presenta solo con il display i2c collegato alla scheda.

Nel momento che lo scollego, non ho piu il codice che si blocca. Quindi penso che il display, con la sua basetta funge da "antenna" e capta i campi magnetici dei teleruttori..però mi rimane da definire se la problematica entra nel gnd o nel bus i2c che però è isolato dal chip Adum.
Vedendo l'alimentazione in oscilloscopio del ramo 5v che alimenta esclusivamente l'atmega, ho una alimentazione pulita quando i teleruttori vanno sotto. Quindi penso che il problema sia in qualche parte, tra libraria wire o del display i2c, dove il codice vada in fase di lettura per qualche funzione nel bus i2c (una conferma ricezione o verifica) e si blocchi perchè non riceve valori corretti...
Dico questo perchè creando disturbi manuali tra sda e scl sembrerebbe si ripeti puntualmente questa casistica senza che i teleruttori vadano sotto..

Chiedo se la libreria wire scrive e basta sul bus o aspetta riscontri dal chip interrogato sul bus? In tal caso potrebbe essere il mio problema..però a lcd scollegato (rimanendo tutto attivo dal lato software) il codice non si blocca mai..

ah, ricorda che il bus I2C è nato per la comunicazione tra integrati sulla stessa scheda e che portarlo in giro, specie con una filatura da 30 cm, non è mai cosa buona :roll_eyes:

Guglielmo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.