- Messaggi: 21
- Ringraziamenti ricevuti 0
I2C - dsPIC
- Taglia
- Autore della discussione
- Giovane Utente
Less
Di più
9 Anni 11 Mesi fa #1
da Taglia
I2C - dsPIC è stato creato da Taglia
Ciao a tutti, eccomi di nuovo.
Sto cercando di far comunicare il mio dsPIC con una eeprom esterna(24LC512) attraverso il protocollo I2C, ma purtroppo sto sbagliando qualcosa!!
Il codice è scritto in mplab xc16.
Sotto metto il codice...
Grazie!!!
Sto cercando di far comunicare il mio dsPIC con una eeprom esterna(24LC512) attraverso il protocollo I2C, ma purtroppo sto sbagliando qualcosa!!
Il codice è scritto in mplab xc16.
Sotto metto il codice...
Code:
void Open_I2C(void)
{
OpenI2C((I2C_ON & I2C_IDLE_CON & I2C_CLK_HLD & I2C_IPMI_DIS & I2C_7BIT_ADD &
I2C_SLW_EN & I2C_SM_DIS & I2C_GCALL_DIS & I2C_STR_DIS & I2C_NACK &
I2C_ACK_DIS & I2C_RCV_DIS & I2C_STOP_DIS & I2C_RESTART_DIS & I2C_START_DIS), 0x2E);
IdleI2C();
}
void WriteByte(unsigned char AddressIC, unsigned int AddressRegister, unsigned char DataByte)
{
unsigned char i,j;
i = AddressRegister >>8;
j = AddressRegister;
StartI2C();
//scrivo l'indirizzo della eeprom
MasterWriteI2C(AddressIC);
AckI2C();
MasterWriteI2C(i);
AckI2C();
MasterWriteI2C(j);
AckI2C();
MasterWriteI2C(DataByte);
AckI2C();
StopI2C();
IdleI2C();
return;
}
unsigned char ReadByte(unsigned char AddressIC, unsigned int AddressRegister)
{
unsigned char i,j;
unsigned char var=1;
i = AddressRegister >>8;
j = AddressRegister;
StartI2C();
//scrivo l'indirizzo della eeprom
MasterWriteI2C(AddressIC);
AckI2C();
MasterWriteI2C(i);
AckI2C();
MasterWriteI2C(j);
AckI2C();
RestartI2C();
//StartI2C();
MasterWriteI2C(AddressIC+1);
AckI2C();
var = MasterReadI2C();
//AckI2C();
NotAckI2C();
StopI2C();
IdleI2C();
return var;
}
int main(int argc, char** argv)
{
unsigned char temp = 0;
init_porte();
DisableIntMI2C;
Retroilluminazione=1;
Open_I2C();
HomeLCD;
ClearLCD();
//12345678901234567890
WriteStringLCD(0,0,"------esempio-------");
__delay_ms(500);
WriteStringLCD(0,1,"--valore-salvato:---");
__delay_ms(500);
WriteByte(0xA2,0x10,5);
//__delay_ms(500);
temp = ReadByte(0xA2,0x10);
lcd_gotoxy(1,3);
WriteCharLCD(48+(temp/10)%10);
WriteCharLCD(48+temp%10);
while(1) {
}
}
Grazie!!!
Si prega Accesso o Crea un account a partecipare alla conversazione.
- alfa75
- Platino Utente
Less
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
9 Anni 11 Mesi fa #2
da alfa75
Risposta da alfa75 al topic I2C - dsPIC
Ciao taglia
puoi darci qualche notizia in piu?
che genere di problemi ti sta dando...compliazione o altro?
puoi darci qualche notizia in piu?
che genere di problemi ti sta dando...compliazione o altro?
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Taglia
- Autore della discussione
- Giovane Utente
Less
Di più
- Messaggi: 21
- Ringraziamenti ricevuti 0
9 Anni 11 Mesi fa #3
da Taglia
Risposta da Taglia al topic I2C - dsPIC
Ciao alfa75,
In teoria il programma è semplicissimo, scrivo 5 nella cella 0x10 della eeprom, successivamente vado a leggerla e visualizzare il contenuto a display, dovrei trovare 5, invece trovo sempre "00".
In teoria il programma è semplicissimo, scrivo 5 nella cella 0x10 della eeprom, successivamente vado a leggerla e visualizzare il contenuto a display, dovrei trovare 5, invece trovo sempre "00".
Si prega Accesso o Crea un account a partecipare alla conversazione.
- alfa75
- Platino Utente
Less
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
9 Anni 11 Mesi fa - 9 Anni 11 Mesi fa #4
da alfa75
Risposta da alfa75 al topic I2C - dsPIC
Allora..
ho dato un occhiata piu approfondita
se non vado errato dopo la funzione StartI2C() devi attendere la fine della sequenza di start tramite il flag I2CCONbits.SEN prima di poter continuare
ho trovato questo esempio se può essere d'aiuto
ho dato un occhiata piu approfondita
se non vado errato dopo la funzione StartI2C() devi attendere la fine della sequenza di start tramite il flag I2CCONbits.SEN prima di poter continuare
ho trovato questo esempio se può essere d'aiuto
Code:
#include<i2c.h>
void main(void )
{
unsigned int config2, config1;
unsigned char *wrptr;
unsigned char tx_data[] = {'M','I','C','R','O',’C’,'H','I','P','\0'};
wrptr = tx_data;
/* Baud rate is set for 100 kHz */
config2 = 0x11;
/* Configure I2C for 7 bit address mode */
config1 = (I2C_ON & I2C_IDLE_CON & I2C_CLK_HLD &
I2C_IPMI_DIS & I2C_7BIT_ADD &
I2C_SLW_DIS & I2C_SM_DIS &
I2C_GCALL_DIS & I2C_STR_DIS &
I2C_NACK & I2C_ACK_DIS & I2C_RCV_DIS &
I2C_STOP_DIS & I2C_RESTART_DIS &
I2C_START_DIS);
OpenI2C(config1,config2);
IdleI2C();
StartI2C();
/* Wait till Start sequence is completed */
while(I2CCONbits.SEN);
/* Clear interrupt flag */
IFS0bits.MI2CIF = 0;
/* Write Slave address and set master for transmission */
MasterWriteI2C(0xE);
/* Wait till address is transmitted */
while(I2CSTATbits.TBF); // 8 clock cycles
while(!IFS0bits.MI2CIF); // Wait for 9th clock cycle
IFS0bits.MI2CIF = 0; // Clear interrupt flag
while(I2CSTATbits.ACKSTAT);
/* Transmit string of data */
MasterputsI2C(wrptr);
StopI2C();
/* Wait till stop sequence is completed */
while(I2CCONbits.PEN);
CloseI2C();
}
Ultima Modifica 9 Anni 11 Mesi fa da alfa75.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Taglia
- Autore della discussione
- Giovane Utente
Less
Di più
- Messaggi: 21
- Ringraziamenti ricevuti 0
9 Anni 11 Mesi fa - 9 Anni 11 Mesi fa #5
da Taglia
Risposta da Taglia al topic I2C - dsPIC
Ciao,
lo avevo notato infatti, ho inserito IdleI2C(); dopo lo start...in teoria fa la stessa funzione di quello che mi avevi suggerito.
Ora leggo il numero 255, che non è quello che ho scritto!!!
Sembra che il micro legga in una cella diversa da quella che gli dico di leggere o che salvi in una diversa!!
lo avevo notato infatti, ho inserito IdleI2C(); dopo lo start...in teoria fa la stessa funzione di quello che mi avevi suggerito.
Ora leggo il numero 255, che non è quello che ho scritto!!!
Sembra che il micro legga in una cella diversa da quella che gli dico di leggere o che salvi in una diversa!!
Ultima Modifica 9 Anni 11 Mesi fa da Taglia.
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- Aggiornamento sito completato
- da Mauro Laurenti
-
- registro a scorrimento PIPO in cascata
- da Mauro Laurenti
-
- FORMULA PER LINEARIZZARE TERMOCOPIA
- da Mauro Laurenti
-
- Spostamento impronte
- da Mauro Laurenti