Bonjour
ca fait deux jours que je me bats avec ce montage là je suis a bout de force et je solicite votre aide :
pic18f4550 + module YG521
le pic ne le vois pas sur son bus I2C je l ai testé sur arduino et l arduino le detecte donc mon yg521 marche
voilà mon ti code
kan j envoi la sequence la variable take qui contien la repense =255 !
meme si je mets rien sur le bus I2C !
Code:#define MPU6050_ADDRESS 0b11010000 // Address with end write bit #define MPU6050_RA_XG_OFFS_TC 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD #define MPU6050_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD #define MPU6050_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD #define MPU6050_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN #define MPU6050_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN #define MPU6050_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN #define MPU6050_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS #define MPU6050_RA_XA_OFFS_L_TC 0x07 #define MPU6050_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS #define MPU6050_RA_YA_OFFS_L_TC 0x09 #define MPU6050_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS #define MPU6050_RA_ZA_OFFS_L_TC 0x0B #define MPU6050_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR #define MPU6050_RA_XG_OFFS_USRL 0x14 #define MPU6050_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR #define MPU6050_RA_YG_OFFS_USRL 0x16 #define MPU6050_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR #define MPU6050_RA_ZG_OFFS_USRL 0x18 #define MPU6050_RA_SMPLRT_DIV 0x19 #define MPU6050_RA_CONFIG 0x1A #define MPU6050_RA_GYRO_CONFIG 0x1B #define MPU6050_RA_ACCEL_CONFIG 0x1C #define MPU6050_RA_FF_THR 0x1D #define MPU6050_RA_FF_DUR 0x1E #define MPU6050_RA_MOT_THR 0x1F #define MPU6050_RA_MOT_DUR 0x20 #define MPU6050_RA_ZRMOT_THR 0x21 #define MPU6050_RA_ZRMOT_DUR 0x22 #define MPU6050_RA_FIFO_EN 0x23 #define MPU6050_RA_I2C_MST_CTRL 0x24 #define MPU6050_RA_I2C_SLV0_ADDR 0x25 #define MPU6050_RA_I2C_SLV0_REG 0x26 #define MPU6050_RA_I2C_SLV0_CTRL 0x27 #define MPU6050_RA_I2C_SLV1_ADDR 0x28 #define MPU6050_RA_I2C_SLV1_REG 0x29 #define MPU6050_RA_I2C_SLV1_CTRL 0x2A #define MPU6050_RA_I2C_SLV2_ADDR 0x2B #define MPU6050_RA_I2C_SLV2_REG 0x2C #define MPU6050_RA_I2C_SLV2_CTRL 0x2D #define MPU6050_RA_I2C_SLV3_ADDR 0x2E #define MPU6050_RA_I2C_SLV3_REG 0x2F #define MPU6050_RA_I2C_SLV3_CTRL 0x30 #define MPU6050_RA_I2C_SLV4_ADDR 0x31 #define MPU6050_RA_I2C_SLV4_REG 0x32 #define MPU6050_RA_I2C_SLV4_DO 0x33 #define MPU6050_RA_I2C_SLV4_CTRL 0x34 #define MPU6050_RA_I2C_SLV4_DI 0x35 #define MPU6050_RA_I2C_MST_STATUS 0x36 #define MPU6050_RA_INT_PIN_CFG 0x37 #define MPU6050_RA_INT_ENABLE 0x38 #define MPU6050_RA_DMP_INT_STATUS 0x39 #define MPU6050_RA_INT_STATUS 0x3A #define MPU6050_RA_ACCEL_XOUT_H 0x3B #define MPU6050_RA_ACCEL_XOUT_L 0x3C #define MPU6050_RA_ACCEL_YOUT_H 0x3D #define MPU6050_RA_ACCEL_YOUT_L 0x3E #define MPU6050_RA_ACCEL_ZOUT_H 0x3F #define MPU6050_RA_ACCEL_ZOUT_L 0x40 #define MPU6050_RA_TEMP_OUT_H 0x41 #define MPU6050_RA_TEMP_OUT_L 0x42 #define MPU6050_RA_GYRO_XOUT_H 0x43 #define MPU6050_RA_GYRO_XOUT_L 0x44 #define MPU6050_RA_GYRO_YOUT_H 0x45 #define MPU6050_RA_GYRO_YOUT_L 0x46 #define MPU6050_RA_GYRO_ZOUT_H 0x47 #define MPU6050_RA_GYRO_ZOUT_L 0x48 #define MPU6050_RA_EXT_SENS_DATA_00 0x49 #define MPU6050_RA_EXT_SENS_DATA_01 0x4A #define MPU6050_RA_EXT_SENS_DATA_02 0x4B #define MPU6050_RA_EXT_SENS_DATA_03 0x4C #define MPU6050_RA_EXT_SENS_DATA_04 0x4D #define MPU6050_RA_EXT_SENS_DATA_05 0x4E #define MPU6050_RA_EXT_SENS_DATA_06 0x4F #define MPU6050_RA_EXT_SENS_DATA_07 0x50 #define MPU6050_RA_EXT_SENS_DATA_08 0x51 #define MPU6050_RA_EXT_SENS_DATA_09 0x52 #define MPU6050_RA_EXT_SENS_DATA_10 0x53 #define MPU6050_RA_EXT_SENS_DATA_11 0x54 #define MPU6050_RA_EXT_SENS_DATA_12 0x55 #define MPU6050_RA_EXT_SENS_DATA_13 0x56 #define MPU6050_RA_EXT_SENS_DATA_14 0x57 #define MPU6050_RA_EXT_SENS_DATA_15 0x58 #define MPU6050_RA_EXT_SENS_DATA_16 0x59 #define MPU6050_RA_EXT_SENS_DATA_17 0x5A #define MPU6050_RA_EXT_SENS_DATA_18 0x5B #define MPU6050_RA_EXT_SENS_DATA_19 0x5C #define MPU6050_RA_EXT_SENS_DATA_20 0x5D #define MPU6050_RA_EXT_SENS_DATA_21 0x5E #define MPU6050_RA_EXT_SENS_DATA_22 0x5F #define MPU6050_RA_EXT_SENS_DATA_23 0x60 #define MPU6050_RA_MOT_DETECT_STATUS 0x61 #define MPU6050_RA_I2C_SLV0_DO 0x63 #define MPU6050_RA_I2C_SLV1_DO 0x64 #define MPU6050_RA_I2C_SLV2_DO 0x65 #define MPU6050_RA_I2C_SLV3_DO 0x66 #define MPU6050_RA_I2C_MST_DELAY_CTRL 0x67 #define MPU6050_RA_SIGNAL_PATH_RESET 0x68 #define MPU6050_RA_MOT_DETECT_CTRL 0x69 #define MPU6050_RA_USER_CTRL 0x6A #define MPU6050_RA_PWR_MGMT_1 0x6B #define MPU6050_RA_PWR_MGMT_2 0x6C #define MPU6050_RA_BANK_SEL 0x6D #define MPU6050_RA_MEM_START_ADDR 0x6E #define MPU6050_RA_MEM_R_W 0x6F #define MPU6050_RA_DMP_CFG_1 0x70 #define MPU6050_RA_DMP_CFG_2 0x71 #define MPU6050_RA_FIFO_COUNTH 0x72 #define MPU6050_RA_FIFO_COUNTL 0x73 #define MPU6050_RA_FIFO_R_W 0x74 #define MPU6050_RA_WHO_AM_I 0x75 #define I2C_WRITE 0 #define I2C_READ 1 #define VITESSEI2C 1 //1 pour 100khz, 0 pour 400khz #define BRGI2C 0x0C// //###### usb declaration unsigned char readbuff[64] absolute 0x500; // Buffers should be in USB RAM, please consult datasheet unsigned char writebuff[64] absolute 0x540; char cnt; char kk; char kk1; ///#################################### injection code I2C void i2c_Wait(void){ while ( ( SSPCON2 & 0x1F ) || ( SSPSTAT & 0x04 ) ); } void i2c_Start(void) { i2c_Wait(); SSPCON2.SEN=1; } void i2c_Restart(void){ i2c_Wait(); SSPCON2.RSEN=1; } void i2c_Stop(void) { i2c_Wait(); SSPCON2.PEN=1; } void i2c_Write(unsigned char data1) { i2c_Wait(); SSPBUF = data1; } void i2c_Address(unsigned char address, unsigned char mode) { unsigned char l_address; l_address=address<<1; l_address+=mode; i2c_Wait(); SSPBUF = l_address; } unsigned char i2c_Read1(unsigned char ack) { i2c_Wait(); SSPCON2.RCEN=1; i2c_Wait(); i2cReadData = SSPBUF; i2c_Wait(); if ( ack ) SSPCON2.ACKDT=0; // Ack else SSPCON2.ACKDT=1; // NAck SSPCON2.ACKEN=1; // send acknowledge sequence return( i2cReadData ); } /// fin des fonction IC2######################## void interrupt(){ if (PIR1.CCP1IF ==1) { PIR1.CCP1IF =0; kk=1; } if (PIR2.CCP2IF ==1) { PIR2.CCP2IF =0; if (PORTC.RC1==0){ CCP2CON=0B00000101; kk1=3; } else { CCP2CON=0B00000100; kk1=4; } } USB_Interrupt_Proc(); } void main(void) { unsigned short take ; ADCON1 = 0b00001111; CMCON=0x07; TRISB = 0xFF; TRISC = 0b11111110; PORTC= 0x00; TRISD=0; PIE1.CCP1IE=1; PIE2.CCP2IE=1; CCP1CON=0B00000101; PORTD.RD3=1; SSPSTAT=SSPSTAT&0x3F; SSPCON1=0x00; SSPCON2=0x00; SSPSTAT.SMP=VITESSEI2C; SSPCON1.SSPEN=1; SSPCON1.SSPM0=0;//1000 SSPCON1.SSPM1=0;//1000 SSPCON1.SSPM2=0;//1000 SSPCON1.SSPM3=1;//1000 SSPADD=BRGI2C; HID_Enable(&readbuff,&writebuff); Delay_ms(1000); kk=0; kk1=0; if (PORTC.RC1==0) { writebuff[8]=233; writebuff[7]=233; writebuff[6]=233; writebuff[5]=233; writebuff[4]=233; writebuff[3]=233; writebuff[2]=233; writebuff[1]=233; PORTD=0; writebuff[0]=233; while(!HID_Write(&writebuff,64)); CCP1CON=0B00000101; } else { writebuff[8]=235; writebuff[7]=235; writebuff[6]=235; writebuff[5]=235; writebuff[4]=235; writebuff[3]=235; writebuff[2]=235; writebuff[1]=235; PORTD=0; writebuff[0]=233; CCP2CON=0B00000100; while(!HID_Write(&writebuff,64)); } while(1){ if (kk1==3) { writebuff[8]=230; writebuff[7]=230; writebuff[6]=230; writebuff[5]=230; writebuff[4]=230; writebuff[3]=230; writebuff[2]=230; writebuff[1]=230; PORTD=0; writebuff[0]=233; while(!HID_Write(&writebuff,64)); kk1=0; delay_ms(500); } if (kk1==4){ writebuff[8]=227; writebuff[7]=227; writebuff[6]=227; writebuff[5]=227; writebuff[4]=227; writebuff[3]=227; writebuff[2]=227; writebuff[1]=227; PORTD=0; writebuff[0]=233; while(!HID_Write(&writebuff,64)); kk1=0; } if (kk==1){ writebuff[8]=PORTB.RB7; writebuff[7]=PORTB.RB6; writebuff[6]=PORTB.RB5; writebuff[5]=PORTB.RB4; writebuff[4]=PORTB.RB3; writebuff[3]=PORTB.RB2; // writebuff[2]=PORTB.RB1; // writebuff[1]=PORTB.RB0; writebuff[0]=205; while(!HID_Write(&writebuff,64)); kk=0; } if(HID_Read()){ if (readbuff[0]==0){ PORTD.RD0=readbuff[1]; PORTD.RD1=readbuff[2]; PORTD.RD2=readbuff[3]; PORTD.RD3=readbuff[4]; PORTD.RD4=readbuff[5]; PORTD.RD5=readbuff[6]; PORTD.RD6=readbuff[7]; PORTD.RD7=readbuff[8]; } if (readbuff[0]==233){ writebuff[8]=PORTB.RB7; writebuff[7]=PORTB.RB6; writebuff[6]=PORTB.RB5; writebuff[5]=PORTB.RB4; writebuff[4]=PORTB.RB3; writebuff[3]=PORTB.RB2; // writebuff[2]=PORTB.RB1; // writebuff[1]=PORTB.RB0; PORTD=0; writebuff[0]=233; while(!HID_Write(&writebuff,64)); } if (readbuff[0]==133){ take=0; // initialize I2C communication i2c_Start(); // send Start i2c_Address(MPU6050_ADDRESS, I2C_WRITE); // Send slave address - write operation i2c_Write(MPU6050_RA_WHO_AM_I); // Set register for servo 0 i2c_Restart(); // Restart i2c_Address(MPU6050_ADDRESS, I2C_READ); // Send slave address - read operation take = i2c_Read1(0); // Read one byte // issue I2C start signal i2c_Stop(); writebuff[1]=take; writebuff[0]=153; while(!HID_Write(&writebuff,64)); if (take==0x68) { PORTD.RD0=1; PORTD.RD1=0; } else { PORTD.RD0=0; PORTD.RD1=1; } } } } }
c la partie du choix de frenquence qui cloche non
j utilise un quartz de 20 mhz et plldiv=5 et CPUDIV=osc1_pll2
et des resistance de pull-up sur le bus de 3.6k
Merci de votre aide
-----