Picproje Elektronik Sitesi

PICPROJE PROGRAMLAMA DERSLERİ => STM32 Örnekleri => Konuyu başlatan: esdevhk - 09 Ekim 2019, 15:45:29

Başlık: MPU9255 haberleşme kesilmesi
Gönderen: esdevhk - 09 Ekim 2019, 15:45:29
Cümleten kolay gelsin,

STM32F4 Disco ile MPU9255 sensör board'dan veri okuma işlemi yapıyorum. Okuma/yazma işlemlerinde bir sorunum yok. Sorun şu ki; haberleşme esnasında mikrodenetleyiciyi resetlediğimde (hep değil ama genel olarak 4-5 kere resetlendiğinde bazen ilk resette) haberleşme kesilmekte. Sensör ile haberleşme kesildikten sonra sensörün gücünü kesmeden haberleşme hattı düzelmemektedir.

Sensörün dökümanını dikkatlice okudum ve çoğu örneğe baktığımda sensörün power işlemleri ile ilgili registerlarına doğru müdahele ettiğimi düşünüyorum. Mikrodenetleyiciyi resetlediğimden dolayı haberleşme hattı mı çöküyor? Fikir ve düşüncelerinizi bekliyorum.

Teşekkürler.

Merak edenler için sensörün başlangıç ayarlarını yaptığım fonksiyon.
void MPU9255_Init()
{
uint8_t giden_veri_u8 = 0;

giden_veri_u8 = 0x80;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,PWR_MGMT_1,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50); // register adresleri default degerlerine cekilir.
HAL_Delay(100);

giden_veri_u8 = 0x01;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,PWR_MGMT_1,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50); // uyku modundan çikartilir.

giden_veri_u8 = 0x00;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,PWR_MGMT_2,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50);
HAL_Delay(200);

giden_veri_u8 = 0x0D;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,I2C_MST_CTRL,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50);

giden_veri_u8 = 0x03;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,CONFIG,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50);

giden_veri_u8 = 0x04;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,SMPLRT_DIV,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50); // sample rate 1kHz ayarlanir.

giden_veri_u8 = 0x10;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,GYRO_CONFIG,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50); // gyro +/-1000dps

giden_veri_u8 = 0x00;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,ACCEL_CONFIG,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50); // accel +/-2g

giden_veri_u8 = 0x03;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,ACCEL_CONFIG2,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50);

giden_veri_u8 = 0x02;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,INT_PIN_CFG,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50); // magnetometer aktif edilir.

giden_veri_u8 = 0x01;
HAL_I2C_Mem_Write(&hi2c2,MPU9255_ADDRESS,INT_ENABLE,I2C_MEMADD_SIZE_8BIT,&giden_veri_u8,1,50);

}