I2C blocca la comunicazione

Ciao ragazzi, possiedo un arduino mega dove ho collegato una shield gsm con SIMCOM 900 dove invio dei comandi AT e successivamente leggo la risposta. Nello stesso software utilizzo la libreria Wire per la comunicazione I2C tipo Slave.
Ho notato che certe volte,molte volte, quando comunico con la shield, l'i2c smette di comunicare.
Non riesco a capire cosa può scaturire questo tipo problema.

Sono interessato anche io alla soluzione di questo problema, nel mio caso spesso all'invio del messaggio da parte del sim900, dove chiedo il valore di temperatura, umidità e peso, il display lcd si incasinava e comparivano una serie di strani caratteri con il blocco di tutto il sistema. Alla fine ho tamponato il problema facendo in modo che si attivasse il display con relativa lettura dei sensori, previo pressione di un pulsante e spegnimento con la sucessiva pressione. In questo modo ho risolto il conflitto...anche se mi sarebbe piaciuto che sul display i dati rimanessero sempre in evidenza e in continuo aggiornanento...però al momento mi tocca accontentarmi.

crisbi71:
il display lcd si incasinava e comparivano una serie di strani caratteri con il blocco di tutto il sistema.

Anche a me succedeva questo comportamento, anche se non utilizzato la shield in oggetto, la colpa è dell'aggiornamento troppo frequente dell'lcd (Es. ad ogni cilo di loop si riscrive le informazioni) oppure una o più saldature dell'lcd fatte male (E succede spessissimo).
Per risolvere il primo caso è semplice, ovvero utilizzare delle variabili (una per dato da scrivere) che memorizza il valore messo a schermo, se il valore attuale è differente da quello che è visualizzato allora si aggiorna lo schermo, altrimenti no.
Per il secondo lente di ingtrandimento e buona manualità :slight_smile:

Grazie, per le saldature non ci sono probemi, in azienda ho tutto il necessario, lavoro all'elettronica smd, mentre essendo un novellino con arduino, il primo caso è per me un pochino più complesso...potresti farmi gentilmente un piccolo esempio...

crisbi71:
Grazie, per le saldature non ci sono probemi, in azienda ho tutto il necessario, lavoro all'elettronica smd, mentre essendo un novellino con arduino, il primo caso è per me un pochino più complesso...potresti farmi gentilmente un piccolo esempio...

Certo se tu mi fai le saldature smd ;D no scherzo, certo!
Metti che visualizzi temperatura e umidità le quali sono memorizzate rispettivamente in attTemp e attUmi invece di

void loop()
{
  lcd.setCursor(0,0);
  lcd.print(attTemp);
  lcd.setCursor(0,1);
  lcd.print(attUmi);
  ...
}

bisogna fare una cosa del tipo

void loop()
{
  if(oldTemp!=attTemp)
  {
    lcd.setCursor(0,0);
    lcd.print(attTemp);
    oldTemp = attTemp;
  }
  if(oldUmi!=attUmi)
  {
    lcd.setCursor(0,1);
    lcd.print(attUmi);
    oldUmi = attUmi;
  }
  ...
}

Ottimo!! Grazie mille!! Sta sera modifico subito il programma.

Perfetto, funziona!! Grazie

Teoreticamente potrebbero essere anche disturbi radiofrequenza derivanti dalla trasmissione del modulo GSM.
Senza informazioni precise non é possibile dare risposte precise anche solo per escludere questa possibilitá perché si é trovato la causa altrove.
Ciao Uwe

Ciao uwefed,ad esempio se collego in I2C 2 arduini più la shield su uno di essi, il problema non sussiste, nel momento in cui collego un PIC 18F come master il problema si ripresenta.

Purtroppo devo rettificare il mio frettoloso responso positivo…dopo circa 5/6 sms da me inviati e successivamente risposti dal modulo sim900, alla richiesta di un’ulteriore sms il modulo lo ha inviato poi si è bloccato tutto, riavviato con un reset manuale…quindi il problema rimane…sembrerebbe che quando il modulo deve inviare l’sms con il valore letto dal sensore e in contemporanea c’è un aggiornamento dei dati sul display, si crei un conflitto causado il blocco del sistema… :confused:

Ciao ragazzi, mi sapreste consigliare qualche altra libreria per la comunicazione in I2C ?