Bonjour j'ai une boussole cmps03 avec laquelle j'essaye de recupérer l'angle par rapport au nord magnétique, j'utilise aussi un dspic 30f6014a et le protocole est l'i2c,
Les signaux sur les ports SCA et SDL ont l'air bon mais le registre I2CRCV est desesperement vide.
Voici le code deja "pondu" :
setup_i2c
et pour recupérer la boussoleCode:void setup_i2c(void) { IEC0bits.SI2CIE = 0; I2CCONbits.I2CEN = 0; // disable I2C TRISG = TRISG & 0b1111111111110011; // set I2C pins as outputs LATGbits.LATG2 = 0; // clr the LAT bits LATGbits.LATG3 = 0; TRISG = TRISG | 0b0000000000001100; // set I2C pins as inputs I2CSTAT = 0b0000000000000000; kk = I2CRCV; I2CSTATbits.I2COV = 0; // clear overflow flag IFS0bits.SI2CIF = 0; // clear interrupt flag IEC0bits.SI2CIE = 1; // enable I2C interrupts I2CCON = 0b1001001000000000; // enable I2C }
Je ne comprend pas bien non plus la différence entre les MasterWriteI2C et SlaveWriteI2CCode:while(1){ StartI2C(); SlaveWriteI2C(0xC0); I2CSTATbits.R_W=0; AckI2C(); //ACK SlaveWriteI2C(0x01); AckI2C(); //ACK StartI2C(); SlaveWriteI2C(0xC1); I2CSTATbits.R_W=1; AckI2C(); //ACK bearing = MasterReadI2C(); AckI2C(); //ACK StopI2C(); DelayNmSec(20); }
Merci de votre aide
Benjamin
-----