i2c bloccante?

2 Anni 7 Mesi fa #1 da MicheleO.
i2c bloccante? è stato creato da MicheleO.
Buon pomeriggio a tutti,

ho realizzato una scheda per la gestione delle luci d'emergenza.
Un pic comunica con un rtc (DS1307), un lcd ed un espansione di ingressi (PCF5874) tramite I2C. Inoltre è presente qualche operazionale per la misurazione di corrente e tensione batteria, alcuni testi, led ed un cicalino.
A volte capita che il programma si blocca: il pic non risponde più a nessun segnale. Resettando il tutto, il sistema torna perfettamente operativo.
Secondo voi è possibile che il problema sia la trasmissione I2C?
Utilizzo le librerie di settorezero.com ( www.settorezero.com/wordpress/corso-prog...-eeprom-esterne-i2c/ ).
Ci sono diversi while (credo molto simili a ciò che viene fatto nelle librerie disponibili su questo sito). E' possibile che il pic si blocchi in qualche while? Per esempio perché l'rtc crea problemi a causa di un disturbo sulla rete.
Se si, come posso verificarlo?

Grazie mille,
buona serata.

Michele

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • MicheleO.
  • Junior Member
  • Junior Member
Di più
2 Anni 7 Mesi fa #2 da elpablito
Risposta da elpablito al topic i2c bloccante?
visto da distante secondo me non è un problema di i2c, sembrerebbe il solito baco capitato a tutti, facendo un qualche giro non previsto vai in loop da qualche parte, occhio ai while. L'unico consiglio che ti posso dare e riconsidera il tutto cercando di capire se per ti sei perso una possibilità di qualche genere, ad esempio una risposta non ottenuta o sbagliata, che ti fa rimanere in uno dei loop.
Ciao Paolo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • elpablito
  • Platinum Member
  • Platinum Member
Di più
2 Anni 7 Mesi fa #3 da MicheleO.
Risposta da MicheleO. al topic i2c bloccante?
Grazie per la risposta!

ho ricontrollato tutto il programma e in tutto il sorgente ho soltanto i while:
- del main;
- nella libreria delay;
- nella libreria LCD:
void PUTS(const unsigned char *buffer){
while(*buffer){
WRITE(*buffer);
buffer++;
}
}
- nella libreria eeprom:
while(!EEIF);
- nella libreria I2C.

Ovviamente non ho for(;;). Ho controllato gli altri (pochissimi) for e non dovrebbero essere problematici (non modifico l'indice nel for stesso).

Sicuramente l'alimentazione della scheda non è pulitissima. Ho controllato con l'oscilloscopio ed ogni tanto compaiono disturbi ad alta frequenza.

Grazie,
Michele.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • MicheleO.
  • Junior Member
  • Junior Member
Di più
Moderatori: Mauro LaurentiStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login