Errore Display 20x4 non specificato

Salve a tutti, vi pongo subito il mio problema, ho automatizzato una macchina utensile usando Arduino Mega, e per impartire alcuni comandi ho sfruttato un keypad con un display lcd 20x4 con modulo i2c, ho scaricato un apposita libreria, ho fatto qualche prova in casa e tutto funziona bene… Si tratta di una segatrice automatica, e in un ciclo che ho definito “continuo” ovvero fino ad esaurimento della barra da tagliare, dopo alcuni tagli il display si “pulisce” ovvero scompaiono tutte le scritte e resta solo l’illuminazione… ciò però non ferma l’esecuzione del programma anzi! si può passare da un ciclo all’altro addirittura usare il tastierino (senza veder niente ovviamente) e la macchina continua a fare il suo dovere… smantellando sul trimmer dell’i2c sono riuscito a far comparire le scritte che stanno sotto la schermata vuota e sono queste (allego foto). Questo è quanto, ho già guardato e riguardato lo sketch ma non noto nulla di strano anche perché l’unico comando che viene dato al display è quello di far comparire qualche scritta e basta…
ps: non sapendo se si tratta di un problema hardware o software l’ho postata in quella che mi sembrava più adatta, scusate eventuali errori e grazie a tutti per le risposte.

È un concorso per indovini? oppure perché non ci dai lo sketch e il schema elettrico?

Ciao Uwe

Ammesso che lo sketch sia corretto, sembrerebbe il solito problema di disturbi elettrici, provocati dal motore della segatrice.

Come dice il buon Uwe, è necessario almeno lo schema.

E' un classico. Disturbi elettrici.

Ogni tanto si vedono post con problemi di questo tipo: sarebbe buona cosa avere dei settori di questo forum dove ci sono le soluzioni a tutti questi tipi di problemi, senza andare tutte le volte a cercare con la barra Search.

Il mese scorso avevamo trovato una modifica da fare sul display:

  • Tra piedino 6 e piedino 1 - Condensatore .1
  • Tra piedino 6 e piedino 2 - Resistenza 4k7

... e così spariscono tutti i problemi !!!

avete ragione chiedo venia, questa è la parte di sketch che gestisce il ciclo in cui si verifica l’errore… lo sketch è molto lungo e diviso in più file per questo posto solo la parte interessata, se vi occorre altro ditemi.

void ciclo_automatico_continuo () {

      tastierino = false;
      valore_micro_salita = digitalRead(micro_salita);
        Indietro_automatico ();         
            if(valore_micro_salita == LOW ){
        
              int valore_pulsante_start = digitalRead(pulsante_start);
                  if(valore_pulsante_start  == LOW){ 
    
                      start = true;
           while(start==true){ 
                  digitalWrite(LED_START,HIGH);
                  lcd.setCursor(0,3);
                  
                  Chiusura_Morsa_Automatica ();
                  delay(100);
                  valore_Test_Morsa_Automatica = Test_Morsa_Automatica();
                    valore_micro_salita = digitalRead(micro_salita);
                  
                if(valore_Test_Morsa_Automatica == 1 && y<1 && valore_micro_salita == LOW){
                digitalWrite(chiusura_morsa_lama,LOW);
                delay(200);
                Avanti_Automatico();}
                  
                else if(valore_Test_Morsa_Automatica == 0 && y<1 && valore_micro_salita == LOW){
                       digitalWrite(chiusura_morsa_lama, LOW);
                      digitalWrite(chiusura_morsa_aut, LOW);
                      digitalWrite(rele_lama, LOW);
                      digitalWrite(rele_pompa, LOW);
                      digitalWrite(LED_START,LOW);
                      delay(500);
                      Indietro_automatico();
                    
                      start = false;}
                  
                  delay(100);
                  valore_Avanti_Automatico = Test_Avanti_Automatico();
                  if(valore_Avanti_Automatico == 1 && y<2){
                  Chiusura_Morsa();
                  delay(200);}
                  
                  

                  Test_Stato_Morsa = Test_Morsa();  
                  if(Test_Stato_Morsa == 1 && Counter_Discesa < 1 && y==2){
                  Discesa_Lama();}

                  valore_micro_discesa = digitalRead(micro_discesa);
                  if( valore_micro_discesa == LOW && Counter_Stop < 1){
                  contatore_cont++;
                  lcd.print("PEZZI TAGLIATI=") ;
                  lcd.print(contatore_cont);
                  Stop_Lama_Aut();
                  Azzeramento_auto_cont ();


                  }
                    
} // fine while      
                  
                   }
                   }
                  
    
}// fine loop

il fatto è che essendoci il modulo i2c non ho i pin 6 e 1… poi che io sappia il modulo i2c dovrebbe già avere dei filtri per i disturbi, se provassi a mettere resistenze di pulldown sui pin sda e scl ? magari i disturbi si verificano all’uscita di arduino…

Manca il condensatore da 100n in parallelo a C2.

Non hai inserito i diodi in anti parallelo sugli avvolgimenti dei relè: servono a preservare i transistor pilota.

Comunque, è probabile che il disturbo derivi dall'apertura dei contatti dei relè: dovresti inserire un diodo TVS (ad esempio BZW06-23) in anti parallelo sui contatti.

Anche con il modulo i2c io specificavo sul display, dove il modulo I2c è saldato per mezzo di un pettine di 16 contatti, solitamente numerati (1 dalla parte del connettore I2c e 16 dalla parte opposta).

Ecco, su questo pettinino ci saldi i due componenti che ti ho detto, poi mi dici.

Il problema mi era saltato fuori perchè avevo collegato una interfaccia I2c con una piattina di 5 cm. al display e avevo i tuoi stessi problemi. Poi, passando la punta di un cacciavite su ogni piedino avevo trovato quale era quello "incriminato", quello che lo faceva impazzire. Solo appoggiandoci la punta del cacciavite il display si riempiva di caratteri strani.

Ora non ho più problemi, anche in ambienti "pesanti " !!!

Innanzitutto grazie mille per le risposte; steve-cr

cyberhs: Manca il condensatore da 100n in parallelo a C2.

Non hai inserito i diodi in anti parallelo sugli avvolgimenti dei relè: servono a preservare i transistor pilota.

Comunque, è probabile che il disturbo derivi dall'apertura dei contatti dei relè: dovresti inserire un diodo TVS (ad esempio BZW06-23) in anti parallelo sui contatti.

scusami per l'errore mio, nello schema non sono riportati ma sul circuito ci sono già i diodi a protezione dei transistor appunto perché all'inizio ne ho bruciati 3...

steve-cr: Anche con il modulo i2c io specificavo sul display, dove il modulo I2c è saldato per mezzo di un pettine di 16 contatti, solitamente numerati (1 dalla parte del connettore I2c e 16 dalla parte opposta).

Ecco, su questo pettinino ci saldi i due componenti che ti ho detto, poi mi dici.

Il problema mi era saltato fuori perchè avevo collegato una interfaccia I2c con una piattina di 5 cm. al display e avevo i tuoi stessi problemi. Poi, passando la punta di un cacciavite su ogni piedino avevo trovato quale era quello "incriminato", quello che lo faceva impazzire. Solo appoggiandoci la punta del cacciavite il display si riempiva di caratteri strani.

Ora non ho più problemi, anche in ambienti "pesanti " !!!

Grazie mille anche a te domani effettuerò questa prova e vi faccio sapere. Grazie ancora a tutti

Salve a tutti faccio un piccolo aggiornamento, dopo aver provato in tutti i modi da voi indicati, il problema sapete qual era??? le vitine che reggono il display avvitate in una mascherina di alluminio...tolte quelle, mai più nessun problema. Grazie a tutti per la disponibilità!