Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: ogy - 21 Mayıs 2016, 13:43:08

Başlık: MPU6050 I2C Problemi
Gönderen: ogy - 21 Mayıs 2016, 13:43:08
Merhaba,

STM32F103C8 ile MPU6050 kontrol etmeye çalışıyorum.Mikroc Pro For ARM derleyici kullanıyorum.Proje dosyasının linkini aşağıda verdim.Problem şu;
debug ettiğim zaman program "MPU_IMU_I2C.c" dosyasında bulunan "I2C2_Write(s_addr, reg_Data, 2 , END_MODE_RESTART);" satırına geldiğinde yani ilk i2c yazma komutunda kilitleniyor.Bu satırı aşamıyorum.Bununla ilgili çözüm önerisi olan var mı?

http://s4.dosya.tc/server/c2ky04/Gyro_Test.rar.html (http://s4.dosya.tc/server/c2ky04/Gyro_Test.rar.html)
Başlık: Ynt: MPU6050 I2C Problemi
Gönderen: Cemre. - 21 Mayıs 2016, 14:05:16
MikroC ile ilgili birşey söyleyemeyeceğim ancak bağlantı hatası yapmadığınızdan emin olmanız gerekiyor. Pull-up dirençlerini bağladınız değil mi?

Bir de madem başlangıç aşamasındasınız, zamanında şöyle bir şey paylaşmıştım, yardımcı olur eminim.
https://maviled.wordpress.com/2016/02/17/cubemx-ile-i2c-projesi/
Başlık: Ynt: MPU6050 I2C Problemi
Gönderen: cripple - 21 Mayıs 2016, 15:47:41

void MPU_I2C_Write(unsigned char s_addr, unsigned char r_addr, unsigned char len, unsigned char *dat) {
  unsigned int i;
  reg_data[0] = s_addr;
  reg_data[1] = 0xFE;
  I2C2_Start();
  I2C2_Write(s_addr, reg_Data, 2 , END_MODE_RESTART);
  for (i = 0 ; i < len ; i++)
      {
       I2C2_Write(r_addr, *dat++, len , END_MODE_STOP);
       reg_data[1] = 0xFE;
      }
  //I2C1_Stop();                       // issue I2C stop signal
}


Benim gördüğüm

reg_data[0] = s_addr;
reg_data[1] = 0xFE;
I2C2_Write(s_addr, reg_Data, 2 , END_MODE_RESTART);

her gönderdiğin datadan sonra birde 0xFE gönderiyor
oradaki 2 yi 1 yapıp regdata dizisini gönderme sadece s_addr değişkenini göndermeyi denermisin bakalım ne olacak.

I2C2_Write(s_addr, s_addr, 1 , END_MODE_RESTART);

mpu6050 0xFE datasına nasıl tepki verecek belli değil ondan takılıyo olabilir
Başlık: Ynt: MPU6050 I2C Problemi
Gönderen: ogy - 22 Mayıs 2016, 14:15:56
@Cemre. pull-up dirençleri mpu6050 bordunun üzerinden var 4.7k olarak.Aşağıdaki ürünü kullanıyorum.

http://www.robimek.com/wp-content/uploads/mpu6050.jpg (http://www.robimek.com/wp-content/uploads/mpu6050.jpg)

Bendeki kartta pull-up dirençleri 4k7 fakat bazı kartlarda 2.2k yada 10k olduğunu gördüm.2k2 denedim olmadı.10k deneyeceğim.Acaba bununla alakası olabilir mi?

@cripple dediğiniz şekilde daha önce denemiştim.Şimdi tekrar denedim yine o satırda kilitleniyor program.Anlamadığım şey datayı göndermiyorsa o satırda neden kilitleniyor? Orayı aşıp devam etmesi gerekmez mi?
Başlık: Ynt: MPU6050 I2C Problemi
Gönderen: cripple - 22 Mayıs 2016, 18:42:59
i2c de gönderilen her data için karşıdan alındı biti(ACK) beklenir sorun burada yaşanıyor.
Sensöre anlayacağı bir data lazımki alındı diye cevap versin işlemcide bu bitin gelmesini beklemesin
Başlık: Ynt: MPU6050 I2C Problemi
Gönderen: Cemre. - 22 Mayıs 2016, 20:11:18
Alıntı yapılan: ogy - 22 Mayıs 2016, 14:15:56
@Cemre. pull-up dirençleri mpu6050 bordunun üzerinden var 4.7k olarak.Aşağıdaki ürünü kullanıyorum.

http://www.robimek.com/wp-content/uploads/mpu6050.jpg (http://www.robimek.com/wp-content/uploads/mpu6050.jpg)

Bendeki kartta pull-up dirençleri 4k7 fakat bazı kartlarda 2.2k yada 10k olduğunu gördüm.2k2 denedim olmadı.10k deneyeceğim.Acaba bununla alakası olabilir mi?

@cripple dediğiniz şekilde daha önce denemiştim.Şimdi tekrar denedim yine o satırda kilitleniyor program.Anlamadığım şey datayı göndermiyorsa o satırda neden kilitleniyor? Orayı aşıp devam etmesi gerekmez mi?

Pek direnç değeri ile ilgili bir sorunmuş gibi durmuyor.

https://www.picproje.org/index.php/topic,62384.msg483235.html (https://www.picproje.org/index.php/topic,62384.msg483235.html) Şu konuya bir bakar mısınız?

Adres olarak 0x68 Kullanıyorsanız bir de onu bir bit sola kaydırıp dener misiniz. Yani 0xD0 olarak?
Başlık: Ynt: MPU6050 I2C Problemi
Gönderen: selimkoc - 23 Mayıs 2016, 11:31:59
Mikroc I2C habaerleşmede oku/yaz bitini (0.bit) kendisi ayarlıyor. Dolayısı ile 0.bit kullanılmıyor. Adresi 1 bit sağa kaydırmak gerekiyor.
Başlık: Ynt: MPU6050 I2C Problemi
Gönderen: ogy - 27 Mayıs 2016, 15:47:25
@Cemre. ve @selimkoc hocam ben adres olarak zaten 0xD0 kullanıyordum. 0x68 yapınca düzeldi.Şimdi okuma kısmıyla uğraşıyorum.Bir sorun olursa tekrar burdan sorarım.