Bonjour,
Je reviens vous voir car j'ai un problème de communication i2c. Le maitre i2c est une carte embeddian, sur le bus se trouve une mcp23017 ainsi que mon pic18f26k22.
Avec i2cdetect le pic et le mcp sont bien détectés. J'ordonne au mcp d'allumer son port a, cela fonctionne. Je reprends le meme programme mais avec l'adresse destination mon pic.
Le seul retour que j'ai est, sur le port série :
INIT();
INIT();
INIT();
Interrupti2c!
Value - H -
Le pic reçoit bien l'interruption, mais je ne récupère aucune data...
#include <p18f25k22.h>
#include <usart.h>
#include <delays.h>
#include <i2c.h>
void Serial_Init(void) {
ANSELC=0;
TRISCbits.TRISC6 = 0;
TRISCbits.TRISC7 = 1;
Open1USART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW, 129 );
RCONbits.IPEN = 1;
IPR1bits.RCIP=0;
PIE1bits.RCIE=1;
INTCONbits.GIEL = 1;
INTCONbits.GIEH = 1;
}
void Serial_Putchar(unsigned char cD) {
putc1USART(cD);
}
void Serial_Putstring(const unsigned char mess[]) {
putrs1USART(mess);
}
void ISR(void);
#pragma code H_vector=0x08
void H_vector(void) { _asm goto ISR _endasm }
#pragma code
#pragma interrupt ISR
void ISR(void) {
if (PIR1bits.SSPIF==1){
Serial_Putstring("Interrupti2c !\r\n");
if (DataRdyI2C1()==1) {
char c = ReadI2C1();
Serial_Putstring("Value :-");
Serial_Putchar(c);
Serial_Putstring("-\r\n");
SSPBUF = 0;
SSPCON1bits.WCOL=0;
}
PIR1bits.SSPIF = 0;
SSPCON1bits.CKP = 1;
}
}
void main() {
ANSELC = 0;
TRISC = 255;
INTCONbits.GIEH = 0;
RCONbits.IPEN = 1; // Enable interrupt priorities
IPR1bits.SSPIP = 1; // Set SSP interrupt priority to high
PIR1bits.SSPIF = 0; // Clear the interrupt flag
PIE1bits.SSPIE = 1; // Enable SSP interrupt
INTCONbits.GIEH = 1;
SSPADD = 0x10<<1;
SSPCON2 = 0b00000000;
SSPCON1bits.CKP = 0;
SSPSTATbits.BF=0;
SSPCON1bits.SSPOV=0;
Serial_Init();
IdleI2C();
OpenI2C(SLAVE_7 , SLEW_OFF);
Serial_Putstring("INIT()\r\n") ;
Serial_Putstring("INIT()\r\n") ;
Serial_Putstring("INIT()\r\n") ;
while(1) {
}
}
Si vous aviez une idée, je suis preneur
Merci
-----