I2C - dsPIC

  • alfa75
  • Platino Utente
  • Platino Utente
Di più
10 Anni 3 Mesi fa #6 da alfa75
Risposta da alfa75 al topic I2C - dsPIC
ciao taglia
c'e l'hai fatta a farlo girare correttamente?
e quale dspic stai utilizzando per l'esattezza?

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

  • Taglia
  • Autore della discussione
  • Giovane Utente
  • Giovane Utente
Di più
10 Anni 3 Mesi fa #7 da Taglia
Risposta da Taglia al topic I2C - dsPIC
Volevo scrivere ieri sera, ma non riuscivo più ad aprire la pagina del forum.
Comunque sono ancora bloccato...vedo sempre 255 a display.
Ho guardato i segnali con l'oscilloscopio e si vedono correttamente.
Io sto usando il dspic30f6014a.
Pubblico sotto il codice,

-FUNZIONE DI SCRITTURA
Code:
void WriteByte(unsigned char AddressIC, unsigned int AddressRegister, unsigned char DataByte) { unsigned char addressH,addressL; addressH = (unsigned char) ((AddressRegister & 0xFF00) >> 8); addressL = (unsigned char) (AddressRegister & 0x00FF); Open_I2C(); //IdleI2C(); StartI2C(); IdleI2C(); //scrivo l'indirizzo della eeprom MasterWriteI2C(AddressIC); MasterWriteI2C(addressH); MasterWriteI2C(addressL); MasterWriteI2C(DataByte); StopI2C(); IdleI2C(); CloseI2C(); return; }

-FUNZIONE DI LETTURA
Code:
unsigned char ReadByte(unsigned char AddressIC, unsigned int AddressRegister) { unsigned char addressH,addressL; unsigned char var=0; addressH = (unsigned char) ((AddressRegister & 0xFF00) >> 8); addressL = (unsigned char) (AddressRegister & 0x00FF); Open_I2C(); //IdleI2C(); StartI2C(); IdleI2C(); //scrivo l'indirizzo della eeprom MasterWriteI2C(AddressIC); MasterWriteI2C(addressH); MasterWriteI2C(addressL); StartI2C(); IdleI2C(); MasterWriteI2C(AddressIC+1); var = MasterReadI2C(); NotAckI2C(); StopI2C(); IdleI2C(); CloseI2C(); return var; }

Avevo provato ad inserire "IdleI2C();" dopo ogni comando "MasterWriteI2C" ma non cambia niente.

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

  • Taglia
  • Autore della discussione
  • Giovane Utente
  • Giovane Utente
Di più
10 Anni 3 Mesi fa #8 da Taglia
Risposta da Taglia al topic I2C - dsPIC
RISOLTO!!
Il problema era nella funzione di lettura.
Anche se il datasheet dell'eeprom secondo me non è chiaro, ho inserito uno StopI2C(); dopo il secondo start che devo dare per leggere il dato e tutto funziona!!

Pubblico sotto il codice corretto della funzione di lettura eeprom:
Code:
unsigned char ReadByte(unsigned char AddressIC, unsigned int AddressRegister) { unsigned char addressH,addressL; unsigned char var=0; addressH = (unsigned char) ((AddressRegister & 0xFF00) >> 8); addressL = (unsigned char) (AddressRegister & 0x00FF); Open_I2C(); //IdleI2C(); StartI2C(); IdleI2C(); //scrivo l'indirizzo della eeprom MasterWriteI2C(AddressIC); MasterWriteI2C(addressH); MasterWriteI2C(addressL); StopI2C(); IdleI2C(); StartI2C(); IdleI2C(); MasterWriteI2C(AddressIC+1); var = MasterReadI2C(); NotAckI2C(); StopI2C(); IdleI2C(); CloseI2C(); return var; }

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

Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

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

Registrati al sito LaurTec.

Forum - Ultimi messaggi