Sans succès, le MPU6050 passe en mode SLEEP. Je comprends que le bit SLEEP (bit 6) doit être effacé, mais en lisant le registre de gestion de l'alimentation après avoir effacé le retour, 0x40. Le bit 6 n'a pas été effacé.MPU6050 Gestion de l'alimentation utilisant le mode de registre direct Tiva C
Oui, ceci est pour une affectation, et en tant que telle, nous ne sommes pas autorisés à utiliser des bibliothèques, etc. Mon tuteur n'a pas pu aider et m'a suggéré de demander ici.
Ma configuration I2C est la suivante
void I2C1_Setup(void)
{
//Setup I2C 1 on PORT A Pins 6, 7
// GPIO A
SYSCTL_RCGCGPIO |= (1<<0); while ((SYSCTL_PRGPIO & (1<<0)) != (1<<0)) {}
GPIOA_AFSEL |= (1<<6)|(1<<7);
GPIOA_PCTL &= ~(0xFF<<24);
GPIOA_PCTL |= (3<<28)|(3<<24);
GPIOA_DEN |= (1<<6)|(1<<7);
GPIOA_ODR |= (1<<7);
// I2C 1
SYSCTL_RCGCI2C |= (1<<1); while ((SYSCTL_PRI2C & (1<<1)) != (1<<1)) {}
/*
TPR = (System Clock/(2*(SCL_LP + SCL_HP)*SCL_CLK))-1;
TPR = (16MHz/(2*(6+4)*100000))-1;
TPR = 7
*/
I2C1_MCR = (1<<4); //master mode
I2C1_MTPR = (7<<0); //100Kbps
//Disable SLEEP mode
I2C1_MSA = 0xD0; // Set slave address and write mode
I2C1_MDR = 0x6B; // Power management register
I2C1_MCS = 0x3; // start run mode
while (!((I2C1_MCS & 1) != 0)) {}
while ((I2C1_MCS & 1) == 0) {} // poll busy
I2C1_MDR = 0;
I2C1_MCS = 0x7; // stop start run mode
while (!((I2C1_MCS & 1) != 0)) {}
while ((I2C1_MCS & 1) == 0) {} // poll busy
}
Pour tester la valeur du registre de gestion de l'alimentation est utiliser
I2C1_MSA = 0xD0; // transmit mode
I2C1_MDR = 0x6B; // register address
I2C1_MCS = 3; // start run mode
while (!((I2C1_MCS & 1) != 0)) {}
while ((I2C1_MCS & 1) != 0) {} // poll busy
I2C1_MSA = 0xD1; // receive mode
I2C1_MCS = 7; // stop start run mode
while (!((I2C1_MCS & 1) != 0)) {}
while ((I2C1_MCS & 1) != 0) {} // poll busy
int data;
data = I2C1_MDR;
La valeur de retour pour c'est 0x40. Lorsque j'effectue les mêmes étapes pour vérifier le registre WHO_AM_I (0x75), il est confirmé que l'adresse de l'esclave est 0x68.
Je sais que le MPU fonctionne généralement comme nous avons pu obtenir des lectures sur un arduino à l'aide du simple croquis fourni ici (https://playground.arduino.cc/Main/MPU-6050)
J'utilise le TM4C123GH6PM et Keil uvision5.
Je ne sais vraiment pas ce qui ne va pas ici.
Toute aide est appréciée.