Progetti

   

Tutorial

   

Servizi

   

Sponsor  

   
Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: I2C - dsPIC

I2C - dsPIC 6 Anni 9 Mesi fa #6

  • alfa75
  • Avatar di alfa75
  • Offline
  • Platinum Boarder
  • Messaggi: 527
  • Ringraziamenti ricevuti 86
  • Karma: 7
ciao taglia
c'e l'hai fatta a farlo girare correttamente?
e quale dspic stai utilizzando per l'esattezza?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

I2C - dsPIC 6 Anni 9 Mesi fa #7

  • Taglia
  • Avatar di Taglia
  • Offline
  • Junior Boarder
  • Messaggi: 21
  • Karma: 0
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
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
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.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

I2C - dsPIC 6 Anni 9 Mesi fa #8

  • Taglia
  • Avatar di Taglia
  • Offline
  • Junior Boarder
  • Messaggi: 21
  • Karma: 0
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:
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;
}
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Moderatori: Mauro Laurenti, Matteo Garia
Powered by Forum Kunena
   
© LaurTec 2006-2015