Thank you labegf !
I Also use PIC24FJ64GAA02 with I2C1 on I/O #14 and #15 ; and the change from 2.2k pull-up to 10k pull-up solves the problem !
Edit : It also needs a 15pF capacitor between SDA and GND to work without oscilloscope ;-)
void init_I2C(void)
{
TRIS_I2C_SCL=IN;
TRIS_I2C_SDA=IN;
//Silicon Errata
TRIS_I2C_SDA=OUT;
WR_I2C_SDA=0;
//Disables the I2Cx module
I2C1CONbits.I2CEN=0;
//I2C bus clock => I2CxBRG = ( Fcy/Fscl - Fcy/10.000.000 ) - 1
//I2C bus clock => Fscl = 1/( (I2CxBRG+1)/Fcy + (1/10.000.000) )
I2C1BRG=0x0026; //394kHz @ 16MHz
I2C1CON=0b0000000000000000;
//I2CEN=0 => Disables the I2Cx module
//I2CSIDL=0 => Continue module operation in Idle mode
//SCLREL not used (slave) => SCLx Release Control bit
//IPMIEN=0 => IPMI Support mode disabled
//A10M=0 => I2CxADD is a 7-bit slave address
//DISSLW=0 => Slew rate control enabled => 400kHz
//SMEN=0 => Disable SMBus input thresholds
//GCEN not used (slave) => General call address disabled
//STREN not used (slave) = Disable software or receive clock stretching
//RCEN=0 => Receive sequence not in progress
I2C1STAT=0b0000000000000000;
//Clear BCL: Master Bus Collision Detect bit
//Clear IWCOL: Write Collision Detect bit
//Clear I2CPOV: Receive Overflow Flag bit
//Enables the I2Cx module and configures the SDAx and SCLx pins as serial port pins
I2C1CONbits.I2CEN=1;
}
<message edited by sixties on Thursday, January 10, 2008 3:46 AM>